# # test of new fulltext search features # let collation=utf8_unicode_ci; --source include/have_collation.inc # # two-level tree # --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE t1 ( i int(10) unsigned not null auto_increment primary key, a varchar(255) not null, FULLTEXT KEY (a) ) ENGINE=MyISAM; # two-level entry, second-level tree with depth 2 --disable_query_log begin; let $1=260; while ($1) { eval insert t1 (a) values ('aaaxxx'); dec $1; } # two-level entry, second-level tree has only one page let $1=255; while ($1) { eval insert t1 (a) values ('aaazzz'); dec $1; } # one-level entry (entries) let $1=250; while ($1) { eval insert t1 (a) values ('aaayyy'); dec $1; } commit; --enable_query_log # converting to two-level repair table t1 quick; check table t1; optimize table t1; # BUG#5327 - mi_sort_index() of 2-level tree check table t1; select count(*) from t1 where match a against ('aaaxxx'); select count(*) from t1 where match a against ('aaayyy'); select count(*) from t1 where match a against ('aaazzz'); select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaayyy' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz'); select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz' in boolean mode); select count(*) from t1 where match a against ('aaax*' in boolean mode); select count(*) from t1 where match a against ('aaay*' in boolean mode); select count(*) from t1 where match a against ('aaa*' in boolean mode); # mi_write: insert t1 (a) values ('aaaxxx'),('aaayyy'); # call to enlarge_root() below insert t1 (a) values ('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'); select count(*) from t1 where match a against ('aaaxxx'); select count(*) from t1 where match a against ('aaayyy'); select count(*) from t1 where match a against ('aaazzz'); # mi_delete insert t1 (a) values ('aaaxxx 000000'); select count(*) from t1 where match a against ('000000'); delete from t1 where match a against ('000000'); select count(*) from t1 where match a against ('000000'); select count(*) from t1 where match a against ('aaaxxx'); delete from t1 where match a against ('aaazzz'); select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaayyy' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); # double-check without index select count(*) from t1 where a = 'aaaxxx'; select count(*) from t1 where a = 'aaayyy'; select count(*) from t1 where a = 'aaazzz'; # update insert t1 (a) values ('aaaxxx 000000'); select count(*) from t1 where match a against ('000000'); update t1 set a='aaazzz' where match a against ('000000'); select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); update t1 set a='aaazzz' where a = 'aaaxxx'; update t1 set a='aaaxxx' where a = 'aaayyy'; select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaayyy' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); drop table t1; CREATE TABLE t1 ( i int(10) unsigned not null auto_increment primary key, a varchar(255) not null, FULLTEXT KEY (a) ) ENGINE=MyISAM; # # now same as about but w/o repair table # 2-level tree created by mi_write # # two-level entry, second-level tree with depth 2 --disable_query_log let $1=260; begin; while ($1) { eval insert t1 (a) values ('aaaxxx'); dec $1; } let $1=255; while ($1) { eval insert t1 (a) values ('aaazzz'); dec $1; } let $1=250; while ($1) { eval insert t1 (a) values ('aaayyy'); dec $1; } commit; --enable_query_log select count(*) from t1 where match a against ('aaaxxx'); select count(*) from t1 where match a against ('aaayyy'); select count(*) from t1 where match a against ('aaazzz'); select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaayyy' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz'); select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz' in boolean mode); select count(*) from t1 where match a against ('aaax*' in boolean mode); select count(*) from t1 where match a against ('aaay*' in boolean mode); select count(*) from t1 where match a against ('aaa*' in boolean mode); # mi_write: insert t1 (a) values ('aaaxxx'),('aaayyy'); insert t1 (a) values ('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'); select count(*) from t1 where match a against ('aaaxxx'); select count(*) from t1 where match a against ('aaayyy'); select count(*) from t1 where match a against ('aaazzz'); # mi_delete insert t1 (a) values ('aaaxxx 000000'); select count(*) from t1 where match a against ('000000'); delete from t1 where match a against ('000000'); select count(*) from t1 where match a against ('000000'); select count(*) from t1 where match a against ('aaaxxx'); delete from t1 where match a against ('aaazzz'); select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaayyy' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); # double-check without index select count(*) from t1 where a = 'aaaxxx'; select count(*) from t1 where a = 'aaayyy'; select count(*) from t1 where a = 'aaazzz'; # update insert t1 (a) values ('aaaxxx 000000'); select count(*) from t1 where match a against ('000000'); update t1 set a='aaazzz' where match a against ('000000'); select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); update t1 set a='aaazzz' where a = 'aaaxxx'; update t1 set a='aaaxxx' where a = 'aaayyy'; select count(*) from t1 where match a against ('aaaxxx' in boolean mode); select count(*) from t1 where match a against ('aaayyy' in boolean mode); select count(*) from t1 where match a against ('aaazzz' in boolean mode); drop table t1; # # BUG#11336 # # for uca collation isalnum and strnncollsp don't agree on whether # 0xC2A0 is a space (strnncollsp is right, isalnum is wrong). # # they still don't, the bug was fixed by avoiding strnncollsp # set names utf8; create table t1(a text,fulltext(a)) collate=utf8_swedish_ci; insert into t1 values('test test '),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'); delete from t1 limit 1; # # BUG#16489: utf8 + fulltext leads to corrupt index file. # truncate table t1; insert into t1 values('ab c d'); update t1 set a='ab c d'; select * from t1 where match a against('ab c' in boolean mode); drop table t1; set names latin1; # End of 4.1 tests # # BUG#19580 - FULLTEXT search produces wrong results on UTF-8 columns # --disable_service_connection SET NAMES utf8; CREATE TABLE t1(a VARCHAR(255), FULLTEXT(a)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO t1 VALUES('„MySQL“'); SELECT a FROM t1 WHERE MATCH a AGAINST('“MySQL„' IN BOOLEAN MODE); DROP TABLE t1; SET NAMES latin1; --enable_service_connection