summaryrefslogtreecommitdiff
path: root/myisam/ft_parser.c
diff options
context:
space:
mode:
authorunknown <serg@serg.mylan>2003-10-23 15:21:06 +0200
committerunknown <serg@serg.mylan>2003-10-23 15:21:06 +0200
commitaa98f58bae74bc25a557d146b7a1bae80217c342 (patch)
tree2ce015b91940f6ae6e70f56ba571010c4c8eb3f0 /myisam/ft_parser.c
parentfd85cc84e4cad1f40e09af35265f47cf57750c49 (diff)
downloadmariadb-git-aa98f58bae74bc25a557d146b7a1bae80217c342.tar.gz
query expansion for fulltext search
myisam/ft_boolean_search.c: assert.h and queues.h moved to ftdefs.h myisam/ft_parser.c: ft_parse() with alloc myisam/ft_static.c: api changes, ft_max_word_len_for_sort variable removed myisam/ft_update.c: ft_parse() with alloc myisam/ftdefs.h: variable ft_max_word_len_for_sort -> define FT_MAX_WORD_LEN_FOR_SORT api changes, ft_max_word_len_for_sort variable removed ft_parse() with alloc myisam/mi_check.c: variable ft_max_word_len_for_sort -> define FT_MAX_WORD_LEN_FOR_SORT myisam/myisamchk.c: ft_max_word_len_for_sort removed mysql-test/r/fulltext.result: query expansion tests mysql-test/r/fulltext_var.result: ft_max_word_len_for_sort removed mysql-test/t/fulltext.test: query expansion tests sql/ha_myisam.h: ft api changes for query expansion sql/mysqld.cc: ft_max_word_len_for_sort removed ft_query_expansion_limit added sql/set_var.cc: ft_max_word_len_for_sort removed ft_query_expansion_limit added sql/sql_yacc.yy: EXPANSION added to keyword: rule
Diffstat (limited to 'myisam/ft_parser.c')
-rw-r--r--myisam/ft_parser.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/myisam/ft_parser.c b/myisam/ft_parser.c
index d6d1378bdae..8ab67aa9c6f 100644
--- a/myisam/ft_parser.c
+++ b/myisam/ft_parser.c
@@ -183,7 +183,7 @@ void ft_parse_init(TREE *wtree, CHARSET_INFO *cs)
DBUG_VOID_RETURN;
}
-int ft_parse(TREE *wtree, byte *doc, int doclen)
+int ft_parse(TREE *wtree, byte *doc, int doclen, my_bool with_alloc)
{
byte *end=doc+doclen;
FT_WORD w;
@@ -191,6 +191,15 @@ int ft_parse(TREE *wtree, byte *doc, int doclen)
while (ft_simple_get_word(wtree->custom_arg, &doc,end,&w))
{
+ if (with_alloc)
+ {
+ byte *ptr;
+ /* allocating the data in the tree - to avoid mallocs and frees */
+ DBUG_ASSERT(wtree->with_delete==0);
+ ptr=(byte *)alloc_root(& wtree->mem_root,w.len);
+ memcpy(ptr, w.pos, w.len);
+ w.pos=ptr;
+ }
if (!tree_insert(wtree, &w, 0, wtree->custom_arg))
goto err;
}