Loading mysql-test/r/heap_btree.result +15 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,21 @@ a 1 1 drop table t1; CREATE TABLE t1 ( c1 CHAR(3), c2 INTEGER, KEY USING BTREE(c1), KEY USING BTREE(c2) ) ENGINE= MEMORY; INSERT INTO t1 VALUES ('ABC',0), ('A',0), ('B',0), ('C',0); UPDATE t1 SET c2= c2 + 1 WHERE c1 = 'A'; SELECT * FROM t1; c1 c2 ABC 0 A 1 B 0 C 0 DROP TABLE t1; End of 4.1 tests CREATE TABLE t1(val INT, KEY USING BTREE(val)) ENGINE=memory; INSERT INTO t1 VALUES(0); Loading mysql-test/t/heap_btree.test +14 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,20 @@ delete from t1 where a >= 2; select a from t1 order by a; drop table t1; # # Bug#26996 - Update of a Field in a Memory Table ends with wrong result # CREATE TABLE t1 ( c1 CHAR(3), c2 INTEGER, KEY USING BTREE(c1), KEY USING BTREE(c2) ) ENGINE= MEMORY; INSERT INTO t1 VALUES ('ABC',0), ('A',0), ('B',0), ('C',0); UPDATE t1 SET c2= c2 + 1 WHERE c1 = 'A'; SELECT * FROM t1; DROP TABLE t1; --echo End of 4.1 tests # Loading storage/heap/hp_write.c +0 −1 Original line number Diff line number Diff line Loading @@ -105,7 +105,6 @@ int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *record, heap_rb_param custom_arg; uint old_allocated; info->last_pos= NULL; /* For heap_rnext/heap_rprev */ custom_arg.keyseg= keyinfo->seg; custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos); if (keyinfo->flag & HA_NOSAME) Loading storage/myisam/ha_myisam.cc +35 −1 Original line number Diff line number Diff line Loading @@ -632,6 +632,9 @@ bool ha_myisam::check_if_locking_is_allowed(uint sql_command, int ha_myisam::open(const char *name, int mode, uint test_if_locked) { MI_KEYDEF *keyinfo; MI_COLUMNDEF *recinfo= 0; uint recs; uint i; /* Loading @@ -654,6 +657,26 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked) if (!(file=mi_open(name, mode, test_if_locked | HA_OPEN_FROM_SQL_LAYER))) return (my_errno ? my_errno : -1); if (!table->s->tmp_table) /* No need to perform a check for tmp table */ { if ((my_errno= table2myisam(table, &keyinfo, &recinfo, &recs))) { /* purecov: begin inspected */ DBUG_PRINT("error", ("Failed to convert TABLE object to MyISAM " "key and column definition")); goto err; /* purecov: end */ } if (check_definition(keyinfo, recinfo, table->s->keys, recs, file->s->keyinfo, file->s->rec, file->s->base.keys, file->s->base.fields, true)) { /* purecov: begin inspected */ my_errno= HA_ERR_CRASHED; goto err; /* purecov: end */ } } if (test_if_locked & (HA_OPEN_IGNORE_IF_LOCKED | HA_OPEN_TMP_TABLE)) VOID(mi_extra(file, HA_EXTRA_NO_WAIT_LOCK, 0)); Loading @@ -674,7 +697,18 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked) (struct st_mysql_ftparser *)parser->plugin->info; table->key_info[i].block_size= file->s->keyinfo[i].block_length; } return (0); my_errno= 0; goto end; err: this->close(); end: /* Both recinfo and keydef are allocated by my_multi_malloc(), thus only recinfo must be freed. */ if (recinfo) my_free((gptr) recinfo, MYF(0)); return my_errno; } int ha_myisam::close(void) Loading Loading
mysql-test/r/heap_btree.result +15 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,21 @@ a 1 1 drop table t1; CREATE TABLE t1 ( c1 CHAR(3), c2 INTEGER, KEY USING BTREE(c1), KEY USING BTREE(c2) ) ENGINE= MEMORY; INSERT INTO t1 VALUES ('ABC',0), ('A',0), ('B',0), ('C',0); UPDATE t1 SET c2= c2 + 1 WHERE c1 = 'A'; SELECT * FROM t1; c1 c2 ABC 0 A 1 B 0 C 0 DROP TABLE t1; End of 4.1 tests CREATE TABLE t1(val INT, KEY USING BTREE(val)) ENGINE=memory; INSERT INTO t1 VALUES(0); Loading
mysql-test/t/heap_btree.test +14 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,20 @@ delete from t1 where a >= 2; select a from t1 order by a; drop table t1; # # Bug#26996 - Update of a Field in a Memory Table ends with wrong result # CREATE TABLE t1 ( c1 CHAR(3), c2 INTEGER, KEY USING BTREE(c1), KEY USING BTREE(c2) ) ENGINE= MEMORY; INSERT INTO t1 VALUES ('ABC',0), ('A',0), ('B',0), ('C',0); UPDATE t1 SET c2= c2 + 1 WHERE c1 = 'A'; SELECT * FROM t1; DROP TABLE t1; --echo End of 4.1 tests # Loading
storage/heap/hp_write.c +0 −1 Original line number Diff line number Diff line Loading @@ -105,7 +105,6 @@ int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *record, heap_rb_param custom_arg; uint old_allocated; info->last_pos= NULL; /* For heap_rnext/heap_rprev */ custom_arg.keyseg= keyinfo->seg; custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos); if (keyinfo->flag & HA_NOSAME) Loading
storage/myisam/ha_myisam.cc +35 −1 Original line number Diff line number Diff line Loading @@ -632,6 +632,9 @@ bool ha_myisam::check_if_locking_is_allowed(uint sql_command, int ha_myisam::open(const char *name, int mode, uint test_if_locked) { MI_KEYDEF *keyinfo; MI_COLUMNDEF *recinfo= 0; uint recs; uint i; /* Loading @@ -654,6 +657,26 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked) if (!(file=mi_open(name, mode, test_if_locked | HA_OPEN_FROM_SQL_LAYER))) return (my_errno ? my_errno : -1); if (!table->s->tmp_table) /* No need to perform a check for tmp table */ { if ((my_errno= table2myisam(table, &keyinfo, &recinfo, &recs))) { /* purecov: begin inspected */ DBUG_PRINT("error", ("Failed to convert TABLE object to MyISAM " "key and column definition")); goto err; /* purecov: end */ } if (check_definition(keyinfo, recinfo, table->s->keys, recs, file->s->keyinfo, file->s->rec, file->s->base.keys, file->s->base.fields, true)) { /* purecov: begin inspected */ my_errno= HA_ERR_CRASHED; goto err; /* purecov: end */ } } if (test_if_locked & (HA_OPEN_IGNORE_IF_LOCKED | HA_OPEN_TMP_TABLE)) VOID(mi_extra(file, HA_EXTRA_NO_WAIT_LOCK, 0)); Loading @@ -674,7 +697,18 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked) (struct st_mysql_ftparser *)parser->plugin->info; table->key_info[i].block_size= file->s->keyinfo[i].block_length; } return (0); my_errno= 0; goto end; err: this->close(); end: /* Both recinfo and keydef are allocated by my_multi_malloc(), thus only recinfo must be freed. */ if (recinfo) my_free((gptr) recinfo, MYF(0)); return my_errno; } int ha_myisam::close(void) Loading