1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.0

into  may.pils.ru:/home/svoj/devel/bk/mysql-5.0-engines
This commit is contained in:
svoj@may.pils.ru
2006-10-08 15:14:53 +05:00
4 changed files with 25 additions and 6 deletions

View File

@ -178,9 +178,9 @@ t3 CREATE TABLE `t3` (
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t1`,`t2`) ) 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); create table t4 (a int not null, b char(10), key(a)) engine=MERGE UNION=(t1,t2);
select * from t4; 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; 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 database mysqltest;
create table mysqltest.t6 (a int not null primary key auto_increment, message char(20)); 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); create table t5 (a int not null, b char(20), key(a)) engine=MERGE UNION=(test.t1,mysqltest.t6);
@ -777,11 +777,11 @@ DROP TABLE t1, t2;
CREATE TABLE t1(a INT) ENGINE=MEMORY; CREATE TABLE t1(a INT) ENGINE=MEMORY;
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1); CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1);
SELECT * FROM t2; 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; DROP TABLE t1, t2;
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3); CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
SELECT * FROM t2; 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; DROP TABLE t2;
create table t1 (b bit(1)); create table t1 (b bit(1));
create table t2 (b bit(1)); create table t2 (b bit(1));

View File

@ -326,9 +326,22 @@ void ha_myisammrg::info(uint flag)
if (flag & HA_STATUS_CONST) if (flag & HA_STATUS_CONST)
{ {
if (table->s->key_parts && info.rec_per_key) 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, memcpy((char*) table->key_info[0].rec_per_key,
(char*) info.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));
}
} }
} }

View File

@ -3813,7 +3813,7 @@ ER_WRONG_MRG_TABLE
cze "V-B<>echny tabulky v MERGE tabulce nejsou definov<6F>ny stejn<6A>" cze "V-B<>echny tabulky v MERGE tabulce nejsou definov<6F>ny stejn<6A>"
dan "Tabellerne i MERGE er ikke defineret ens" dan "Tabellerne i MERGE er ikke defineret ens"
nla "Niet alle tabellen in de MERGE tabel hebben identieke gedefinities" 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 "K<>ik tabelid MERGE tabeli m<><6D>ratluses ei ole identsed" est "K<>ik tabelid MERGE tabeli m<><6D>ratluses ei ole identsed"
fre "Toutes les tables de la table de type MERGE n'ont pas la m<>me d<>finition" fre "Toutes les tables de la table de type MERGE n'ont pas la m<>me d<>finition"
ger "Nicht alle Tabellen in der MERGE-Tabelle sind gleich definiert" ger "Nicht alle Tabellen in der MERGE-Tabelle sind gleich definiert"

View File

@ -1095,6 +1095,8 @@ multi_update::initialize_tables(JOIN *join)
List<Item> temp_fields= *fields_for_table[cnt]; List<Item> temp_fields= *fields_for_table[cnt];
ORDER group; ORDER group;
if (ignore)
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
if (table == main_table) // First table in join if (table == main_table) // First table in join
{ {
if (safe_update_on_fly(join->join_tab, &temp_fields)) if (safe_update_on_fly(join->join_tab, &temp_fields))
@ -1210,7 +1212,11 @@ multi_update::~multi_update()
{ {
TABLE_LIST *table; TABLE_LIST *table;
for (table= update_tables ; table; table= table->next_local) for (table= update_tables ; table; table= table->next_local)
{
table->table->no_keyread= table->table->no_cache= 0; table->table->no_keyread= table->table->no_cache= 0;
if (ignore)
table->table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
}
if (tmp_tables) if (tmp_tables)
{ {