Loading mysql-test/r/fulltext.result +5 −5 Original line number Diff line number Diff line Loading @@ -182,13 +182,13 @@ create table t1 (a varchar(200) not null, fulltext (a)); insert t1 values ("aaa10 bbb20"), ("aaa20 bbb15"), ("aaa30 bbb10"); select * from t1 where match a against ("+aaa* +bbb*" in boolean mode); a aaa10 bbb20 aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 aaa10 bbb20 select * from t1 where match a against ("+aaa* +bbb1*" in boolean mode); a aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 select * from t1 where match a against ("+aaa* +ccc*" in boolean mode); a select * from t1 where match a against ("+aaa10 +(bbb*)" in boolean mode); Loading @@ -196,12 +196,12 @@ a aaa10 bbb20 select * from t1 where match a against ("+(+aaa* +bbb1*)" in boolean mode); a aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 select * from t1 where match a against ("(+aaa* +bbb1*)" in boolean mode); a aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 drop table t1; CREATE TABLE t1 ( id int(11), Loading mysql-test/t/rpl_row_basic_11bugs-master.opt +1 −1 Original line number Diff line number Diff line --binlog_ignore_db=test_ignore; --binlog_ignore_db=test_ignore plugin/fulltext/plugin_example.c +2 −4 Original line number Diff line number Diff line Loading @@ -97,8 +97,7 @@ static int simple_parser_plugin_deinit(void) 1 failure (cannot happen) */ static int simple_parser_init(MYSQL_FTPARSER_PARAM *param __attribute__((unused))) static int simple_parser_init(MYSQL_FTPARSER_PARAM *param) { return(0); } Loading @@ -118,8 +117,7 @@ static int simple_parser_init(MYSQL_FTPARSER_PARAM *param 1 failure (cannot happen) */ static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param __attribute__((unused))) static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param) { return(0); } Loading storage/myisam/ft_boolean_search.c +20 −13 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ typedef struct st_ftb_word my_off_t key_root; my_off_t *max_docid; MI_KEYDEF *keyinfo; struct st_ftb_word *prev; float weight; uint ndepth; uint len; Loading @@ -121,6 +122,7 @@ typedef struct st_ft_info CHARSET_INFO *charset; FTB_EXPR *root; FTB_WORD **list; FTB_WORD *last_word; MEM_ROOT mem_root; QUEUE queue; TREE no_dupes; Loading Loading @@ -199,7 +201,9 @@ static int ftb_query_add_word(void *param, char *word, int word_len, memcpy(ftbw->word + 1, word, word_len); ftbw->word[0]= word_len; if (info->yesno > 0) ftbw->up->ythresh++; queue_insert(&ftb_param->ftb->queue, (byte *)ftbw); ftb_param->ftb->queue.max_elements++; ftbw->prev= ftb_param->ftb->last_word; ftb_param->ftb->last_word= ftbw; ftb_param->ftb->with_scan|= (info->trunc & FTB_FLAG_TRUNC); for (tmp_expr= ftb_param->ftbe; tmp_expr->up; tmp_expr= tmp_expr->up) if (! (tmp_expr->flags & FTB_FLAG_YES)) Loading Loading @@ -505,7 +509,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, { FTB *ftb; FTB_EXPR *ftbe; uint res; FTB_WORD *ftbw; if (!(ftb=(FTB *)my_malloc(sizeof(FTB), MYF(MY_WME)))) return 0; Loading @@ -518,19 +522,10 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, ftb->with_scan=0; ftb->lastpos=HA_OFFSET_ERROR; bzero(& ftb->no_dupes, sizeof(TREE)); ftb->last_word= 0; init_alloc_root(&ftb->mem_root, 1024, 1024); /* Hack: instead of init_queue, we'll use reinit queue to be able to alloc queue with alloc_root() */ res=ftb->queue.max_elements=1+query_len/2; if (!(ftb->queue.root= (byte **)alloc_root(&ftb->mem_root, (res+1)*sizeof(void*)))) goto err; reinit_queue(& ftb->queue, res, 0, 0, (int (*)(void*,byte*,byte*))FTB_WORD_cmp, 0); ftb->queue.max_elements= 0; if (!(ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR)))) goto err; ftbe->weight=1; Loading @@ -545,6 +540,18 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, _ftb_parse_query(ftb, query, query_len, keynr == NO_SUCH_KEY ? &ft_default_parser : info->s->keyinfo[keynr].parser); /* Hack: instead of init_queue, we'll use reinit queue to be able to alloc queue with alloc_root() */ if (! (ftb->queue.root= (byte **)alloc_root(&ftb->mem_root, (ftb->queue.max_elements + 1) * sizeof(void *)))) goto err; reinit_queue(&ftb->queue, ftb->queue.max_elements, 0, 0, (int (*)(void*, byte*, byte*))FTB_WORD_cmp, 0); for (ftbw= ftb->last_word; ftbw; ftbw= ftbw->prev) queue_insert(&ftb->queue, (byte *)ftbw); ftb->list=(FTB_WORD **)alloc_root(&ftb->mem_root, sizeof(FTB_WORD *)*ftb->queue.elements); memcpy(ftb->list, ftb->queue.root+1, sizeof(FTB_WORD *)*ftb->queue.elements); Loading Loading
mysql-test/r/fulltext.result +5 −5 Original line number Diff line number Diff line Loading @@ -182,13 +182,13 @@ create table t1 (a varchar(200) not null, fulltext (a)); insert t1 values ("aaa10 bbb20"), ("aaa20 bbb15"), ("aaa30 bbb10"); select * from t1 where match a against ("+aaa* +bbb*" in boolean mode); a aaa10 bbb20 aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 aaa10 bbb20 select * from t1 where match a against ("+aaa* +bbb1*" in boolean mode); a aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 select * from t1 where match a against ("+aaa* +ccc*" in boolean mode); a select * from t1 where match a against ("+aaa10 +(bbb*)" in boolean mode); Loading @@ -196,12 +196,12 @@ a aaa10 bbb20 select * from t1 where match a against ("+(+aaa* +bbb1*)" in boolean mode); a aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 select * from t1 where match a against ("(+aaa* +bbb1*)" in boolean mode); a aaa20 bbb15 aaa30 bbb10 aaa20 bbb15 drop table t1; CREATE TABLE t1 ( id int(11), Loading
mysql-test/t/rpl_row_basic_11bugs-master.opt +1 −1 Original line number Diff line number Diff line --binlog_ignore_db=test_ignore; --binlog_ignore_db=test_ignore
plugin/fulltext/plugin_example.c +2 −4 Original line number Diff line number Diff line Loading @@ -97,8 +97,7 @@ static int simple_parser_plugin_deinit(void) 1 failure (cannot happen) */ static int simple_parser_init(MYSQL_FTPARSER_PARAM *param __attribute__((unused))) static int simple_parser_init(MYSQL_FTPARSER_PARAM *param) { return(0); } Loading @@ -118,8 +117,7 @@ static int simple_parser_init(MYSQL_FTPARSER_PARAM *param 1 failure (cannot happen) */ static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param __attribute__((unused))) static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param) { return(0); } Loading
storage/myisam/ft_boolean_search.c +20 −13 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ typedef struct st_ftb_word my_off_t key_root; my_off_t *max_docid; MI_KEYDEF *keyinfo; struct st_ftb_word *prev; float weight; uint ndepth; uint len; Loading @@ -121,6 +122,7 @@ typedef struct st_ft_info CHARSET_INFO *charset; FTB_EXPR *root; FTB_WORD **list; FTB_WORD *last_word; MEM_ROOT mem_root; QUEUE queue; TREE no_dupes; Loading Loading @@ -199,7 +201,9 @@ static int ftb_query_add_word(void *param, char *word, int word_len, memcpy(ftbw->word + 1, word, word_len); ftbw->word[0]= word_len; if (info->yesno > 0) ftbw->up->ythresh++; queue_insert(&ftb_param->ftb->queue, (byte *)ftbw); ftb_param->ftb->queue.max_elements++; ftbw->prev= ftb_param->ftb->last_word; ftb_param->ftb->last_word= ftbw; ftb_param->ftb->with_scan|= (info->trunc & FTB_FLAG_TRUNC); for (tmp_expr= ftb_param->ftbe; tmp_expr->up; tmp_expr= tmp_expr->up) if (! (tmp_expr->flags & FTB_FLAG_YES)) Loading Loading @@ -505,7 +509,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, { FTB *ftb; FTB_EXPR *ftbe; uint res; FTB_WORD *ftbw; if (!(ftb=(FTB *)my_malloc(sizeof(FTB), MYF(MY_WME)))) return 0; Loading @@ -518,19 +522,10 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, ftb->with_scan=0; ftb->lastpos=HA_OFFSET_ERROR; bzero(& ftb->no_dupes, sizeof(TREE)); ftb->last_word= 0; init_alloc_root(&ftb->mem_root, 1024, 1024); /* Hack: instead of init_queue, we'll use reinit queue to be able to alloc queue with alloc_root() */ res=ftb->queue.max_elements=1+query_len/2; if (!(ftb->queue.root= (byte **)alloc_root(&ftb->mem_root, (res+1)*sizeof(void*)))) goto err; reinit_queue(& ftb->queue, res, 0, 0, (int (*)(void*,byte*,byte*))FTB_WORD_cmp, 0); ftb->queue.max_elements= 0; if (!(ftbe=(FTB_EXPR *)alloc_root(&ftb->mem_root, sizeof(FTB_EXPR)))) goto err; ftbe->weight=1; Loading @@ -545,6 +540,18 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query, _ftb_parse_query(ftb, query, query_len, keynr == NO_SUCH_KEY ? &ft_default_parser : info->s->keyinfo[keynr].parser); /* Hack: instead of init_queue, we'll use reinit queue to be able to alloc queue with alloc_root() */ if (! (ftb->queue.root= (byte **)alloc_root(&ftb->mem_root, (ftb->queue.max_elements + 1) * sizeof(void *)))) goto err; reinit_queue(&ftb->queue, ftb->queue.max_elements, 0, 0, (int (*)(void*, byte*, byte*))FTB_WORD_cmp, 0); for (ftbw= ftb->last_word; ftbw; ftbw= ftbw->prev) queue_insert(&ftb->queue, (byte *)ftbw); ftb->list=(FTB_WORD **)alloc_root(&ftb->mem_root, sizeof(FTB_WORD *)*ftb->queue.elements); memcpy(ftb->list, ftb->queue.root+1, sizeof(FTB_WORD *)*ftb->queue.elements); Loading