Commit 2de8a4bc authored by unknown's avatar unknown

Resolve merge from 4.1


mysql-test/r/grant_cache.result:
  Auto merged
mysql-test/r/merge.result:
  Auto merged
mysql-test/t/grant_cache.test:
  Auto merged
mysql-test/t/merge.test:
  Auto merged
sql/ha_myisammrg.h:
  Auto merged
sql/sql_insert.cc:
  Auto merged
sql/handler.h:
  Resolve merge
sql/table.cc:
  Resolve merge
parents f8a20dbe 9e8cad1d
drop table if exists test.t1,mysqltest.t1,mysqltest.t2; drop table if exists test.t1,mysqltest.t1,mysqltest.t2;
drop database if exists mysqltest; drop database if exists mysqltest;
set GLOBAL query_cache_size=1355776;
reset query cache; reset query cache;
flush status; flush status;
show grants for current_user; show grants for current_user;
...@@ -206,3 +207,4 @@ delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysql ...@@ -206,3 +207,4 @@ delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysql
flush privileges; flush privileges;
drop table test.t1,mysqltest.t1,mysqltest.t2; drop table test.t1,mysqltest.t1,mysqltest.t2;
drop database mysqltest; drop database mysqltest;
set GLOBAL query_cache_size=default;
...@@ -683,3 +683,13 @@ t3 1 a 1 a A NULL NULL NULL YES BTREE ...@@ -683,3 +683,13 @@ t3 1 a 1 a A NULL NULL NULL YES BTREE
t3 1 a 2 b A NULL NULL NULL YES BTREE t3 1 a 2 b A NULL NULL NULL YES BTREE
t3 1 a 3 c A NULL NULL NULL YES BTREE t3 1 a 3 c A NULL NULL NULL YES BTREE
drop table t1, t2, t3; drop table t1, t2, t3;
CREATE TABLE t1 ( a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(10), UNIQUE (b) )
ENGINE=MyISAM;
CREATE TABLE t2 ( a INT AUTO_INCREMENT, b VARCHAR(10), INDEX (a), INDEX (b) )
ENGINE=MERGE UNION (t1) INSERT_METHOD=FIRST;
INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=2;
INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=3;
SELECT b FROM t2;
b
3
DROP TABLE t1, t2;
--set-variable=query_cache_size=1355776
...@@ -10,6 +10,8 @@ drop table if exists test.t1,mysqltest.t1,mysqltest.t2; ...@@ -10,6 +10,8 @@ drop table if exists test.t1,mysqltest.t1,mysqltest.t2;
drop database if exists mysqltest; drop database if exists mysqltest;
--enable_warnings --enable_warnings
set GLOBAL query_cache_size=1355776;
reset query cache; reset query cache;
flush status; flush status;
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
...@@ -145,3 +147,5 @@ delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysql ...@@ -145,3 +147,5 @@ delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysql
flush privileges; flush privileges;
drop table test.t1,mysqltest.t1,mysqltest.t2; drop table test.t1,mysqltest.t1,mysqltest.t2;
drop database mysqltest; drop database mysqltest;
set GLOBAL query_cache_size=default;
...@@ -308,3 +308,15 @@ show index from t3; ...@@ -308,3 +308,15 @@ show index from t3;
drop table t1, t2, t3; drop table t1, t2, t3;
#
# Bug#10400 - Improperly-defined MERGE table crashes with INSERT ... ON DUPLICATE KEY UPDATE
#
CREATE TABLE t1 ( a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(10), UNIQUE (b) )
ENGINE=MyISAM;
CREATE TABLE t2 ( a INT AUTO_INCREMENT, b VARCHAR(10), INDEX (a), INDEX (b) )
ENGINE=MERGE UNION (t1) INSERT_METHOD=FIRST;
INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=2;
INSERT INTO t2 (b) VALUES (1) ON DUPLICATE KEY UPDATE b=3;
SELECT b FROM t2;
DROP TABLE t1, t2;
...@@ -37,7 +37,7 @@ class ha_myisammrg: public handler ...@@ -37,7 +37,7 @@ class ha_myisammrg: public handler
{ {
return (HA_REC_NOT_IN_SEQ | HA_AUTO_PART_KEY | HA_READ_RND_SAME | return (HA_REC_NOT_IN_SEQ | HA_AUTO_PART_KEY | HA_READ_RND_SAME |
HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED | HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED |
HA_CAN_INSERT_DELAYED); HA_CAN_INSERT_DELAYED | HA_ANY_INDEX_MAY_BE_UNIQUE);
} }
ulong index_flags(uint inx, uint part, bool all_parts) const ulong index_flags(uint inx, uint part, bool all_parts) const
{ {
......
...@@ -87,6 +87,7 @@ ...@@ -87,6 +87,7 @@
#define HA_NO_VARCHAR (1 << 27) #define HA_NO_VARCHAR (1 << 27)
#define HA_CAN_BIT_FIELD (1 << 28) /* supports bit fields */ #define HA_CAN_BIT_FIELD (1 << 28) /* supports bit fields */
#define HA_NEED_READ_RANGE_BUFFER (1 << 29) /* for read_multi_range */ #define HA_NEED_READ_RANGE_BUFFER (1 << 29) /* for read_multi_range */
#define HA_ANY_INDEX_MAY_BE_UNIQUE (1 << 30)
/* bits in index_flags(index_number) for what you can do with index */ /* bits in index_flags(index_number) for what you can do with index */
......
...@@ -948,7 +948,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info) ...@@ -948,7 +948,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
err: err:
if (key) if (key)
my_afree(key); my_safe_afree(key,table->max_unique_length,MAX_KEY_LENGTH);
info->last_errno= error; info->last_errno= error;
table->file->print_error(error,MYF(0)); table->file->print_error(error,MYF(0));
DBUG_RETURN(1); DBUG_RETURN(1);
......
...@@ -739,8 +739,13 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat, ...@@ -739,8 +739,13 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
set_if_bigger(share->max_key_length,keyinfo->key_length+ set_if_bigger(share->max_key_length,keyinfo->key_length+
keyinfo->key_parts); keyinfo->key_parts);
share->total_key_length+= keyinfo->key_length; share->total_key_length+= keyinfo->key_length;
if (keyinfo->flags & HA_NOSAME) /*
set_if_bigger(share->max_unique_length, keyinfo->key_length); MERGE tables do not have unique indexes. But every key could be
an unique index on the underlying MyISAM table. (Bug #10400)
*/
if ((keyinfo->flags & HA_NOSAME) ||
(ha_option & HA_ANY_INDEX_MAY_BE_UNIQUE))
set_if_bigger(share->max_unique_length,keyinfo->key_length);
} }
if (primary_key < MAX_KEY && if (primary_key < MAX_KEY &&
(share->keys_in_use.is_set(primary_key))) (share->keys_in_use.is_set(primary_key)))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment