mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
BUG#26238 - inserted delayed always inserts 0 for BIT columns
INSERT DELAYED inserts garbage for BIT columns. When delayed thread clones TABLE object, it didn't adjusted bit_ptr to newly created record (though it correctly adjusts ptr and null_ptr). This is fixed by correctly adjusting bit_ptr when performing a clone. With this fix BIT values are stored correctly by INSERT DELAYED. mysql-test/r/delayed.result: A test case for BUG#26238. mysql-test/t/delayed.test: A test case for BUG#26238. sql/field.h: Added move_field() to Field_bit class. When moving a field, adjust bit_ptr also, which is specific to Field_bit class.
This commit is contained in:
parent
c5beed0346
commit
af44be2d25
3 changed files with 21 additions and 1 deletions
|
@ -243,3 +243,10 @@ SET @@session.auto_increment_offset=
|
|||
@bug20830_old_session_auto_increment_offset;
|
||||
SET @@session.auto_increment_increment=
|
||||
@bug20830_old_session_auto_increment_increment;
|
||||
CREATE TABLE t1(a BIT);
|
||||
INSERT DELAYED INTO t1 VALUES(1);
|
||||
FLUSH TABLE t1;
|
||||
SELECT HEX(a) FROM t1;
|
||||
HEX(a)
|
||||
1
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -234,3 +234,11 @@ SET @@session.auto_increment_offset=
|
|||
SET @@session.auto_increment_increment=
|
||||
@bug20830_old_session_auto_increment_increment;
|
||||
|
||||
#
|
||||
# BUG#26238 - inserted delayed always inserts 0 for BIT columns
|
||||
#
|
||||
CREATE TABLE t1(a BIT);
|
||||
INSERT DELAYED INTO t1 VALUES(1);
|
||||
FLUSH TABLE t1;
|
||||
SELECT HEX(a) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -225,7 +225,7 @@ public:
|
|||
ptr=ptr_arg; null_ptr=null_ptr_arg; null_bit=null_bit_arg;
|
||||
}
|
||||
inline void move_field(char *ptr_arg) { ptr=ptr_arg; }
|
||||
inline void move_field(my_ptrdiff_t ptr_diff)
|
||||
virtual inline void move_field(my_ptrdiff_t ptr_diff)
|
||||
{
|
||||
ptr=ADD_TO_PTR(ptr,ptr_diff,char*);
|
||||
if (null_ptr)
|
||||
|
@ -1407,6 +1407,11 @@ public:
|
|||
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
|
||||
char *new_ptr, uchar *new_null_ptr,
|
||||
uint new_null_bit);
|
||||
inline void move_field(my_ptrdiff_t ptr_diff)
|
||||
{
|
||||
Field::move_field(ptr_diff);
|
||||
bit_ptr= ADD_TO_PTR(bit_ptr, ptr_diff, uchar*);
|
||||
}
|
||||
void set_bit_ptr(uchar *bit_ptr_arg, uchar bit_ofs_arg)
|
||||
{
|
||||
bit_ptr= bit_ptr_arg;
|
||||
|
|
Loading…
Add table
Reference in a new issue