Loading mysql-test/r/merge.result +4 −4 Original line number Diff line number Diff line Loading @@ -178,9 +178,9 @@ t3 CREATE TABLE `t3` ( ) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t1`,`t2`) create table t4 (a int not null, b char(10), key(a)) engine=MERGE UNION=(t1,t2); select * from t4; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist alter table t4 add column c int; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist create database mysqltest; create table mysqltest.t6 (a int not null primary key auto_increment, message char(20)); create table t5 (a int not null, b char(20), key(a)) engine=MERGE UNION=(test.t1,mysqltest.t6); Loading Loading @@ -777,11 +777,11 @@ DROP TABLE t1, t2; CREATE TABLE t1(a INT) ENGINE=MEMORY; CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1); SELECT * FROM t2; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE t1, t2; CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3); SELECT * FROM t2; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE t2; create table t1 (b bit(1)); create table t2 (b bit(1)); Loading sql/ha_myisammrg.cc +14 −1 Original line number Diff line number Diff line Loading @@ -326,9 +326,22 @@ void ha_myisammrg::info(uint flag) if (flag & HA_STATUS_CONST) { if (table->s->key_parts && info.rec_per_key) { #ifdef HAVE_purify /* valgrind may be unhappy about it, because optimizer may access values between file->keys and table->key_parts, that will be uninitialized. It's safe though, because even if opimizer will decide to use a key with such a number, it'll be an error later anyway. */ bzero((char*) table->key_info[0].rec_per_key, sizeof(table->key_info[0].rec_per_key) * table->key_parts); #endif memcpy((char*) table->key_info[0].rec_per_key, (char*) info.rec_per_key, sizeof(table->key_info[0].rec_per_key)*table->s->key_parts); sizeof(table->key_info[0].rec_per_key) * min(file->keys, table->s->key_parts)); } } } Loading sql/share/errmsg.txt +1 −1 Original line number Diff line number Diff line Loading @@ -3813,7 +3813,7 @@ ER_WRONG_MRG_TABLE cze "V-Bechny tabulky v MERGE tabulce nejsou definovny stejn" dan "Tabellerne i MERGE er ikke defineret ens" nla "Niet alle tabellen in de MERGE tabel hebben identieke gedefinities" eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists" eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist" est "Kik tabelid MERGE tabeli mratluses ei ole identsed" fre "Toutes les tables de la table de type MERGE n'ont pas la mme dfinition" ger "Nicht alle Tabellen in der MERGE-Tabelle sind gleich definiert" Loading sql/sql_update.cc +6 −0 Original line number Diff line number Diff line Loading @@ -1095,6 +1095,8 @@ multi_update::initialize_tables(JOIN *join) List<Item> temp_fields= *fields_for_table[cnt]; ORDER group; if (ignore) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); if (table == main_table) // First table in join { if (safe_update_on_fly(join->join_tab, &temp_fields)) Loading Loading @@ -1210,7 +1212,11 @@ multi_update::~multi_update() { TABLE_LIST *table; for (table= update_tables ; table; table= table->next_local) { table->table->no_keyread= table->table->no_cache= 0; if (ignore) table->table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); } if (tmp_tables) { Loading Loading
mysql-test/r/merge.result +4 −4 Original line number Diff line number Diff line Loading @@ -178,9 +178,9 @@ t3 CREATE TABLE `t3` ( ) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t1`,`t2`) create table t4 (a int not null, b char(10), key(a)) engine=MERGE UNION=(t1,t2); select * from t4; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist alter table t4 add column c int; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist create database mysqltest; create table mysqltest.t6 (a int not null primary key auto_increment, message char(20)); create table t5 (a int not null, b char(20), key(a)) engine=MERGE UNION=(test.t1,mysqltest.t6); Loading Loading @@ -777,11 +777,11 @@ DROP TABLE t1, t2; CREATE TABLE t1(a INT) ENGINE=MEMORY; CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1); SELECT * FROM t2; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE t1, t2; CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3); SELECT * FROM t2; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE t2; create table t1 (b bit(1)); create table t2 (b bit(1)); Loading
sql/ha_myisammrg.cc +14 −1 Original line number Diff line number Diff line Loading @@ -326,9 +326,22 @@ void ha_myisammrg::info(uint flag) if (flag & HA_STATUS_CONST) { if (table->s->key_parts && info.rec_per_key) { #ifdef HAVE_purify /* valgrind may be unhappy about it, because optimizer may access values between file->keys and table->key_parts, that will be uninitialized. It's safe though, because even if opimizer will decide to use a key with such a number, it'll be an error later anyway. */ bzero((char*) table->key_info[0].rec_per_key, sizeof(table->key_info[0].rec_per_key) * table->key_parts); #endif memcpy((char*) table->key_info[0].rec_per_key, (char*) info.rec_per_key, sizeof(table->key_info[0].rec_per_key)*table->s->key_parts); sizeof(table->key_info[0].rec_per_key) * min(file->keys, table->s->key_parts)); } } } Loading
sql/share/errmsg.txt +1 −1 Original line number Diff line number Diff line Loading @@ -3813,7 +3813,7 @@ ER_WRONG_MRG_TABLE cze "V-Bechny tabulky v MERGE tabulce nejsou definovny stejn" dan "Tabellerne i MERGE er ikke defineret ens" nla "Niet alle tabellen in de MERGE tabel hebben identieke gedefinities" eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists" eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist" est "Kik tabelid MERGE tabeli mratluses ei ole identsed" fre "Toutes les tables de la table de type MERGE n'ont pas la mme dfinition" ger "Nicht alle Tabellen in der MERGE-Tabelle sind gleich definiert" Loading
sql/sql_update.cc +6 −0 Original line number Diff line number Diff line Loading @@ -1095,6 +1095,8 @@ multi_update::initialize_tables(JOIN *join) List<Item> temp_fields= *fields_for_table[cnt]; ORDER group; if (ignore) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); if (table == main_table) // First table in join { if (safe_update_on_fly(join->join_tab, &temp_fields)) Loading Loading @@ -1210,7 +1212,11 @@ multi_update::~multi_update() { TABLE_LIST *table; for (table= update_tables ; table; table= table->next_local) { table->table->no_keyread= table->table->no_cache= 0; if (ignore) table->table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); } if (tmp_tables) { Loading