Loading myisam/ft_parser.c +4 −2 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, while (doc<end) { for (;doc<end;doc++) for (; doc < end; doc+= mbl) { if (true_word_char(cs,*doc)) break; if (*doc == FTB_RQUOT && param->quot) Loading @@ -120,6 +120,7 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, *start=doc+1; return 3; /* FTB_RBR */ } mbl= my_mbcharlen(cs, *(uchar *)doc); if (!param->quot) { if (*doc == FTB_LBR || *doc == FTB_RBR || *doc == FTB_LQUOT) Loading Loading @@ -187,10 +188,11 @@ byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, const byte *end, do { for (;; doc++) for (;; doc+= mbl) { if (doc >= end) DBUG_RETURN(0); if (true_word_char(cs, *doc)) break; mbl= my_mbcharlen(cs, *(uchar *)doc); } mwc= length= 0; Loading mysql-test/r/fulltext2.result +12 −0 Original line number Diff line number Diff line Loading @@ -241,3 +241,15 @@ select * from t1 where match a against('ab c' in boolean mode); a drop table t1; set names latin1; CREATE TABLE t1(a VARCHAR(255) CHARACTER SET gbk, FULLTEXT(a)); SET NAMES utf8; INSERT INTO t1 VALUES(0xF043616161),(0xBEF361616197C22061616161); SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST(0x97C22061616161 IN BOOLEAN MODE); HEX(a) BEF361616197C22061616161 DELETE FROM t1 LIMIT 1; CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK SET NAMES latin1; DROP TABLE t1; mysql-test/t/fulltext2.test +12 −0 Original line number Diff line number Diff line Loading @@ -220,4 +220,16 @@ select * from t1 where match a against('ab c' in boolean mode); drop table t1; set names latin1; # # BUG#29299 - repeatable myisam fulltext index corruption # CREATE TABLE t1(a VARCHAR(255) CHARACTER SET gbk, FULLTEXT(a)); SET NAMES utf8; INSERT INTO t1 VALUES(0xF043616161),(0xBEF361616197C22061616161); SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST(0x97C22061616161 IN BOOLEAN MODE); DELETE FROM t1 LIMIT 1; CHECK TABLE t1; SET NAMES latin1; DROP TABLE t1; # End of 4.1 tests Loading
myisam/ft_parser.c +4 −2 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, while (doc<end) { for (;doc<end;doc++) for (; doc < end; doc+= mbl) { if (true_word_char(cs,*doc)) break; if (*doc == FTB_RQUOT && param->quot) Loading @@ -120,6 +120,7 @@ byte ft_get_word(CHARSET_INFO *cs, byte **start, byte *end, *start=doc+1; return 3; /* FTB_RBR */ } mbl= my_mbcharlen(cs, *(uchar *)doc); if (!param->quot) { if (*doc == FTB_LBR || *doc == FTB_RBR || *doc == FTB_LQUOT) Loading Loading @@ -187,10 +188,11 @@ byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, const byte *end, do { for (;; doc++) for (;; doc+= mbl) { if (doc >= end) DBUG_RETURN(0); if (true_word_char(cs, *doc)) break; mbl= my_mbcharlen(cs, *(uchar *)doc); } mwc= length= 0; Loading
mysql-test/r/fulltext2.result +12 −0 Original line number Diff line number Diff line Loading @@ -241,3 +241,15 @@ select * from t1 where match a against('ab c' in boolean mode); a drop table t1; set names latin1; CREATE TABLE t1(a VARCHAR(255) CHARACTER SET gbk, FULLTEXT(a)); SET NAMES utf8; INSERT INTO t1 VALUES(0xF043616161),(0xBEF361616197C22061616161); SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST(0x97C22061616161 IN BOOLEAN MODE); HEX(a) BEF361616197C22061616161 DELETE FROM t1 LIMIT 1; CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK SET NAMES latin1; DROP TABLE t1;
mysql-test/t/fulltext2.test +12 −0 Original line number Diff line number Diff line Loading @@ -220,4 +220,16 @@ select * from t1 where match a against('ab c' in boolean mode); drop table t1; set names latin1; # # BUG#29299 - repeatable myisam fulltext index corruption # CREATE TABLE t1(a VARCHAR(255) CHARACTER SET gbk, FULLTEXT(a)); SET NAMES utf8; INSERT INTO t1 VALUES(0xF043616161),(0xBEF361616197C22061616161); SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST(0x97C22061616161 IN BOOLEAN MODE); DELETE FROM t1 LIMIT 1; CHECK TABLE t1; SET NAMES latin1; DROP TABLE t1; # End of 4.1 tests