MySQL 9.1.0
Source Code Documentation
fts0fts.h
Go to the documentation of this file.
1/*****************************************************************************
2
3Copyright (c) 2006, 2024, Oracle and/or its affiliates.
4
5This program is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License, version 2.0, as published by the
7Free Software Foundation.
8
9This program is designed to work with certain software (including
10but not limited to OpenSSL) that is licensed under separate terms,
11as designated in a particular file or component or in included license
12documentation. The authors of MySQL hereby grant you an additional
13permission to link the program and your derivative works with the
14separately licensed software that they have either included with
15the program or referenced in the documentation.
16
17This program is distributed in the hope that it will be useful, but WITHOUT
18ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
20for more details.
21
22You should have received a copy of the GNU General Public License along with
23this program; if not, write to the Free Software Foundation, Inc.,
2451 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
26*****************************************************************************/
27
28/** @file include/fts0fts.h
29 Full text search header file
30
31 Created 2011/09/02 Sunny Bains
32 ***********************************************************************/
33
34#ifndef fts0fts_h
35#define fts0fts_h
36
37#include "ha_prototypes.h"
38
39#include "data0type.h"
40#include "data0types.h"
41#include "dict0types.h"
42#include "ft_global.h"
43#include "hash0hash.h"
44#include "mem0mem.h"
46#include "que0types.h"
47#include "rem0types.h"
48#include "row0types.h"
49#include "trx0types.h"
50#include "ut0rbt.h"
51#include "ut0vec.h"
52#include "ut0wqueue.h"
53
54struct CHARSET_INFO;
55
56/** "NULL" value of a document id. */
57#define FTS_NULL_DOC_ID 0
58
59/** FTS hidden column that is used to map to and from the row */
60#define FTS_DOC_ID_COL_NAME "FTS_DOC_ID"
61
62/** The name of the index created by FTS */
63#define FTS_DOC_ID_INDEX_NAME "FTS_DOC_ID_INDEX"
64
65#define FTS_DOC_ID_INDEX_NAME_LEN 16
66
67/** Doc ID is a 8 byte value */
68#define FTS_DOC_ID_LEN 8
69
70/** The number of fields to sort when we build FT index with
71FIC. Three fields are sort: (word, doc_id, position) */
72#define FTS_NUM_FIELDS_SORT 3
73
74/** Maximum number of rows in a table, smaller than which, we will
75optimize using a 4 byte Doc ID for FIC merge sort to reduce sort size */
76#define MAX_DOC_ID_OPT_VAL 1073741824
77
78/** Document id type. */
79typedef uint64_t doc_id_t;
80
81/** doc_id_t printf format */
82#define FTS_DOC_ID_FORMAT IB_ID_FMT
83
84/** Convert document id to the InnoDB (BIG ENDIAN) storage format. */
85#define fts_write_doc_id(d, s) mach_write_to_8(d, s)
86
87/** Read a document id to internal format. */
88#define fts_read_doc_id(s) mach_read_from_8(s)
89
90/** Bind the doc id to a variable */
91#define fts_bind_doc_id(i, n, v) pars_info_bind_int8_literal(i, n, v)
92
93/** Defines for FTS query mode, they have the same values as
94those defined in mysql file ft_global.h */
95#define FTS_NL 0
96#define FTS_BOOL 1
97#define FTS_SORTED 2
98#define FTS_EXPAND 4
99#define FTS_NO_RANKING 8
100#define FTS_PROXIMITY 16
101#define FTS_PHRASE 32
102#define FTS_OPT_RANKING 64
103
104#define FTS_INDEX_TABLE_IND_NAME "FTS_INDEX_TABLE_IND"
105#define FTS_COMMON_TABLE_IND_NAME "FTS_COMMON_TABLE_IND"
106
107/** The number of FTS index partitions for a fulltext index. */
108constexpr size_t FTS_NUM_AUX_INDEX = 6;
109
110/** The number of FTS AUX common table for a fulltext index. */
111constexpr size_t FTS_NUM_AUX_COMMON = 5;
112
113/** Threshold where our optimize thread automatically kicks in */
114#define FTS_OPTIMIZE_THRESHOLD 10000000
115
116/** Threshold to avoid exhausting of doc ids. Consecutive doc id difference
117should not exceed FTS_DOC_ID_MAX_STEP */
118#define FTS_DOC_ID_MAX_STEP 65535
119
120/** Maximum possible Fulltext word length */
121#define FTS_MAX_WORD_LEN HA_FT_MAXBYTELEN
122
123/** Maximum possible Fulltext word length (in characters) */
124#define FTS_MAX_WORD_LEN_IN_CHAR HA_FT_MAXCHARLEN
125
126/** Number of columns in FTS AUX Tables */
127#define FTS_DELETED_TABLE_NUM_COLS 1
128#define FTS_CONFIG_TABLE_NUM_COLS 2
129#define FTS_AUX_INDEX_TABLE_NUM_COLS 5
130
131/** DELETED_TABLE(doc_id BIGINT UNSIGNED) */
132#define FTS_DELETED_TABLE_COL_LEN 8
133/** CONFIG_TABLE(key CHAR(50), value CHAR(200)) */
134#define FTS_CONFIG_TABLE_KEY_COL_LEN 50
135#define FTS_CONFIG_TABLE_VALUE_COL_LEN 200
136
137#define FTS_INDEX_WORD_LEN FTS_MAX_WORD_LEN
138#define FTS_INDEX_FIRST_DOC_ID_LEN 8
139#define FTS_INDEX_LAST_DOC_ID_LEN 8
140#define FTS_INDEX_DOC_COUNT_LEN 4
141/* BLOB COLUMN, 0 means VARIABLE SIZE */
142#define FTS_INDEX_ILIST_LEN 0
143/* Maximum nested expression in fulltext binary search string */
144#define FTS_MAX_NESTED_EXP 31
145
146extern const char *FTS_PREFIX;
147extern const char *FTS_SUFFIX_BEING_DELETED;
148extern const char *FTS_SUFFIX_BEING_DELETED_CACHE;
149extern const char *FTS_SUFFIX_CONFIG;
150extern const char *FTS_SUFFIX_DELETED;
151extern const char *FTS_SUFFIX_DELETED_CACHE;
152
153extern const char *FTS_PREFIX_5_7;
154extern const char *FTS_SUFFIX_CONFIG_5_7;
155
156/** Variable specifying the number of word to optimize for each optimize table
157call */
158extern ulong fts_num_word_optimize;
159
160/** Variable specifying whether we do additional FTS diagnostic printout
161in the log */
162extern bool fts_enable_diag_print;
163
164/** FTS rank type, which will be between 0 .. 1 inclusive */
165typedef float fts_rank_t;
166
167/** Structure to manage FTS AUX table name and MDL during its drop */
169 /** AUX table name */
170 std::vector<char *> aux_name;
171};
172
173/** Type of a row during a transaction. FTS_NOTHING means the row can be
174forgotten from the FTS system's POV, FTS_INVALID is an internal value used
175to mark invalid states.
176
177NOTE: Do not change the order or value of these, fts_trx_row_get_new_state
178depends on them being exactly as they are. */
186
187/** The FTS table types. */
189 FTS_INDEX_TABLE, /*!< FTS auxiliary table that is
190 specific to a particular FTS index
191 on a table */
192
193 FTS_COMMON_TABLE, /*!< FTS auxiliary table that is common
194 for all FTS index on a table */
195
196 FTS_OBSOLETED_TABLE /*!< FTS obsoleted tables like DOC_ID,
197 ADDED, STOPWORDS */
199
200struct fts_doc_t;
201struct fts_cache_t;
202struct fts_token_t;
203struct fts_doc_ids_t;
204struct fts_index_cache_t;
205
206/** Initialize the "fts_table" for internal query into FTS auxiliary
207tables */
208#define FTS_INIT_FTS_TABLE(fts_table, m_suffix, m_type, m_table) \
209 do { \
210 (fts_table)->suffix = m_suffix; \
211 (fts_table)->type = m_type; \
212 (fts_table)->table_id = m_table->id; \
213 (fts_table)->parent = m_table->name.m_name; \
214 (fts_table)->table = m_table; \
215 } while (0);
216
217#define FTS_INIT_INDEX_TABLE(fts_table, m_suffix, m_type, m_index) \
218 do { \
219 (fts_table)->suffix = m_suffix; \
220 (fts_table)->type = m_type; \
221 (fts_table)->table_id = m_index->table->id; \
222 (fts_table)->parent = m_index->table->name.m_name; \
223 (fts_table)->table = m_index->table; \
224 (fts_table)->index_id = m_index->id; \
225 } while (0);
226
227/** Information about changes in a single transaction affecting
228the FTS system. */
229struct fts_trx_t {
230 trx_t *trx; /*!< InnoDB transaction */
231
232 ib_vector_t *savepoints; /*!< Active savepoints, must have at
233 least one element, the implied
234 savepoint */
235 ib_vector_t *last_stmt; /*!< last_stmt */
236
237 mem_heap_t *heap; /*!< heap */
238};
239
240/** Information required for transaction savepoint handling. */
242 char *name; /*!< First entry is always NULL, the
243 default instance. Otherwise the name
244 of the savepoint */
245
246 ib_rbt_t *tables; /*!< Modified FTS tables */
247};
248
249/** Information about changed rows in a transaction for a single table. */
251 dict_table_t *table; /*!< table */
252
253 fts_trx_t *fts_trx; /*!< link to parent */
254
255 ib_rbt_t *rows; /*!< rows changed; indexed by doc-id,
256 cells are fts_trx_row_t* */
257
258 fts_doc_ids_t *added_doc_ids; /*!< list of added doc ids (NULL until
259 the first addition) */
260
261 /*!< for adding doc ids */
263};
264
265/** Information about one changed row in a transaction. */
267 doc_id_t doc_id; /*!< Id of the ins/upd/del document */
268
269 fts_row_state state; /*!< state of the row */
270
271 ib_vector_t *fts_indexes; /*!< The indexes that are affected */
272};
273
274/** List of document ids that were added during a transaction. This
275list is passed on to a background 'Add' thread and OPTIMIZE, so it
276needs its own memory heap. */
278 ib_vector_t *doc_ids; /*!< document ids (each element is
279 of type doc_id_t). */
280
281 ib_alloc_t *self_heap; /*!< Allocator used to create an
282 instance of this type and the
283 doc_ids vector */
284};
285
286// FIXME: Get rid of this if possible.
287/** Since MySQL's character set support for Unicode is woefully inadequate
288(it supports basic operations like isalpha etc. only for 8-bit characters),
289we have to implement our own. We use UTF-16 without surrogate processing
290as our in-memory format. This typedef is a single such character. */
291typedef unsigned short ib_uc_t;
292
293/** An UTF-16 ro UTF-8 string. */
295 byte *f_str; /*!< string, not necessary terminated in
296 any way */
297 ulint f_len; /*!< Length of the string in bytes */
298 ulint f_n_char; /*!< Number of characters */
299};
300
301/** Query ranked doc ids. */
303 doc_id_t doc_id; /*!< Document id */
304
305 fts_rank_t rank; /*!< Rank is between 0 .. 1 */
306
307 byte *words; /*!< this contains the words
308 that were queried
309 and found in this document */
310 ulint words_len; /*!< words len */
311};
312
313/** Query result. */
315 ib_rbt_node_t *current; /*!< Current element */
316
317 ib_rbt_t *rankings_by_id; /*!< RB tree of type fts_ranking_t
318 indexed by doc id */
319 ib_rbt_t *rankings_by_rank; /*!< RB tree of type fts_ranking_t
320 indexed by rank */
321};
322
323/** This is used to generate the FTS auxiliary table name, we need the
324table id and the index id to generate the column specific FTS auxiliary
325table name. */
327 const char *parent; /*!< Parent table name, this is
328 required only for the database
329 name */
330
331 fts_table_type_t type; /*!< The auxiliary table type */
332
333 table_id_t table_id; /*!< The table id */
334
335 space_index_t index_id; /*!< The index id */
336
337 const char *suffix; /*!< The suffix of the fts auxiliary
338 table name, can be NULL, not used
339 everywhere (yet) */
340 const dict_table_t *table; /*!< Parent table */
341 CHARSET_INFO *charset; /*!< charset info if it is for FTS
342 index auxiliary table */
343};
344
346 BG_THREAD_STOP = 1, /*!< true if the FTS background thread
347 has finished reading the ADDED table,
348 meaning more items can be added to
349 the table. */
350
351 BG_THREAD_READY = 2, /*!< true if the FTS background thread
352 is ready */
353
354 ADD_THREAD_STARTED = 4, /*!< true if the FTS add thread
355 has started */
356
357 ADDED_TABLE_SYNCED = 8, /*!< true if the ADDED table record is
358 sync-ed after crash recovery */
359};
360
362
363/** The state of the FTS sub system. */
364class fts_t {
365 public:
366 /** fts_t constructor.
367 @param[in] table table with FTS indexes
368 @param[in,out] heap memory heap where 'this' is stored */
370
371 /** fts_t destructor. */
372 ~fts_t();
373
374 /** Mutex protecting bg_threads* and fts_add_wq. */
376
377 /** Number of background threads accessing this table. */
379
380 /** Status bit regarding fts running state. true if background
381 threads running should stop themselves. */
383
384 /** Work queue for scheduling jobs for the FTS 'Add' thread, or NULL
385 if the thread has not yet been created. Each work item is a
386 fts_trx_doc_ids_t*. */
388
389 /** FTS memory buffer for this table, or NULL if the table has no FTS
390 index. */
392
393 /** FTS doc id hidden column number in the CLUSTERED index. */
395
396 /** Vector of FTS indexes, this is mainly for caching purposes. */
398
399 /** Heap for fts_t allocation. */
401};
402
403struct fts_stopword_t;
404
405/** status bits for fts_stopword_t status field. */
406#define STOPWORD_NOT_INIT 0x1
407#define STOPWORD_OFF 0x2
408#define STOPWORD_FROM_DEFAULT 0x4
409#define STOPWORD_USER_TABLE 0x8
410
411extern const char *fts_default_stopword[];
412
413/** Variable specifying the maximum FTS cache size for each table */
414extern ulong fts_max_cache_size;
415
416/** Variable specifying the total memory allocated for FTS cache */
417extern ulong fts_max_total_cache_size;
418
419/** Variable specifying the FTS result cache limit for each query */
420extern ulong fts_result_cache_limit;
421
422/** Variable specifying the maximum FTS max token size */
423extern ulong fts_max_token_size;
424
425/** Variable specifying the minimum FTS max token size */
426extern ulong fts_min_token_size;
427
428/** Whether the total memory used for FTS cache is exhausted, and we will
429need a sync to free some memory */
430extern bool fts_need_sync;
431
432/** Variable specifying the table that has Fulltext index to display its
433content through information schema table */
434extern char *fts_internal_tbl_name;
435
436#define fts_que_graph_free(graph) \
437 do { \
438 que_graph_free(graph); \
439 } while (0)
440
441/** Create a FTS cache. */
443 dict_table_t *table); /*!< table owns the FTS cache */
444
445/** Create a FTS index cache.
446 @return Index Cache */
448 dict_table_t *table, /*!< in: table with FTS index */
449 dict_index_t *index); /*!< in: FTS index */
450
451/** Remove a FTS index cache
452@param[in] table table with FTS index
453@param[in] index FTS index */
455
456/** Get the next available document id. This function creates a new
457 transaction to generate the document id.
458 @return DB_SUCCESS if OK */
459dberr_t fts_get_next_doc_id(const dict_table_t *table, /*!< in: table */
460 doc_id_t *doc_id); /*!< out: new document id */
461/** Update the next and last Doc ID in the CONFIG table to be the input
462 "doc_id" value (+ 1). We would do so after each FTS index build or
463 table truncate */
465 trx_t *trx, /*!< in/out: transaction */
466 const dict_table_t *table, /*!< in: table */
467 const char *table_name, /*!< in: table name, or NULL */
468 doc_id_t doc_id); /*!< in: DOC ID to set */
469
470/** Create a new document id.
471@param[in] table Row is of this table.
472@param[in,out] row Add doc id value to this row. This is the current row
473that is being inserted.
474@param[in] heap Memory heap on which the doc_id object will be created.
475@return DB_SUCCESS if all went well else error */
477
478/** Create a new fts_doc_ids_t.
479 @return new fts_doc_ids_t. */
481
482/** Free a fts_doc_ids_t. */
483void fts_doc_ids_free(fts_doc_ids_t *doc_ids); /*!< in: doc_ids to free */
484
485/** Notify the FTS system about an operation on an FTS-indexed table.
486@param[in] trx Innodb transaction
487@param[in] table Table
488@param[in] doc_id Doc id
489@param[in] state State of the row
490@param[in] fts_indexes Fts indexes affected (null=all) */
492 fts_row_state state, ib_vector_t *fts_indexes);
493
494/** Free an FTS trx. */
495void fts_trx_free(fts_trx_t *fts_trx); /*!< in, own: FTS trx */
496
497/** Check if common tables already exist
498@param[in] table table with fts index
499@return true on success, false on failure */
501
502/** Creates the common auxiliary tables needed for supporting an FTS index
503on the given table. row_mysql_lock_data_dictionary must have been called
504before this.
505The following tables are created.
506CREATE TABLE $FTS_PREFIX_DELETED
507 (doc_id BIGINT UNSIGNED, UNIQUE CLUSTERED INDEX on doc_id)
508CREATE TABLE $FTS_PREFIX_DELETED_CACHE
509 (doc_id BIGINT UNSIGNED, UNIQUE CLUSTERED INDEX on doc_id)
510CREATE TABLE $FTS_PREFIX_BEING_DELETED
511 (doc_id BIGINT UNSIGNED, UNIQUE CLUSTERED INDEX on doc_id)
512CREATE TABLE $FTS_PREFIX_BEING_DELETED_CACHE
513 (doc_id BIGINT UNSIGNED, UNIQUE CLUSTERED INDEX on doc_id)
514CREATE TABLE $FTS_PREFIX_CONFIG
515 (key CHAR(50), value CHAR(200), UNIQUE CLUSTERED INDEX on key)
516@param[in,out] trx transaction
517@param[in] table table with FTS index
518@param[in] name table name normalized
519@param[in] skip_doc_id_index Skip index on doc id
520@return DB_SUCCESS if succeed */
521[[nodiscard]] dberr_t fts_create_common_tables(trx_t *trx,
522 const dict_table_t *table,
523 const char *name,
524 bool skip_doc_id_index);
525
526/** Creates the column specific ancillary tables needed for supporting an
527FTS index on the given table. row_mysql_lock_data_dictionary must have
528been called before this.
529
530All FTS AUX Index tables have the following schema.
531CREATE TABLE $FTS_PREFIX_INDEX_[1-6](
532 word VARCHAR(FTS_MAX_WORD_LEN),
533 first_doc_id INT NOT NULL,
534 last_doc_id UNSIGNED NOT NULL,
535 doc_count UNSIGNED INT NOT NULL,
536 ilist VARBINARY NOT NULL,
537 UNIQUE CLUSTERED INDEX ON (word, first_doc_id))
538@param[in,out] trx transaction
539@param[in] index index instance
540@return DB_SUCCESS or error code */
541[[nodiscard]] dberr_t fts_create_index_tables(trx_t *trx, dict_index_t *index);
542
543/** Create auxiliary index tables for an FTS index.
544@param[in,out] trx transaction
545@param[in] index the index instance
546@param[in] table_name table name
547@param[in] table_id the table id
548@return DB_SUCCESS or error code */
549[[nodiscard]] dberr_t fts_create_index_tables_low(trx_t *trx,
550 dict_index_t *index,
551 const char *table_name,
552 table_id_t table_id);
553
554/** Add the FTS document id hidden column.
555@param[in,out] table Table with FTS index
556@param[in] heap Temporary memory heap, or NULL */
558
559/** Drops the ancillary tables needed for supporting an FTS index on a
560given table. row_mysql_lock_data_dictionary must have been called before
561this.
562@param[in,out] trx transaction
563@param[in] table table has the fts index
564@param[in,out] aux_vec fts aux table name vector
565@return DB_SUCCESS or error code */
567 aux_name_vec_t *aux_vec);
568
569/** Lock all FTS AUX tables (for dropping table)
570@param[in] thd thread locking the AUX table
571@param[in] table table has the fts index
572@return DB_SUCCESS or error code */
574
575/** Drop FTS AUX table DD table objects in vector
576@param[in] aux_vec aux table name vector
577@param[in] file_per_table whether file per table
578@return true on success, false on failure. */
579bool fts_drop_dd_tables(const aux_name_vec_t *aux_vec, bool file_per_table);
580
581/** Free FTS AUX table names in vector
582@param[in] aux_vec aux table name vector
583*/
585
586/** The given transaction is about to be committed; do whatever is necessary
587 from the FTS system's POV.
588 @return DB_SUCCESS or error code */
589[[nodiscard]] dberr_t fts_commit(trx_t *trx); /*!< in: transaction */
590
591/** FTS Query entry point.
592@param[in] trx transaction
593@param[in] index fts index to search
594@param[in] flags FTS search mode
595@param[in] query_str FTS query
596@param[in] query_len FTS query string len in bytes
597@param[in,out] result result doc ids
598@param[in] limit limit value
599@return DB_SUCCESS if successful otherwise error code */
600[[nodiscard]] dberr_t fts_query(trx_t *trx, dict_index_t *index, uint flags,
601 const byte *query_str, ulint query_len,
602 fts_result_t **result, ulonglong limit);
603
604/** Retrieve the FTS Relevance Ranking result for doc with doc_id
605 @return the relevance ranking value. */
607 fts_result_t *result, /*!< in: FTS result structure */
608 doc_id_t doc_id); /*!< in: the interested document
609 doc_id */
610
611/** FTS Query sort result, returned by fts_query() on fts_ranking_t::rank. */
613 instance to sort.*/
614
615/** FTS Query free result, returned by fts_query(). */
616void fts_query_free_result(fts_result_t *result); /*!< in: result instance
617 to free.*/
618
619/** Extract the doc id from the FTS hidden column. */
621 dtuple_t *row); /*!< in: row whose FTS doc id
622 we want to extract.*/
623
624/** Extract the doc id from the record that belongs to index.
625@param[in] table table
626@param[in] rec record contains FTS_DOC_ID
627@param[in] index index of rec
628@param[in] heap heap memory
629@return doc id that was extracted from rec */
631 const dict_index_t *index, mem_heap_t *heap);
632
633/** Add new fts doc id to the update vector.
634@param[in] table the table that contains the FTS index.
635@param[in,out] ufield the fts doc id field in the update vector.
636 No new memory is allocated for this in this
637 function.
638@param[in,out] next_doc_id the fts doc id that has been added to the
639 update vector. If 0, a new fts doc id is
640 automatically generated. The memory provided
641 for this argument will be used by the update
642 vector. Ensure that the life time of this
643 memory matches that of the update vector.
644@return the fts doc id used in the update vector */
646 doc_id_t *next_doc_id);
647
648/** FTS initialize. */
649void fts_startup(void);
650
651#if 0 // TODO: Enable this in WL#6608
652/******************************************************************//**
653Signal FTS threads to initiate shutdown. */
654void
655fts_start_shutdown(
656 dict_table_t* table, /*!< in: table with FTS
657 indexes */
658 fts_t* fts); /*!< in: fts instance to
659 shutdown */
660
661/******************************************************************//**
662Wait for FTS threads to shutdown. */
663void
664fts_shutdown(
665 dict_table_t* table, /*!< in: table with FTS
666 indexes */
667 fts_t* fts); /*!< in: fts instance to
668 shutdown */
669#endif
670
671/** Create an instance of fts_t.
672 @return instance of fts_t */
673fts_t *fts_create(dict_table_t *table); /*!< out: table with FTS
674 indexes */
675
676/** Free the FTS resources. */
677void fts_free(dict_table_t *table); /*!< in/out: table with
678 FTS indexes */
679
680/** Run OPTIMIZE on the given table.
681 @return DB_SUCCESS if all OK */
682dberr_t fts_optimize_table(dict_table_t *table); /*!< in: table to optimiza */
683
684/** Startup the optimize thread and create the work queue. */
685void fts_optimize_init(void);
686
687/** Since we do a horizontal split on the index table, we need to drop
688all the split tables.
689@param[in] trx transaction
690@param[in] index fts index
691@param[out] aux_vec dropped table names vector
692@return DB_SUCCESS or error code */
694 aux_name_vec_t *aux_vec);
695
696/** Empty all common talbes.
697@param[in,out] trx transaction
698@param[in] table dict table
699@return DB_SUCCESS or error code. */
701
702/** Remove the table from the OPTIMIZER's list. We do wait for
703 acknowledgement from the consumer of the message. */
704void fts_optimize_remove_table(dict_table_t *table); /*!< in: table to remove */
705
706/** Shutdown fts optimize thread. */
708
709/** Send sync fts cache for the table.
710@param[in] table table to sync */
712
713/** Take a FTS savepoint.
714@param[in] fts_trx Fts transaction
715@param[in] name Savepoint name */
716void fts_savepoint_take(fts_trx_t *fts_trx, const char *name);
717
718/** Refresh last statement savepoint. */
719void fts_savepoint_laststmt_refresh(trx_t *trx); /*!< in: transaction */
720
721/** Release the savepoint data identified by name. */
722void fts_savepoint_release(trx_t *trx, /*!< in: transaction */
723 const char *name); /*!< in: savepoint name */
724
725/** Clear cache.
726@param[in,out] cache fts cache */
727void fts_cache_clear(fts_cache_t *cache);
728
729/** Initialize things in cache. */
730void fts_cache_init(fts_cache_t *cache); /*!< in: cache */
731
732/** Rollback to and including savepoint identified by name. */
733void fts_savepoint_rollback(trx_t *trx, /*!< in: transaction */
734 const char *name); /*!< in: savepoint name */
735
736/** Rollback to and including savepoint identified by name. */
737void fts_savepoint_rollback_last_stmt(trx_t *trx); /*!< in: transaction */
738
739/* Get parent table name if it's a fts aux table
740@param[in] aux_table_name aux table name
741@param[in] aux_table_len aux table length
742@return parent table name, or NULL */
743char *fts_get_parent_table_name(const char *aux_table_name,
744 ulint aux_table_len);
745
746/** Run SYNC on the table, i.e., write out data from the cache to the
747FTS auxiliary INDEX table and clear the cache at the end.
748@param[in,out] table fts table
749@param[in] unlock_cache whether unlock cache when write node
750@param[in] wait whether wait for existing sync to finish
751@param[in] has_dict whether has dict operation lock
752@return DB_SUCCESS on success, error code on failure. */
753dberr_t fts_sync_table(dict_table_t *table, bool unlock_cache, bool wait,
754 bool has_dict);
755
756/** Create an FTS index cache. */
757CHARSET_INFO *fts_index_get_charset(dict_index_t *index); /*!< in: FTS index */
758
759/** Get the initial Doc ID by consulting the CONFIG table
760 @return initial Doc ID */
761doc_id_t fts_init_doc_id(const dict_table_t *table); /*!< in: table */
762
763/** Compare two character string according to their charset.
764@param[in] cs Character set
765@param[in] p1 Key
766@param[in] p2 Node */
767extern int innobase_fts_text_cmp(const void *cs, const void *p1,
768 const void *p2);
769
770/** Makes all characters in a string lower case.
771@param[in] cs Character set
772@param[in] src String to put in lower case
773@param[in] src_len Input string length
774@param[in] dst Buffer for result string
775@param[in] dst_len Buffer size */
776extern size_t innobase_fts_casedn_str(CHARSET_INFO *cs, char *src,
777 size_t src_len, char *dst,
778 size_t dst_len);
779
780/** Compare two character string according to their charset.
781@param[in] cs Character set
782@param[in] p1 Key
783@param[in] p2 Node */
784extern int innobase_fts_text_cmp_prefix(const void *cs, const void *p1,
785 const void *p2);
786
787/** Get the next token from the given string and store it in *token. */
789 CHARSET_INFO *charset, /*!< in: Character set */
790 const byte *start, /*!< in: start of text */
791 const byte *end, /*!< in: one character past
792 end of text */
793 fts_string_t *token); /*!< out: token's text */
794
795/** Drop dd table & tablespace for fts aux table
796@param[in] name table name
797@param[in] file_per_table flag whether use file per table
798@return true on success, false on failure. */
799bool innobase_fts_drop_dd_table(const char *name, bool file_per_table);
800
801/** Get token char size by charset
802 @return the number of token char size */
803ulint fts_get_token_size(const CHARSET_INFO *cs, /*!< in: Character set */
804 const char *token, /*!< in: token */
805 ulint len); /*!< in: token length */
806
807/** FULLTEXT tokenizer internal in MYSQL_FTPARSER_SIMPLE_MODE
808 @return 0 if tokenize successfully */
810 MYSQL_FTPARSER_PARAM *param, /*!< in: parser parameter */
811 char *doc, /*!< in: document to tokenize */
812 int len); /*!< in: document length */
813
814/** Fetch COUNT(*) from specified table.
815 @return the number of rows in the table */
816ulint fts_get_rows_count(fts_table_t *fts_table); /*!< in: fts table to read */
817
818/** Get maximum Doc ID in a table if index "FTS_DOC_ID_INDEX" exists
819 @return max Doc ID or 0 if index "FTS_DOC_ID_INDEX" does not exist */
820doc_id_t fts_get_max_doc_id(dict_table_t *table); /*!< in: user table */
821
822/** Check whether user supplied stopword table exists and is of
823 the right format.
824 @return the stopword column charset if qualifies */
826 const char *stopword_table_name); /*!< in: Stopword table
827 name */
828/** This function loads specified stopword into FTS cache
829 @return true if success */
831 const dict_table_t *table, /*!< in: Table with FTS */
832 trx_t *trx, /*!< in: Transaction */
833 const char *global_stopword_table, /*!< in: Global stopword table
834 name */
835 const char *session_stopword_table, /*!< in: Session stopword table
836 name */
837 bool stopword_is_on, /*!< in: Whether stopword
838 option is turned on/off */
839 bool reload); /*!< in: Whether it is during
840 reload of FTS table */
841
842/** Read the rows from the FTS index
843 @return DB_SUCCESS if OK */
844dberr_t fts_table_fetch_doc_ids(trx_t *trx, /*!< in: transaction */
845 fts_table_t *fts_table, /*!< in: aux table */
846 fts_doc_ids_t *doc_ids); /*!< in: For collecting
847 doc ids */
848/** This function brings FTS index in sync when FTS index is first
849 used. There are documents that have not yet sync-ed to auxiliary
850 tables from last server abnormally shutdown, we will need to bring
851 such document into FTS cache before any further operations
852 @return true if all OK */
853bool fts_init_index(dict_table_t *table, /*!< in: Table with FTS */
854 bool has_cache_lock); /*!< in: Whether we already
855 have cache lock */
856/** Add a newly create index in FTS cache */
857void fts_add_index(dict_index_t *index, /*!< FTS index to be added */
858 dict_table_t *table); /*!< table */
859
860/** Drop auxiliary tables related to an FTS index
861@param[in] table Table where indexes are dropped
862@param[in] index Index to be dropped
863@param[in] trx Transaction for the drop
864@param[in,out] aux_vec Aux table name vector
865@param[in] adding_another Another FTS index is to be added as part
866 of the same transaction
867@return DB_SUCCESS or error number */
869 aux_name_vec_t *aux_vec, bool adding_another = false);
870
871/** Rename auxiliary tables for all fts index for a table
872 @return DB_SUCCESS or error code */
873dberr_t fts_rename_aux_tables(dict_table_t *table, /*!< in: user Table */
874 const char *new_name, /*!< in: new table name */
875 trx_t *trx, /*!< in: transaction */
876 bool replay); /*!< Whether in replay
877 stage */
878
879/** Check indexes in the fts->indexes is also present in index cache and
880 table->indexes list
881 @return true if all indexes match */
883 dict_table_t *table); /*!< in: Table where indexes are dropped */
884
885/** Fetch the document from tuple, tokenize the text data and
886insert the text data into fts auxiliary table and
887its cache. Moreover this tuple fields doesn't contain any information
888about externally stored field. This tuple contains data directly
889converted from mysql.
890@param[in] ftt FTS transaction table
891@param[in] doc_id doc id
892@param[in] tuple tuple from where data can be retrieved
893 and tuple should be arranged in table
894 schema order. */
896 const dtuple_t *tuple);
897
898/** Create an FTS trx.
899@param[in,out] trx InnoDB Transaction
900@return FTS transaction. */
902
903/** For storing table info when checking for orphaned tables. */
905 /** Table id */
907
908 /** Parent table id */
910
911 /** Table FT index id */
913
914 /** Name of the table */
915 char *name;
916
917 /** FTS table type */
919};
920
921/** Check if a table is an FTS auxiliary table name.
922@param[out] table FTS table info
923@param[in] name Table name
924@param[in] len Length of table name
925@return true if the name matches an auxiliary table name pattern */
926bool fts_is_aux_table_name(fts_aux_table_t *table, const char *name, ulint len);
927
928/** Freeze all auiliary tables to be not evictable if exist, with dict_mutex
929held
930@param[in] table InnoDB table object */
932
933/** Allow all the auxiliary tables of specified base table to be evictable
934if they exist, if not exist just ignore
935@param[in] table InnoDB table object
936@param[in] dict_locked True if we have dict_sys mutex */
937void fts_detach_aux_tables(const dict_table_t *table, bool dict_locked);
938
939/** Update DD system table for auxiliary common tables for an FTS index.
940@param[in] table dict table instance
941@return true on success, false on failure */
943
944/** Check if a table has FTS index needs to have its auxiliary index
945tables' metadata updated in DD
946@param[in,out] table table to check
947@return DB_SUCCESS or error code */
949
950/** Upgrade FTS AUX Tables. The FTS common and aux tables are
951renamed because they have table_id in their name. We move table_ids
952by DICT_MAX_DD_TABLES offset. Aux tables are registered into DD
953after rename.
954@param[in] table InnoDB table object
955@return DB_SUCCESS or error code */
957
958/** Rename FTS AUX tablespace name from 8.0 format to 5.7 format.
959This will be done on upgrade failure
960@param[in] table parent table
961@param[in] rollback rollback the rename from 8.0 to 5.7
962 if true, rename to 5.7 format
963 if false, mark the table as evictable
964@return DB_SUCCESS on success, DB_ERROR on error */
966
967#endif
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
The state of the FTS sub system.
Definition: fts0fts.h:364
fts_cache_t * cache
FTS memory buffer for this table, or NULL if the table has no FTS index.
Definition: fts0fts.h:391
ulint bg_threads
Number of background threads accessing this table.
Definition: fts0fts.h:378
mem_heap_t * fts_heap
Heap for fts_t allocation.
Definition: fts0fts.h:400
~fts_t()
fts_t destructor.
Definition: fts0fts.cc:5445
ib_mutex_t bg_threads_mutex
Mutex protecting bg_threads* and fts_add_wq.
Definition: fts0fts.h:375
ulint doc_col
FTS doc id hidden column number in the CLUSTERED index.
Definition: fts0fts.h:394
ib_wqueue_t * add_wq
Work queue for scheduling jobs for the FTS 'Add' thread, or NULL if the thread has not yet been creat...
Definition: fts0fts.h:387
ulint fts_status
Status bit regarding fts running state.
Definition: fts0fts.h:382
fts_t(dict_table_t *table, mem_heap_t *heap)
fts_t constructor.
Definition: fts0fts.cc:5426
ib_vector_t * indexes
Vector of FTS indexes, this is mainly for caching purposes.
Definition: fts0fts.h:397
Data types.
Some type definitions.
dberr_t
Definition: db0err.h:39
Data dictionary global types.
ib_id_t space_index_t
Index identifier (unique within a tablespace).
Definition: dict0types.h:234
ib_id_t table_id_t
Table or partition identifier (unique within an InnoDB instance).
Definition: dict0types.h:232
Some definitions for full-text indices.
size_t innobase_fts_casedn_str(CHARSET_INFO *cs, char *src, size_t src_len, char *dst, size_t dst_len)
Makes all characters in a string lower case.
Definition: ha_innodb.cc:8106
const char * FTS_SUFFIX_CONFIG_5_7
Definition: fts0fts.cc:150
fts_trx_t * fts_trx_create(trx_t *trx)
Create an FTS trx.
Definition: fts0fts.cc:2484
dberr_t fts_create_index_tables(trx_t *trx, dict_index_t *index)
Creates the column specific ancillary tables needed for supporting an FTS index on the given table.
Definition: fts0fts.cc:2338
int fts_tokenize_document_internal(MYSQL_FTPARSER_PARAM *param, char *doc, int len)
FULLTEXT tokenizer internal in MYSQL_FTPARSER_SIMPLE_MODE.
Definition: fts0fts.cc:4720
dberr_t fts_create_doc_id(dict_table_t *table, dtuple_t *row, mem_heap_t *heap)
Create a new document id.
Definition: fts0fts.cc:3163
uint64_t doc_id_t
Document id type.
Definition: fts0fts.h:79
float fts_retrieve_ranking(fts_result_t *result, doc_id_t doc_id)
Retrieve the FTS Relevance Ranking result for doc with doc_id.
Definition: fts0que.cc:3307
void fts_query_sort_result_on_rank(fts_result_t *result)
FTS Query sort result, returned by fts_query() on fts_ranking_t::rank.
Definition: fts0que.cc:3840
void fts_startup(void)
FTS initialize.
void fts_optimize_request_sync_table(dict_table_t *table)
Send sync fts cache for the table.
Definition: fts0opt.cc:2573
dberr_t fts_upgrade_aux_tables(dict_table_t *table)
Upgrade FTS AUX Tables.
Definition: fts0fts.cc:6377
void fts_optimize_shutdown()
Shutdown fts optimize thread.
Definition: fts0opt.cc:3026
dberr_t fts_create_index_dd_tables(dict_table_t *table)
Check if a table has FTS index needs to have its auxiliary index tables' metadata updated in DD.
Definition: fts0fts.cc:2253
fts_doc_ids_t * fts_doc_ids_create(void)
Create a new fts_doc_ids_t.
Definition: fts0fts.cc:3009
void fts_add_doc_id_column(dict_table_t *table, mem_heap_t *heap)
Add the FTS document id hidden column.
Definition: fts0fts.cc:5362
const char * FTS_SUFFIX_BEING_DELETED_CACHE
Definition: fts0fts.cc:140
doc_id_t fts_update_doc_id(dict_table_t *table, upd_field_t *ufield, doc_id_t *next_doc_id)
Add new fts doc id to the update vector.
Definition: fts0fts.cc:5384
ulong fts_result_cache_limit
Variable specifying the FTS result cache limit for each query.
Definition: fts0fts.cc:87
void fts_add_doc_from_tuple(fts_trx_table_t *ftt, doc_id_t doc_id, const dtuple_t *tuple)
Fetch the document from tuple, tokenize the text data and insert the text data into fts auxiliary tab...
Definition: fts0fts.cc:3525
const char * fts_default_stopword[]
InnoDB default stopword list: There are different versions of stopwords, the stop words listed below ...
Definition: fts0fts.cc:121
dberr_t fts_get_next_doc_id(const dict_table_t *table, doc_id_t *doc_id)
Get the next available document id.
Definition: fts0fts.cc:2773
fts_index_cache_t * fts_cache_index_cache_create(dict_table_t *table, dict_index_t *index)
Create a FTS index cache.
Definition: fts0fts.cc:825
dberr_t fts_query(trx_t *trx, dict_index_t *index, uint flags, const byte *query_str, ulint query_len, fts_result_t **result, ulonglong limit)
FTS Query entry point.
Definition: fts0que.cc:3609
void fts_savepoint_rollback(trx_t *trx, const char *name)
Rollback to and including savepoint identified by name.
Definition: fts0fts.cc:5728
bool fts_drop_dd_tables(const aux_name_vec_t *aux_vec, bool file_per_table)
Drop FTS AUX table DD table objects in vector.
Definition: fts0fts.cc:1243
bool fts_check_common_tables_exist(const dict_table_t *table)
Check if common tables already exist.
Definition: fts0fts.cc:1872
doc_id_t fts_get_max_doc_id(dict_table_t *table)
Get maximum Doc ID in a table if index "FTS_DOC_ID_INDEX" exists.
Definition: fts0fts.cc:3779
void fts_add_index(dict_index_t *index, dict_table_t *table)
Add a newly create index in FTS cache.
Definition: fts0fts.cc:582
char * fts_internal_tbl_name
Variable specifying the table that has Fulltext index to display its content through information sche...
Definition: fts0fts.cc:113
const char * FTS_SUFFIX_CONFIG
Definition: fts0fts.cc:141
void fts_savepoint_take(fts_trx_t *fts_trx, const char *name)
Take a FTS savepoint.
Definition: fts0fts.cc:5544
enum fts_status fts_status_t
Definition: fts0fts.h:361
void fts_cache_index_cache_remove(dict_table_t *table, dict_index_t *index)
Remove a FTS index cache.
Definition: fts0fts.cc:869
void fts_optimize_init(void)
Startup the optimize thread and create the work queue.
Definition: fts0opt.cc:3009
void fts_trx_free(fts_trx_t *fts_trx)
Free an FTS trx.
Definition: fts0fts.cc:5149
void fts_update_next_doc_id(trx_t *trx, const dict_table_t *table, const char *table_name, doc_id_t doc_id)
Update the next and last Doc ID in the CONFIG table to be the input "doc_id" value (+ 1).
Definition: fts0fts.cc:2756
dberr_t fts_optimize_table(dict_table_t *table)
Run OPTIMIZE on the given table.
Definition: fts0opt.cc:2393
ulong fts_max_cache_size
Variable specifying the maximum FTS cache size for each table.
Definition: fts0fts.cc:76
void fts_free_aux_names(aux_name_vec_t *aux_vec)
Free FTS AUX table names in vector.
Definition: fts0fts.cc:1265
void fts_savepoint_release(trx_t *trx, const char *name)
Release the savepoint data identified by name.
Definition: fts0fts.cc:5590
doc_id_t fts_init_doc_id(const dict_table_t *table)
Get the initial Doc ID by consulting the CONFIG table.
Definition: fts0fts.cc:4922
dberr_t fts_sync_table(dict_table_t *table, bool unlock_cache, bool wait, bool has_dict)
Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear...
Definition: fts0fts.cc:4487
fts_t * fts_create(dict_table_t *table)
Create an instance of fts_t.
Definition: fts0fts.cc:5462
ulong fts_max_token_size
Variable specifying the maximum FTS max token size.
Definition: fts0fts.cc:90
void fts_doc_ids_free(fts_doc_ids_t *doc_ids)
Free a fts_doc_ids_t.
Definition: fts0fts.cc:3025
dberr_t fts_drop_index(dict_table_t *table, dict_index_t *index, trx_t *trx, aux_name_vec_t *aux_vec, bool adding_another=false)
Drop auxiliary tables related to an FTS index.
Definition: fts0fts.cc:712
fts_table_type_t
The FTS table types.
Definition: fts0fts.h:188
@ FTS_INDEX_TABLE
FTS auxiliary table that is specific to a particular FTS index on a table.
Definition: fts0fts.h:189
@ FTS_OBSOLETED_TABLE
FTS obsoleted tables like DOC_ID, ADDED, STOPWORDS.
Definition: fts0fts.h:196
@ FTS_COMMON_TABLE
FTS auxiliary table that is common for all FTS index on a table.
Definition: fts0fts.h:193
bool innobase_fts_drop_dd_table(const char *name, bool file_per_table)
Drop dd table & tablespace for fts aux table.
bool fts_load_stopword(const dict_table_t *table, trx_t *trx, const char *global_stopword_table, const char *session_stopword_table, bool stopword_is_on, bool reload)
This function loads specified stopword into FTS cache.
Definition: fts0fts.cc:5977
int innobase_fts_text_cmp_prefix(const void *cs, const void *p1, const void *p2)
Compare two character string according to their charset.
Definition: ha_innodb.cc:8085
void fts_cache_init(fts_cache_t *cache)
Initialize things in cache.
Definition: fts0fts.cc:500
dberr_t fts_create_index_tables_low(trx_t *trx, dict_index_t *index, const char *table_name, table_id_t table_id)
Create auxiliary index tables for an FTS index.
Definition: fts0fts.cc:2275
int innobase_fts_text_cmp(const void *cs, const void *p1, const void *p2)
Compare two character string according to their charset.
Definition: ha_innodb.cc:8012
doc_id_t fts_get_doc_id_from_row(dict_table_t *table, dtuple_t *row)
Extract the doc id from the FTS hidden column.
Definition: fts0fts.cc:5188
bool fts_check_cached_index(dict_table_t *table)
Check indexes in the fts->indexes is also present in index cache and table->indexes list.
Definition: fts0fts.cc:675
dberr_t fts_drop_tables(trx_t *trx, dict_table_t *table, aux_name_vec_t *aux_vec)
Drops the ancillary tables needed for supporting an FTS index on a given table.
Definition: fts0fts.cc:1650
doc_id_t fts_get_doc_id_from_rec(dict_table_t *table, const rec_t *rec, const dict_index_t *index, mem_heap_t *heap)
Extract the doc id from the record that belongs to index.
Definition: fts0fts.cc:5213
bool fts_init_index(dict_table_t *table, bool has_cache_lock)
This function brings FTS index in sync when FTS index is first used.
Definition: fts0fts.cc:6227
bool fts_create_common_dd_tables(const dict_table_t *table)
Update DD system table for auxiliary common tables for an FTS index.
Definition: fts0fts.cc:2179
ulint fts_get_rows_count(fts_table_t *fts_table)
Fetch COUNT(*) from specified table.
Definition: fts0fts.cc:4988
bool fts_need_sync
Whether the total memory used for FTS cache is exhausted, and we will need a sync to free some memory...
Definition: fts0fts.cc:80
const char * FTS_SUFFIX_BEING_DELETED
Definition: fts0fts.cc:139
bool fts_enable_diag_print
Variable specifying whether we do additional FTS diagnostic printout in the log.
Definition: fts0opt.cc:261
dberr_t fts_drop_index_tables(trx_t *trx, dict_index_t *index, aux_name_vec_t *aux_vec)
Since we do a horizontal split on the index table, we need to drop all the split tables.
Definition: fts0fts.cc:1489
dberr_t fts_rename_aux_tables(dict_table_t *table, const char *new_name, trx_t *trx, bool replay)
Rename auxiliary tables for all fts index for a table.
Definition: fts0fts.cc:1392
constexpr size_t FTS_NUM_AUX_INDEX
The number of FTS index partitions for a fulltext index.
Definition: fts0fts.h:108
void fts_detach_aux_tables(const dict_table_t *table, bool dict_locked)
Allow all the auxiliary tables of specified base table to be evictable if they exist,...
Definition: fts0fts.cc:2114
const char * FTS_PREFIX
FTS auxiliary table prefix that are common to all FT indexes.
Definition: fts0fts.cc:129
void fts_optimize_remove_table(dict_table_t *table)
Remove the table from the OPTIMIZER's list.
Definition: fts0opt.cc:2543
dberr_t fts_create_common_tables(trx_t *trx, const dict_table_t *table, const char *name, bool skip_doc_id_index)
Creates the common auxiliary tables needed for supporting an FTS index on the given table.
Definition: fts0fts.cc:1920
ulong fts_min_token_size
Variable specifying the minimum FTS max token size.
Definition: fts0fts.cc:93
CHARSET_INFO * fts_index_get_charset(dict_index_t *index)
Create an FTS index cache.
Definition: fts0fts.cc:790
fts_cache_t * fts_cache_create(dict_table_t *table)
Create a FTS cache.
Definition: fts0fts.cc:529
fts_status
Definition: fts0fts.h:345
@ BG_THREAD_STOP
true if the FTS background thread has finished reading the ADDED table, meaning more items can be add...
Definition: fts0fts.h:346
@ BG_THREAD_READY
true if the FTS background thread is ready
Definition: fts0fts.h:351
@ ADDED_TABLE_SYNCED
true if the ADDED table record is sync-ed after crash recovery
Definition: fts0fts.h:357
@ ADD_THREAD_STARTED
true if the FTS add thread has started
Definition: fts0fts.h:354
CHARSET_INFO * fts_valid_stopword_table(const char *stopword_table_name)
Check whether user supplied stopword table exists and is of the right format.
Definition: fts0fts.cc:5916
dberr_t fts_upgrade_rename(const dict_table_t *table, bool rollback)
Rename FTS AUX tablespace name from 8.0 format to 5.7 format.
Definition: fts0fts.cc:6481
dberr_t fts_lock_all_aux_tables(THD *thd, dict_table_t *table)
Lock all FTS AUX tables (for dropping table)
Definition: fts0fts.cc:1749
const char * FTS_PREFIX_5_7
FTS auxiliary table prefix that are common to all FT indexes.
Definition: fts0fts.cc:132
dberr_t fts_commit(trx_t *trx)
The given transaction is about to be committed; do whatever is necessary from the FTS system's POV.
Definition: fts0fts.cc:3255
void fts_cache_clear(fts_cache_t *cache)
Clear cache.
Definition: fts0fts.cc:920
void fts_freeze_aux_tables(const dict_table_t *table)
Freeze all auiliary tables to be not evictable if exist, with dict_mutex held.
Definition: fts0fts.cc:2060
dberr_t fts_empty_common_tables(trx_t *trx, dict_table_t *table)
Empty all common talbes.
Definition: fts0fts.cc:1586
char * fts_get_parent_table_name(const char *aux_table_name, ulint aux_table_len)
ulong fts_max_total_cache_size
Variable specifying the total memory allocated for FTS cache.
Definition: fts0fts.cc:83
void fts_savepoint_rollback_last_stmt(trx_t *trx)
Rollback to and including savepoint identified by name.
Definition: fts0fts.cc:5688
void fts_savepoint_laststmt_refresh(trx_t *trx)
Refresh last statement savepoint.
Definition: fts0fts.cc:5627
void fts_free(dict_table_t *table)
Free the FTS resources.
Definition: fts0fts.cc:5477
ulong fts_num_word_optimize
Variable specifying the number of word to optimize for each optimize table call.
Definition: fts0opt.cc:258
ulint innobase_mysql_fts_get_token(CHARSET_INFO *charset, const byte *start, const byte *end, fts_string_t *token)
Get the next token from the given string and store it in *token.
Definition: ha_innodb.cc:8127
float fts_rank_t
FTS rank type, which will be between 0 .
Definition: fts0fts.h:165
const char * FTS_SUFFIX_DELETED
Definition: fts0fts.cc:142
dberr_t fts_table_fetch_doc_ids(trx_t *trx, fts_table_t *fts_table, fts_doc_ids_t *doc_ids)
Read the rows from the FTS index.
Definition: fts0opt.cc:988
void fts_query_free_result(fts_result_t *result)
FTS Query free result, returned by fts_query().
Definition: fts0que.cc:3821
ulint fts_get_token_size(const CHARSET_INFO *cs, const char *token, ulint len)
Get token char size by charset.
Definition: fts0fts.cc:4691
constexpr size_t FTS_NUM_AUX_COMMON
The number of FTS AUX common table for a fulltext index.
Definition: fts0fts.h:111
fts_row_state
Type of a row during a transaction.
Definition: fts0fts.h:179
@ FTS_DELETE
Definition: fts0fts.h:182
@ FTS_INVALID
Definition: fts0fts.h:184
@ FTS_MODIFY
Definition: fts0fts.h:181
@ FTS_NOTHING
Definition: fts0fts.h:183
@ FTS_INSERT
Definition: fts0fts.h:180
unsigned short ib_uc_t
Since MySQL's character set support for Unicode is woefully inadequate (it supports basic operations ...
Definition: fts0fts.h:291
const char * FTS_SUFFIX_DELETED_CACHE
Definition: fts0fts.cc:143
void fts_trx_add_op(trx_t *trx, dict_table_t *table, doc_id_t doc_id, fts_row_state state, ib_vector_t *fts_indexes)
Notify the FTS system about an operation on an FTS-indexed table.
Definition: fts0fts.cc:2646
bool fts_is_aux_table_name(fts_aux_table_t *table, const char *name, ulint len)
Check if a table is an FTS auxiliary table name.
Definition: fts0fts.cc:5786
Prototypes for global functions in ha_innodb.cc that are called by InnoDB C code.
The simple hash table utility.
static int flags[50]
Definition: hp_test1.cc:40
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
The memory management.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
const std::string charset("charset")
Definition: commit_order_queue.h:34
static int wait(mysql_cond_t *that, mysql_mutex_t *mutex_arg, const char *, unsigned int)
Definition: mysql_cond_v1_native.cc:63
const char * table_name
Definition: rules_table_service.cc:56
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
Query graph global types.
Record manager global types.
byte rec_t
Definition: rem0types.h:41
static bool reload(MYSQL_THD thd)
Reloads the rules into the in-memory table.
Definition: rewriter_plugin.cc:333
Row operation global types.
static bool rollback(THD *thd)
Abort the current statement and transaction.
Definition: sql_cmd_srs.cc:140
case opt name
Definition: sslopt-case.h:29
Definition: m_ctype.h:421
Definition: plugin_ftparser.h:195
Structure to manage FTS AUX table name and MDL during its drop.
Definition: fts0fts.h:168
std::vector< char * > aux_name
AUX table name.
Definition: fts0fts.h:170
Data structure for an index.
Definition: dict0mem.h:1041
Data structure for a database table.
Definition: dict0mem.h:1904
Structure for an SQL data tuple of fields (logical record)
Definition: data0data.h:696
For storing table info when checking for orphaned tables.
Definition: fts0fts.h:904
fts_table_type_t type
FTS table type.
Definition: fts0fts.h:918
table_id_t index_id
Table FT index id.
Definition: fts0fts.h:912
char * name
Name of the table.
Definition: fts0fts.h:915
table_id_t id
Table id.
Definition: fts0fts.h:906
table_id_t parent_id
Parent table id.
Definition: fts0fts.h:909
The cache for the FTS system.
Definition: fts0types.h:146
List of document ids that were added during a transaction.
Definition: fts0fts.h:277
ib_vector_t * doc_ids
document ids (each element is of type doc_id_t).
Definition: fts0fts.h:278
ib_alloc_t * self_heap
Allocator used to create an instance of this type and the doc_ids vector.
Definition: fts0fts.h:281
This type represents a single document field.
Definition: fts0types.h:274
Since we can have multiple FTS indexes on a table, we keep a per index cache of words etc.
Definition: fts0types.h:73
Query ranked doc ids.
Definition: fts0fts.h:302
ulint words_len
words len
Definition: fts0fts.h:310
fts_rank_t rank
Rank is between 0 .
Definition: fts0fts.h:305
byte * words
this contains the words that were queried and found in this document
Definition: fts0fts.h:307
doc_id_t doc_id
Document id.
Definition: fts0fts.h:303
Query result.
Definition: fts0fts.h:314
ib_rbt_t * rankings_by_id
RB tree of type fts_ranking_t indexed by doc id.
Definition: fts0fts.h:317
ib_rbt_t * rankings_by_rank
RB tree of type fts_ranking_t indexed by rank.
Definition: fts0fts.h:319
ib_rbt_node_t * current
Current element.
Definition: fts0fts.h:315
Information required for transaction savepoint handling.
Definition: fts0fts.h:241
ib_rbt_t * tables
Modified FTS tables.
Definition: fts0fts.h:246
char * name
First entry is always NULL, the default instance.
Definition: fts0fts.h:242
Stop word control infotmation.
Definition: fts0types.h:107
ib_alloc_t * heap
The memory allocator to use.
Definition: fts0types.h:109
An UTF-16 ro UTF-8 string.
Definition: fts0fts.h:294
ulint f_n_char
Number of characters.
Definition: fts0fts.h:298
ulint f_len
Length of the string in bytes.
Definition: fts0fts.h:297
byte * f_str
string, not necessary terminated in any way
Definition: fts0fts.h:295
This is used to generate the FTS auxiliary table name, we need the table id and the index id to gener...
Definition: fts0fts.h:326
space_index_t index_id
The index id.
Definition: fts0fts.h:335
CHARSET_INFO * charset
charset info if it is for FTS index auxiliary table
Definition: fts0fts.h:341
fts_table_type_t type
The auxiliary table type.
Definition: fts0fts.h:331
const dict_table_t * table
Parent table.
Definition: fts0fts.h:340
table_id_t table_id
The table id.
Definition: fts0fts.h:333
const char * suffix
The suffix of the fts auxiliary table name, can be NULL, not used everywhere (yet)
Definition: fts0fts.h:337
const char * parent
Parent table name, this is required only for the database name.
Definition: fts0fts.h:327
A token and its positions within a document.
Definition: fts0types.h:300
Information about one changed row in a transaction.
Definition: fts0fts.h:266
doc_id_t doc_id
Id of the ins/upd/del document.
Definition: fts0fts.h:267
fts_row_state state
state of the row
Definition: fts0fts.h:269
ib_vector_t * fts_indexes
The indexes that are affected.
Definition: fts0fts.h:271
Information about changes in a single transaction affecting the FTS system.
Definition: fts0fts.h:229
ib_vector_t * last_stmt
last_stmt
Definition: fts0fts.h:235
mem_heap_t * heap
heap
Definition: fts0fts.h:237
trx_t * trx
InnoDB transaction.
Definition: fts0fts.h:230
ib_vector_t * savepoints
Active savepoints, must have at least one element, the implied savepoint.
Definition: fts0fts.h:232
Information about changed rows in a transaction for a single table.
Definition: fts0fts.h:250
ib_rbt_t * rows
rows changed; indexed by doc-id, cells are fts_trx_row_t*
Definition: fts0fts.h:255
fts_trx_t * fts_trx
link to parent
Definition: fts0fts.h:253
dict_table_t * table
table
Definition: fts0fts.h:251
que_t * docs_added_graph
Definition: fts0fts.h:262
fts_doc_ids_t * added_doc_ids
list of added doc ids (NULL until the first addition)
Definition: fts0fts.h:258
Definition: ut0vec.h:204
Red black tree node.
Definition: ut0rbt.h:61
Red black tree instance.
Definition: ut0rbt.h:72
Definition: ut0vec.h:213
Definition: ut0wqueue.cc:43
The info structure stored at the beginning of a heap block.
Definition: mem0mem.h:302
Definition: que0que.h:301
Definition: result.h:30
Definition: trx0trx.h:675
Definition: row0upd.h:467
Transaction system global type definitions.
unsigned long int ulint
Definition: univ.i:406
Various utilities.
A vector of pointers to data items.
A work queue.