InnoDB Plugin
1.0
|
#include "univ.i"
#include "data0data.h"
#include "dict0types.h"
#include "row0mysql.h"
#include "fts0fts.h"
#include "fts0types.h"
#include "fts0priv.h"
#include "row0merge.h"
Go to the source code of this file.
Data Structures | |
struct | fts_doc_item |
struct | fts_psort_common_t |
struct | fts_psort_t |
struct | fts_tokenize_ctx |
struct | fts_psort_insert |
Macros | |
#define | FTS_NUM_AUX_INDEX 6 |
#define | FTS_PLL_MERGE 1 |
#define | FTS_PARENT_COMPLETE 1 |
#define | FTS_PARENT_EXITING 2 |
#define | FTS_CHILD_COMPLETE 1 |
#define | FTS_CHILD_EXITING 2 |
#define | FTSORT_PRINT |
#define | DEBUG_FTS_SORT_PRINT(str) |
Typedefs | |
typedef struct fts_doc_item | fts_doc_item_t |
typedef ut_list_base < fts_doc_item_t > | fts_doc_list_t |
typedef struct fts_tokenize_ctx | fts_tokenize_ctx_t |
typedef struct fts_psort_insert | fts_psort_insert_t |
Functions | |
UNIV_INTERN dict_index_t * | row_merge_create_fts_sort_index (dict_index_t *index, const dict_table_t *table, ibool *opt_doc_id_size) |
UNIV_INTERN ibool | row_fts_psort_info_init (trx_t *trx, row_merge_dup_t *dup, const dict_table_t *new_table, ibool opt_doc_id_size, fts_psort_t **psort, fts_psort_t **merge)) |
UNIV_INTERN void | row_fts_psort_info_destroy (fts_psort_t *psort_info, fts_psort_t *merge_info) |
UNIV_INTERN void | row_fts_free_pll_merge_buf (fts_psort_t *psort_info) |
UNIV_INTERN os_thread_ret_t | fts_parallel_tokenization (void *arg) |
UNIV_INTERN void | row_fts_start_psort (fts_psort_t *psort_info) |
UNIV_INTERN os_thread_ret_t | fts_parallel_merge (void *arg) |
UNIV_INTERN void | row_fts_start_parallel_merge (fts_psort_t *merge_info) |
UNIV_INTERN void | row_fts_insert_tuple (fts_psort_insert_t *ins_ctx, fts_tokenizer_word_t *word, ib_vector_t *positions, doc_id_t *in_doc_id, dtuple_t *dtuple) |
UNIV_INTERN int | row_merge_fts_sel_propagate (int propogated, int *sel_tree, ulint level, const mrec_t **mrec, ulint **offsets, dict_index_t *index) |
UNIV_INTERN dberr_t | row_fts_merge_insert (dict_index_t *index, dict_table_t *table, fts_psort_t *psort_info, ulint id)) |
Create Full Text Index with (parallel) merge sort
Created 10/13/2010 Jimmy Yang
#define DEBUG_FTS_SORT_PRINT | ( | str | ) |
#define FTS_PARENT_COMPLETE 1 |
status bit used for communication between parent and child thread
#define FTSORT_PRINT |
Print some debug information
typedef struct fts_doc_item fts_doc_item_t |
This structure defineds information the scan thread will fetch
and put to the linked list for parallel tokenization/sort threads to process
typedef ut_list_base< fts_doc_item_t > fts_doc_list_t |
This defines the list type that scan thread would feed the parallel
tokenization threads and sort threads.
UNIV_INTERN os_thread_ret_t fts_parallel_merge | ( | void * | arg | ) |
Function performs the merge and insertion of the sorted records.
UNIV_INTERN os_thread_ret_t fts_parallel_tokenization | ( | void * | arg | ) |
Function performs parallel tokenization of the incoming doc strings.
UNIV_INTERN void row_fts_free_pll_merge_buf | ( | fts_psort_t * | psort_info | ) |
Free up merge buffers when merge sort is done in: parallel sort info
UNIV_INTERN void row_fts_insert_tuple | ( | fts_psort_insert_t * | ins_ctx, |
fts_tokenizer_word_t * | word, | ||
ib_vector_t * | positions, | ||
doc_id_t * | in_doc_id, | ||
dtuple_t * | dtuple | ||
) |
Read sorted FTS data files and insert data tuples to auxillary tables.
ins_ctx | in: insert context |
word | in: last processed tokenized word |
positions | in: word position |
in_doc_id | in: last item doc id |
UNIV_INTERN dberr_t row_fts_merge_insert | ( | dict_index_t * | index, |
dict_table_t * | table, | ||
fts_psort_t * | psort_info, | ||
ulint | id | ||
) |
Read sorted file containing index data tuples and insert these data tuples to the index
index | in: index |
table | in: new table |
psort_info | parallel sort info |
UNIV_INTERN void row_fts_psort_info_destroy | ( | fts_psort_t * | psort_info, |
fts_psort_t * | merge_info | ||
) |
Clean up and deallocate FTS parallel sort structures, and close temparary merge sort files parallel merge info
psort_info | parallel sort info |
UNIV_INTERN ibool row_fts_psort_info_init | ( | trx_t * | trx, |
row_merge_dup_t * | dup, | ||
const dict_table_t * | new_table, | ||
ibool | opt_doc_id_size, | ||
fts_psort_t ** | psort, | ||
fts_psort_t ** | merge | ||
) |
Initialize FTS parallel sort structures.
trx | in: transaction |
dup | in,own: descriptor of FTS index being created |
new_table | in: table where indexes are created |
opt_doc_id_size | in: whether to use 4 bytes instead of 8 bytes integer to store Doc ID during sort |
psort | out: parallel sort info to be instantiated |
merge | out: parallel merge info to be instantiated |
UNIV_INTERN void row_fts_start_parallel_merge | ( | fts_psort_t * | merge_info | ) |
Kick off the parallel merge and insert thread in: parallel sort info
UNIV_INTERN void row_fts_start_psort | ( | fts_psort_t * | psort_info | ) |
Start the parallel tokenization and parallel merge sort in: parallel sort info
UNIV_INTERN dict_index_t* row_merge_create_fts_sort_index | ( | dict_index_t * | index, |
const dict_table_t * | table, | ||
ibool * | opt_doc_id_size | ||
) |
Create a temporary "fts sort index" used to merge sort the tokenized doc string. The index has three "fields":
1) Tokenized word, 2) Doc ID 3) Word's position in original 'doc'.
index | in: Original FTS index based on which this sort index is created |
table | in: table that FTS index is being created on |
UNIV_INTERN int row_merge_fts_sel_propagate | ( | int | propogated, |
int * | sel_tree, | ||
ulint | level, | ||
const mrec_t ** | mrec, | ||
ulint ** | offsets, | ||
dict_index_t * | index | ||
) |
Propagate a newly added record up one level in the selection tree