summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <svoj@mysql.com/april.(none)>2007-04-27 00:32:51 +0500
committerunknown <svoj@mysql.com/april.(none)>2007-04-27 00:32:51 +0500
commita4bfd854145379f86bf622a44e28ced6136c8fa8 (patch)
treefc1098a7293ea4b9e386c05fbbac0c07d3791efd
parentb6eb3e40fda41c3d236ad3906044847a2f7f56c2 (diff)
parent3673aaeb6b6e04b804e5308147234cfa80cd78de (diff)
downloadmariadb-git-a4bfd854145379f86bf622a44e28ced6136c8fa8.tar.gz
Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-4.1-build
into mysql.com:/home/svoj/devel/mysql/merge/mysql-4.1-engines
-rw-r--r--myisam/mi_rkey.c4
-rw-r--r--myisam/myisamdef.h1
-rw-r--r--myisammrg/myrg_rkey.c4
-rw-r--r--mysql-test/r/fulltext.result7
-rw-r--r--mysql-test/r/merge.result11
-rw-r--r--mysql-test/t/fulltext.test10
-rw-r--r--mysql-test/t/merge.test13
-rw-r--r--sql/item_func.cc2
8 files changed, 50 insertions, 2 deletions
diff --git a/myisam/mi_rkey.c b/myisam/mi_rkey.c
index b2d40288645..e34799da6ed 100644
--- a/myisam/mi_rkey.c
+++ b/myisam/mi_rkey.c
@@ -50,7 +50,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
key_buff=info->lastkey+info->s->base.max_key_length;
pack_key_length= key_len;
bmove(key_buff,key,key_len);
- last_used_keyseg= 0;
+ last_used_keyseg= info->s->keyinfo[inx].seg + info->last_used_keyseg;
}
else
{
@@ -62,6 +62,8 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
key_len, &last_used_keyseg);
/* Save packed_key_length for use by the MERGE engine. */
info->pack_key_length= pack_key_length;
+ info->last_used_keyseg= (uint16) (last_used_keyseg -
+ info->s->keyinfo[inx].seg);
DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE, keyinfo->seg,
key_buff, pack_key_length););
}
diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h
index 6365f0e1b0c..6ed041e8b9d 100644
--- a/myisam/myisamdef.h
+++ b/myisam/myisamdef.h
@@ -263,6 +263,7 @@ struct st_myisam_info {
enum ha_rkey_function last_key_func; /* CONTAIN, OVERLAP, etc */
uint save_lastkey_length;
uint pack_key_length; /* For MYISAMMRG */
+ uint16 last_used_keyseg; /* For MyISAMMRG */
int errkey; /* Got last error on this key */
int lock_type; /* How database was locked */
int tmp_lock_type; /* When locked by readinfo */
diff --git a/myisammrg/myrg_rkey.c b/myisammrg/myrg_rkey.c
index f87b264081e..b72334ea7dd 100644
--- a/myisammrg/myrg_rkey.c
+++ b/myisammrg/myrg_rkey.c
@@ -41,12 +41,14 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key,
{
byte *key_buff;
uint pack_key_length;
+ uint16 last_used_keyseg;
MYRG_TABLE *table;
MI_INFO *mi;
int err;
DBUG_ENTER("myrg_rkey");
LINT_INIT(key_buff);
LINT_INIT(pack_key_length);
+ LINT_INIT(last_used_keyseg);
if (_myrg_init_queue(info,inx,search_flag))
DBUG_RETURN(my_errno);
@@ -61,10 +63,12 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key,
/* Get the saved packed key and packed key length. */
key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length;
pack_key_length=mi->pack_key_length;
+ last_used_keyseg= mi->last_used_keyseg;
}
else
{
mi->once_flags|= USE_PACKED_KEYS;
+ mi->last_used_keyseg= last_used_keyseg;
err=mi_rkey(mi,0,inx,key_buff,pack_key_length,search_flag);
}
info->last_used_table=table+1;
diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result
index c1dd5f80d5c..3700ace4b19 100644
--- a/mysql-test/r/fulltext.result
+++ b/mysql-test/r/fulltext.result
@@ -447,3 +447,10 @@ a MATCH(a) AGAINST('test1 test')
test1 0.68526661396027
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a));
+SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test');
+a
+ALTER TABLE t1 DISABLE KEYS;
+SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE t1;
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result
index 00d8aa3d586..b12e4eb2d3a 100644
--- a/mysql-test/r/merge.result
+++ b/mysql-test/r/merge.result
@@ -819,3 +819,14 @@ ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
SELECT * FROM m1;
c1 c2 c3 c4 c5 c6 c7 c8 c9
DROP TABLE t1, m1;
+CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci,
+b INT, INDEX(a,b));
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2);
+INSERT INTO t1 VALUES ('ss',1);
+INSERT INTO t2 VALUES ('ss',2),(0xDF,2);
+SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2;
+COUNT(*)
+2
+DROP TABLE t1,t2,t3;
diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test
index d5ce6241490..1a9a6b578dc 100644
--- a/mysql-test/t/fulltext.test
+++ b/mysql-test/t/fulltext.test
@@ -369,4 +369,14 @@ EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
+#
+# BUG#25951 - ignore/use index does not work with fulltext
+#
+CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a));
+SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test');
+ALTER TABLE t1 DISABLE KEYS;
+--error 1191
+SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
+DROP TABLE t1;
+
# End of 4.1 tests
diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test
index 032e80ecc93..377160d0312 100644
--- a/mysql-test/t/merge.test
+++ b/mysql-test/t/merge.test
@@ -454,4 +454,17 @@ ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
SELECT * FROM m1;
DROP TABLE t1, m1;
+#
+# BUG#24342 - Incorrect results with query over MERGE table
+#
+CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci,
+ b INT, INDEX(a,b));
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2);
+INSERT INTO t1 VALUES ('ss',1);
+INSERT INTO t2 VALUES ('ss',2),(0xDF,2);
+SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2;
+DROP TABLE t1,t2,t3;
+
# End of 4.1 tests
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 88c3dfcdfc0..c6b2fa5cc3e 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -3158,7 +3158,7 @@ bool Item_func_match::fix_index()
for (keynr=0 ; keynr < table->keys ; keynr++)
{
if ((table->key_info[keynr].flags & HA_FULLTEXT) &&
- (table->keys_in_use_for_query.is_set(keynr)))
+ (table->keys_in_use.is_set(keynr)))
{
ft_to_key[fts]=keynr;
ft_cnt[fts]=0;