diff options
Diffstat (limited to 'storage/xtradb/fts')
-rw-r--r-- | storage/xtradb/fts/fts0ast.cc | 48 | ||||
-rw-r--r-- | storage/xtradb/fts/fts0opt.cc | 2 | ||||
-rw-r--r-- | storage/xtradb/fts/fts0que.cc | 44 |
3 files changed, 75 insertions, 19 deletions
diff --git a/storage/xtradb/fts/fts0ast.cc b/storage/xtradb/fts/fts0ast.cc index dd48ffee14d..030b972440f 100644 --- a/storage/xtradb/fts/fts0ast.cc +++ b/storage/xtradb/fts/fts0ast.cc @@ -694,3 +694,51 @@ fts_ast_string_print( printf("\n"); } + +#ifdef UNIV_DEBUG +const char* +fts_ast_oper_name_get(fts_ast_oper_t oper) +{ + switch(oper) { + case FTS_NONE: + return("FTS_NONE"); + case FTS_IGNORE: + return("FTS_IGNORE"); + case FTS_EXIST: + return("FTS_EXIST"); + case FTS_NEGATE: + return("FTS_NEGATE"); + case FTS_INCR_RATING: + return("FTS_INCR_RATING"); + case FTS_DECR_RATING: + return("FTS_DECR_RATING"); + case FTS_DISTANCE: + return("FTS_DISTANCE"); + case FTS_IGNORE_SKIP: + return("FTS_IGNORE_SKIP"); + case FTS_EXIST_SKIP: + return("FTS_EXIST_SKIP"); + } + ut_ad(0); +} + +const char* +fts_ast_node_type_get(fts_ast_type_t type) +{ + switch (type) { + case FTS_AST_OPER: + return("FTS_AST_OPER"); + case FTS_AST_NUMB: + return("FTS_AST_NUMB"); + case FTS_AST_TERM: + return("FTS_AST_TERM"); + case FTS_AST_TEXT: + return("FTS_AST_TEXT"); + case FTS_AST_LIST: + return("FTS_AST_LIST"); + case FTS_AST_SUBEXP_LIST: + return("FTS_AST_SUBEXP_LIST"); + } + ut_ad(0); +} +#endif /* UNIV_DEBUG */ diff --git a/storage/xtradb/fts/fts0opt.cc b/storage/xtradb/fts/fts0opt.cc index 2e2bd061d07..5891b53a6e2 100644 --- a/storage/xtradb/fts/fts0opt.cc +++ b/storage/xtradb/fts/fts0opt.cc @@ -2577,8 +2577,6 @@ fts_optimize_add_table( return; } - ut_ad(table->cached && table->fts != NULL); - /* Make sure table with FTS index cannot be evicted */ if (table->can_be_evicted) { dict_table_move_from_lru_to_non_lru(table); diff --git a/storage/xtradb/fts/fts0que.cc b/storage/xtradb/fts/fts0que.cc index 1ca5f80b182..9d8e7aec9ab 100644 --- a/storage/xtradb/fts/fts0que.cc +++ b/storage/xtradb/fts/fts0que.cc @@ -1534,7 +1534,8 @@ fts_merge_doc_ids( { const ib_rbt_node_t* node; - ut_a(!rbt_empty(doc_ids)); + DBUG_ENTER("fts_merge_doc_ids"); + ut_a(!query->intersection); /* To process FTS_EXIST operation (intersection), we need @@ -1559,7 +1560,7 @@ fts_merge_doc_ids( query, ranking->doc_id, ranking->rank); if (query->error != DB_SUCCESS) { - return(query->error); + DBUG_RETURN(query->error); } /* Merge words. Don't need to take operator into account. */ @@ -1578,7 +1579,7 @@ fts_merge_doc_ids( query->intersection = NULL; } - return(DB_SUCCESS); + DBUG_RETURN(DB_SUCCESS); } /*****************************************************************//** @@ -2839,11 +2840,11 @@ fts_query_visitor( fts_query_t* query = static_cast<fts_query_t*>(arg); ut_a(node); + DBUG_ENTER("fts_query_visitor"); + DBUG_PRINT("fts", ("nodetype: %s", fts_ast_node_type_get(node->type))); token.f_n_char = 0; - query->oper = oper; - query->cur_node = node; switch (node->type) { @@ -2905,7 +2906,7 @@ fts_query_visitor( query->multi_exist = true; } - return(query->error); + DBUG_RETURN(query->error); } /*****************************************************************//** @@ -2929,6 +2930,8 @@ fts_ast_visit_sub_exp( bool will_be_ignored = false; bool multi_exist; + DBUG_ENTER("fts_ast_visit_sub_exp"); + ut_a(node->type == FTS_AST_SUBEXP_LIST); cur_oper = query->oper; @@ -2957,14 +2960,14 @@ fts_ast_visit_sub_exp( /* Merge the sub-expression result with the parent result set. */ subexpr_doc_ids = query->doc_ids; query->doc_ids = parent_doc_ids; - if (error == DB_SUCCESS && !rbt_empty(subexpr_doc_ids)) { + if (error == DB_SUCCESS) { error = fts_merge_doc_ids(query, subexpr_doc_ids); } /* Free current result set. Result already merged into parent. */ fts_query_free_doc_ids(query, subexpr_doc_ids); - return(error); + DBUG_RETURN(error); } #if 0 @@ -3440,8 +3443,10 @@ fts_retrieve_ranking( ib_rbt_bound_t parent; fts_ranking_t new_ranking; + DBUG_ENTER("fts_retrieve_ranking"); + if (!result || !result->rankings_by_id) { - return(0); + DBUG_RETURN(0); } new_ranking.doc_id = doc_id; @@ -3452,10 +3457,10 @@ fts_retrieve_ranking( ranking = rbt_value(fts_ranking_t, parent.last); - return(ranking->rank); + DBUG_RETURN(ranking->rank); } - return(0); + DBUG_RETURN(0); } /*****************************************************************//** @@ -3472,6 +3477,8 @@ fts_query_prepare_result( const ib_rbt_node_t* node; bool result_is_null = false; + DBUG_ENTER("fts_query_prepare_result"); + if (result == NULL) { result = static_cast<fts_result_t*>(ut_malloc(sizeof(*result))); @@ -3520,7 +3527,7 @@ fts_query_prepare_result( if (query->total_size > fts_result_cache_limit) { query->error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT; fts_query_free_result(result); - return(NULL); + DBUG_RETURN(NULL); } } @@ -3543,7 +3550,7 @@ fts_query_prepare_result( ranking->rank * word_freq->idf * word_freq->idf); } - return(result); + DBUG_RETURN(result); } ut_a(rbt_size(query->doc_ids) > 0); @@ -3570,7 +3577,7 @@ fts_query_prepare_result( if (query->total_size > fts_result_cache_limit) { query->error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT; fts_query_free_result(result); - return(NULL); + DBUG_RETURN(NULL); } } } @@ -3582,7 +3589,7 @@ fts_query_prepare_result( query->doc_ids = NULL; } - return(result); + DBUG_RETURN(result); } /*****************************************************************//** @@ -3594,6 +3601,8 @@ fts_query_get_result( fts_query_t* query, /*!< in: query instance */ fts_result_t* result) /*!< in: result */ { + DBUG_ENTER("fts_query_get_result"); + if (rbt_size(query->doc_ids) > 0 || query->flags == FTS_OPT_RANKING) { /* Copy the doc ids to the result. */ result = fts_query_prepare_result(query, result); @@ -3603,7 +3612,7 @@ fts_query_get_result( memset(result, 0, sizeof(*result)); } - return(result); + DBUG_RETURN(result); } /*****************************************************************//** @@ -3681,6 +3690,7 @@ fts_query_parse( int error; fts_ast_state_t state; bool mode = query->boolean_mode; + DBUG_ENTER("fts_query_parse"); memset(&state, 0x0, sizeof(state)); @@ -3699,7 +3709,7 @@ fts_query_parse( query->root = state.root; } - return(state.root); + DBUG_RETURN(state.root); } /*******************************************************************//** |