From bcd14123bc160f0ebbed0a13cdad2a88c0cbd2f2 Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Sun, 22 Feb 2004 00:19:36 +0100 Subject: [PATCH] ftb +(+(many -parens)) bug fixed --- myisam/ft_boolean_search.c | 8 +++++--- mysql-test/r/fulltext.result | 4 ++++ mysql-test/t/fulltext.test | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index c7128464228..799022a5a0d 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -55,8 +55,9 @@ static double _nwghts[11]= static double *nwghts=_nwghts+5; /* nwghts[i] = -0.5*1.5**i */ #define FTB_FLAG_TRUNC 1 /* MUST be 1 */ -#define FTB_FLAG_YES 2 /* These two - YES and NO */ -#define FTB_FLAG_NO 4 /* should NEVER be set both */ +#define FTB_FLAG_YES 2 /* no two from these three */ +#define FTB_FLAG_NO 4 /* YES, NO, WONLY */ +#define FTB_FLAG_WONLY 8 /* should be ever set both */ typedef struct st_ftb_expr FTB_EXPR; struct st_ftb_expr @@ -444,7 +445,8 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_ ftbe->cur_weight += weight; if (ftbe->yesses < ythresh) break; - yn= (ftbe->yesses++ == ythresh) ? ftbe->flags : 0 ; + if (!(yn & FTB_FLAG_WONLY)) + yn= (ftbe->yesses++ == ythresh) ? ftbe->flags : FTB_FLAG_WONLY ; weight*= ftbe->weight; } } diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index 651baad266e..738941f63c7 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -117,6 +117,10 @@ 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 ('+(support collections) +foobar*' 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 AGAINST ("search" IN BOOLEAN MODE); a b Full-text search in MySQL implements vector space model diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 02657ba3775..774a3b42619 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -18,7 +18,6 @@ select * from t1 where MATCH(a,b) AGAINST ("collections"); select * from t1 where MATCH(a,b) AGAINST ("indexes"); select * from t1 where MATCH(a,b) AGAINST ("indexes collections"); - # add_ft_keys() tests explain select * from t1 where MATCH(a,b) AGAINST ("collections"); @@ -54,6 +53,9 @@ 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 i"' 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); + # boolean w/o index: select * from t1 where MATCH a AGAINST ("search" IN BOOLEAN MODE);