Loading myisam/ft_boolean_search.c +19 −10 Original line number Diff line number Diff line Loading @@ -360,25 +360,34 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, } /* returns 1 if str0 contain str1 */ /* returns 1 if str0 ~= /\<str1\>/ */ static int _ftb_strstr(const byte *s0, const byte *e0, const byte *s1, const byte *e1, CHARSET_INFO *cs) { const byte *p; const byte *p0, *p1; my_bool s_after, e_before; while (s0 < e0) s_after=true_word_char(s1[0]); e_before=true_word_char(e1[-1]); p0=s0; while (p0 < e0) { while (s0 < e0 && cs->to_upper[(uint) (uchar) *s0++] != while (p0 < e0 && cs->to_upper[(uint) (uchar) *p0++] != cs->to_upper[(uint) (uchar) *s1]) /* no-op */; if (s0 >= e0) if (p0 >= e0) return 0; p=s1+1; while (s0 < e0 && p < e1 && cs->to_upper[(uint) (uchar) *s0] == cs->to_upper[(uint) (uchar) *p]) s0++, p++; if (p >= e1) if (s_after && p0-1 > s0 && true_word_char(p0[-2])) continue; p1=s1+1; while (p0 < e0 && p1 < e1 && cs->to_upper[(uint) (uchar) *p0] == cs->to_upper[(uint) (uchar) *p1]) p0++, p1++; if (p1 == e1 && (!e_before || p0 == e0 || !true_word_char(p0[0]))) return 1; } return 0; Loading myisam/ft_parser.c +0 −9 Original line number Diff line number Diff line Loading @@ -105,15 +105,6 @@ FT_WORD * ft_linearize(TREE *wtree) DBUG_RETURN(wlist); } #define true_word_char(X) (isalnum(X) || (X)=='_') #ifdef HYPHEN_IS_DELIM #define misc_word_char(X) ((X)=='\'') #else #define misc_word_char(X) ((X)=='\'' || (X)=='-') #endif #define word_char(X) (true_word_char(X) || misc_word_char(X)) /* returns: * 0 - eof * 1 - word found Loading myisam/ftdefs.h +3 −2 Original line number Diff line number Diff line Loading @@ -22,8 +22,9 @@ #include <m_ctype.h> #include <my_tree.h> #define HYPHEN_IS_DELIM #define HYPHEN_IS_CONCAT /* not used for now */ #define true_word_char(X) (isalnum(X) || (X)=='_') #define misc_word_char(X) ((X)=='\'') #define word_char(X) (true_word_char(X) || misc_word_char(X)) #define COMPILE_STOPWORDS_IN Loading mysql-test/r/fulltext.result +2 −1 Original line number Diff line number Diff line Loading @@ -116,7 +116,8 @@ a b MySQL has now support for full-text search select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE); a b Full-text indexes are called collections select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); a b select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); a b select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); Loading mysql-test/t/fulltext.test +1 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ select * from t1 where MATCH a,b AGAINST ('"text search" "now support"' IN BOOL select * from t1 where MATCH a,b AGAINST ('"text search" -"now support"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); Loading Loading
myisam/ft_boolean_search.c +19 −10 Original line number Diff line number Diff line Loading @@ -360,25 +360,34 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, } /* returns 1 if str0 contain str1 */ /* returns 1 if str0 ~= /\<str1\>/ */ static int _ftb_strstr(const byte *s0, const byte *e0, const byte *s1, const byte *e1, CHARSET_INFO *cs) { const byte *p; const byte *p0, *p1; my_bool s_after, e_before; while (s0 < e0) s_after=true_word_char(s1[0]); e_before=true_word_char(e1[-1]); p0=s0; while (p0 < e0) { while (s0 < e0 && cs->to_upper[(uint) (uchar) *s0++] != while (p0 < e0 && cs->to_upper[(uint) (uchar) *p0++] != cs->to_upper[(uint) (uchar) *s1]) /* no-op */; if (s0 >= e0) if (p0 >= e0) return 0; p=s1+1; while (s0 < e0 && p < e1 && cs->to_upper[(uint) (uchar) *s0] == cs->to_upper[(uint) (uchar) *p]) s0++, p++; if (p >= e1) if (s_after && p0-1 > s0 && true_word_char(p0[-2])) continue; p1=s1+1; while (p0 < e0 && p1 < e1 && cs->to_upper[(uint) (uchar) *p0] == cs->to_upper[(uint) (uchar) *p1]) p0++, p1++; if (p1 == e1 && (!e_before || p0 == e0 || !true_word_char(p0[0]))) return 1; } return 0; Loading
myisam/ft_parser.c +0 −9 Original line number Diff line number Diff line Loading @@ -105,15 +105,6 @@ FT_WORD * ft_linearize(TREE *wtree) DBUG_RETURN(wlist); } #define true_word_char(X) (isalnum(X) || (X)=='_') #ifdef HYPHEN_IS_DELIM #define misc_word_char(X) ((X)=='\'') #else #define misc_word_char(X) ((X)=='\'' || (X)=='-') #endif #define word_char(X) (true_word_char(X) || misc_word_char(X)) /* returns: * 0 - eof * 1 - word found Loading
myisam/ftdefs.h +3 −2 Original line number Diff line number Diff line Loading @@ -22,8 +22,9 @@ #include <m_ctype.h> #include <my_tree.h> #define HYPHEN_IS_DELIM #define HYPHEN_IS_CONCAT /* not used for now */ #define true_word_char(X) (isalnum(X) || (X)=='_') #define misc_word_char(X) ((X)=='\'') #define word_char(X) (true_word_char(X) || misc_word_char(X)) #define COMPILE_STOPWORDS_IN Loading
mysql-test/r/fulltext.result +2 −1 Original line number Diff line number Diff line Loading @@ -116,7 +116,8 @@ a b MySQL has now support for full-text search select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE); a b Full-text indexes are called collections select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); a b select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); a b select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); Loading
mysql-test/t/fulltext.test +1 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ select * from t1 where MATCH a,b AGAINST ('"text search" "now support"' IN BOOL select * from t1 where MATCH a,b AGAINST ('"text search" -"now support"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); Loading