Commit dd72d525 authored by istruewing@chilla.local's avatar istruewing@chilla.local

Merge chilla.local:/home/mydev/mysql-5.1-ateam

into  chilla.local:/home/mydev/mysql-5.1-bug28810
parents 0880e245 c16c5db7
...@@ -476,16 +476,15 @@ ALTER TABLE t1 DISABLE KEYS; ...@@ -476,16 +476,15 @@ ALTER TABLE t1 DISABLE KEYS;
SELECT * FROM t1 WHERE MATCH(a) AGAINST('test'); SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
ERROR HY000: Can't find FULLTEXT index matching the column list ERROR HY000: Can't find FULLTEXT index matching the column list
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
FULLTEXT(a));
INSERT INTO t1 VALUES(0xA3C2);
DROP TABLE t1;
CREATE TABLE t1(a VARCHAR(20), FULLTEXT(a)); CREATE TABLE t1(a VARCHAR(20), FULLTEXT(a));
INSERT INTO t1 VALUES('Offside'),('City Of God'); INSERT INTO t1 VALUES('Offside'),('City Of God');
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city of*' IN BOOLEAN MODE); SELECT a FROM t1 WHERE MATCH a AGAINST ('+city of*' IN BOOLEAN MODE);
a a
City Of God City Of God
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city (of)*' IN BOOLEAN MODE); SELECT a FROM t1 WHERE MATCH a AGAINST ('+city (of*)' IN BOOLEAN MODE);
a
City Of God
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city* of*' IN BOOLEAN MODE);
a a
City Of God City Of God
DROP TABLE t1; DROP TABLE t1;
...@@ -11,3 +11,7 @@ Table Op Msg_type Msg_text ...@@ -11,3 +11,7 @@ Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
SET NAMES latin1; SET NAMES latin1;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
FULLTEXT(a));
INSERT INTO t1 VALUES(0xA3C2);
DROP TABLE t1;
...@@ -399,22 +399,14 @@ ALTER TABLE t1 DISABLE KEYS; ...@@ -399,22 +399,14 @@ ALTER TABLE t1 DISABLE KEYS;
SELECT * FROM t1 WHERE MATCH(a) AGAINST('test'); SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
DROP TABLE t1; DROP TABLE t1;
#
# BUG#29464 - load data infile into table with big5 chinese fulltext index
# hangs 100% cpu
#
CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
FULLTEXT(a));
INSERT INTO t1 VALUES(0xA3C2);
DROP TABLE t1;
# #
# BUG#29445 - match ... against () never returns # BUG#29445 - match ... against () never returns
# #
CREATE TABLE t1(a VARCHAR(20), FULLTEXT(a)); CREATE TABLE t1(a VARCHAR(20), FULLTEXT(a));
INSERT INTO t1 VALUES('Offside'),('City Of God'); INSERT INTO t1 VALUES('Offside'),('City Of God');
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city of*' IN BOOLEAN MODE); SELECT a FROM t1 WHERE MATCH a AGAINST ('+city of*' IN BOOLEAN MODE);
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city (of)*' IN BOOLEAN MODE); SELECT a FROM t1 WHERE MATCH a AGAINST ('+city (of*)' IN BOOLEAN MODE);
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city* of*' IN BOOLEAN MODE);
DROP TABLE t1; DROP TABLE t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -22,3 +22,13 @@ DROP TABLE t1; ...@@ -22,3 +22,13 @@ DROP TABLE t1;
# End of 5.0 tests # End of 5.0 tests
#
# BUG#29464 - load data infile into table with big5 chinese fulltext index
# hangs 100% cpu
#
CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
FULLTEXT(a));
INSERT INTO t1 VALUES(0xA3C2);
DROP TABLE t1;
# End of 5.1 tests
...@@ -23,6 +23,12 @@ ...@@ -23,6 +23,12 @@
inside plus subtree. max_docid could be used by any word in plus inside plus subtree. max_docid could be used by any word in plus
subtree, but it could be updated by plus-word only. subtree, but it could be updated by plus-word only.
Fulltext "smarter index merge" optimization assumes that rows
it gets are ordered by doc_id. That is not the case when we
search for a word with truncation operator. It may return
rows in random order. Thus we may not use "smarter index merge"
optimization with "trunc-words".
The idea is: there is no need to search for docid smaller than The idea is: there is no need to search for docid smaller than
biggest docid inside current plus subtree or any upper plus subtree. biggest docid inside current plus subtree or any upper plus subtree.
...@@ -443,7 +449,7 @@ static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search) ...@@ -443,7 +449,7 @@ static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
memcpy(lastkey_buf+off, info->lastkey, info->lastkey_length); memcpy(lastkey_buf+off, info->lastkey, info->lastkey_length);
} }
ftbw->docid[0]=info->lastpos; ftbw->docid[0]=info->lastpos;
if (ftbw->flags & FTB_FLAG_YES) if (ftbw->flags & FTB_FLAG_YES && !(ftbw->flags & FTB_FLAG_TRUNC))
ftbw->max_docid_expr->max_docid= info->lastpos; ftbw->max_docid_expr->max_docid= info->lastpos;
return 0; return 0;
} }
...@@ -488,7 +494,7 @@ static void _ftb_init_index_search(FT_INFO *ftb) ...@@ -488,7 +494,7 @@ static void _ftb_init_index_search(FT_INFO *ftb)
{ {
if (ftbe->flags & FTB_FLAG_NO || /* 2 */ if (ftbe->flags & FTB_FLAG_NO || /* 2 */
ftbe->up->ythresh - ftbe->up->yweaks > ftbe->up->ythresh - ftbe->up->yweaks >
test(ftbe->flags & FTB_FLAG_YES)) /* 1 */ (uint) test(ftbe->flags & FTB_FLAG_YES)) /* 1 */
{ {
FTB_EXPR *top_ftbe=ftbe->up; FTB_EXPR *top_ftbe=ftbe->up;
ftbw->docid[0]=HA_OFFSET_ERROR; ftbw->docid[0]=HA_OFFSET_ERROR;
......
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