InnoDB Plugin  1.0
fts0fts.h
Go to the documentation of this file.
1 /*****************************************************************************
2 
3 Copyright (c) 2011, 2013, Oracle and/or its affiliates. All Rights Reserved.
4 
5 This program is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free Software
7 Foundation; version 2 of the License.
8 
9 This program is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 
13 You should have received a copy of the GNU General Public License along with
14 this program; if not, write to the Free Software Foundation, Inc.,
15 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
16 
17 *****************************************************************************/
18 
19 /******************************************************************/
26 #ifndef fts0fts_h
27 #define fts0fts_h
28 
29 #include "univ.i"
30 
31 #include "data0type.h"
32 #include "data0types.h"
33 #include "dict0types.h"
34 #include "hash0hash.h"
35 #include "mem0mem.h"
36 #include "rem0types.h"
37 #include "row0types.h"
38 #include "trx0types.h"
39 #include "ut0vec.h"
40 #include "ut0rbt.h"
41 #include "ut0wqueue.h"
42 #include "que0types.h"
43 #include "ft_global.h"
44 
46 #define FTS_NULL_DOC_ID 0
47 
49 #define FTS_DOC_ID_COL_NAME "FTS_DOC_ID"
50 
52 #define FTS_DOC_ID_INDEX_NAME "FTS_DOC_ID_INDEX"
53 
54 #define FTS_DOC_ID_INDEX_NAME_LEN 16
55 
57 #define FTS_DOC_ID_LEN 8
58 
61 #define FTS_NUM_FIELDS_SORT 3
62 
65 #define MAX_DOC_ID_OPT_VAL 1073741824
66 
68 typedef ib_uint64_t doc_id_t;
69 
71 #define FTS_DOC_ID_FORMAT IB_ID_FMT
72 
74 #define fts_write_doc_id(d, s) mach_write_to_8(d, s)
75 
77 #define fts_read_doc_id(s) mach_read_from_8(s)
78 
80 #define fts_bind_doc_id(i, n, v) pars_info_bind_int8_literal(i, n, v)
81 
84 #define FTS_NL 0
85 #define FTS_BOOL 1
86 #define FTS_SORTED 2
87 #define FTS_EXPAND 4
88 #define FTS_PROXIMITY 8
89 #define FTS_PHRASE 16
90 #define FTS_OPT_RANKING 32
91 
92 #define FTS_INDEX_TABLE_IND_NAME "FTS_INDEX_TABLE_IND"
93 
95 #define FTS_OPTIMIZE_THRESHOLD 10000000
96 
97 #define FTS_DOC_ID_MAX_STEP 10000
98 
99 extern ulong fts_sort_pll_degree;
100 
103 extern ulong fts_num_word_optimize;
104 
107 extern char fts_enable_diag_print;
108 
110 typedef float fts_rank_t;
111 
119  FTS_INSERT = 0,
120  FTS_MODIFY,
121  FTS_DELETE,
122  FTS_NOTHING,
123  FTS_INVALID
124 };
125 
134 };
135 
136 struct fts_doc_t;
137 struct fts_cache_t;
138 struct fts_token_t;
139 struct fts_doc_ids_t;
140 struct fts_index_cache_t;
141 
142 
145 #define FTS_INIT_FTS_TABLE(fts_table, m_suffix, m_type, m_table)\
146 do { \
147  (fts_table)->suffix = m_suffix; \
148  (fts_table)->type = m_type; \
149  (fts_table)->table_id = m_table->id; \
150  (fts_table)->parent = m_table->name; \
151  (fts_table)->table = m_table; \
152 } while (0);
153 
154 #define FTS_INIT_INDEX_TABLE(fts_table, m_suffix, m_type, m_index)\
155 do { \
156  (fts_table)->suffix = m_suffix; \
157  (fts_table)->type = m_type; \
158  (fts_table)->table_id = m_index->table->id; \
159  (fts_table)->parent = m_index->table->name; \
160  (fts_table)->table = m_index->table; \
161  (fts_table)->index_id = m_index->id; \
162 } while (0);
163 
166 struct fts_trx_t {
175 };
176 
179  char* name;
184 };
185 
199  que_t* docs_added_graph;
200 };
201 
209 };
210 
221 };
222 
223 // FIXME: Get rid of this if possible.
228 typedef unsigned short ib_uc_t;
229 
231 struct fts_string_t {
232  byte* f_str;
234  ulint f_len;
235  ulint f_n_char;
236 };
237 
244  byte* words;
247  ulint words_len;
248 };
249 
251 struct fts_result_t {
258 };
259 
263 struct fts_table_t {
264  const char* parent;
271  table_id_t table_id;
273  index_id_t index_id;
275  const char* suffix;
278  const dict_table_t*
280  CHARSET_INFO* charset;
282 };
283 
301 };
302 
303 typedef enum fts_status fts_status_t;
304 
306 struct fts_t {
310 
311  ulint bg_threads;
316  ulint fts_status;
329  ulint doc_col;
335 };
336 
337 struct fts_stopword_t;
338 
340 #define STOPWORD_NOT_INIT 0x1
341 #define STOPWORD_OFF 0x2
342 #define STOPWORD_FROM_DEFAULT 0x4
343 #define STOPWORD_USER_TABLE 0x8
344 
345 extern const char* fts_default_stopword[];
346 
348 extern ulong fts_max_cache_size;
349 
351 extern ulong fts_max_total_cache_size;
352 
354 extern ulong fts_result_cache_limit;
355 
357 extern ulong fts_max_token_size;
358 
360 extern ulong fts_min_token_size;
361 
364 extern bool fts_need_sync;
365 
367 #define FTS_MAX_WORD_LEN HA_FT_MAXBYTELEN
368 
370 #define FTS_MAX_WORD_LEN_IN_CHAR HA_FT_MAXCHARLEN
371 
374 extern char* fts_internal_tbl_name;
375 
376 #define fts_que_graph_free(graph) \
377 do { \
378  mutex_enter(&dict_sys->mutex); \
379  que_graph_free(graph); \
380  mutex_exit(&dict_sys->mutex); \
381 } while (0)
382 
383 /******************************************************************/
385 UNIV_INTERN
388 /*=============*/
389  dict_table_t* table);
391 /******************************************************************/
394 UNIV_INTERN
397 /*=========================*/
398  dict_table_t* table,
399  dict_index_t* index);
401 /******************************************************************/
405 UNIV_INTERN
406 dberr_t
408 /*================*/
409  const dict_table_t* table,
410  doc_id_t* doc_id)
411  __attribute__((nonnull));
412 /*********************************************************************/
416 UNIV_INTERN
417 void
419 /*===================*/
420  trx_t* trx,
421  const dict_table_t* table,
422  const char* table_name,
423  doc_id_t doc_id)
424  __attribute__((nonnull(2)));
425 
426 /******************************************************************/
429 UNIV_INTERN
430 dberr_t
432 /*==============*/
433  dict_table_t* table,
435  dtuple_t* row,
439  mem_heap_t* heap)
440  __attribute__((nonnull));
441 /******************************************************************/
444 UNIV_INTERN
446 fts_doc_ids_create(void);
447 /*=====================*/
448 
449 /******************************************************************/
451 UNIV_INTERN
452 void
454 /*=============*/
455  fts_doc_ids_t* doc_ids);
457 /******************************************************************/
459 UNIV_INTERN
460 void
462 /*===========*/
463  trx_t* trx,
464  dict_table_t* table,
465  doc_id_t doc_id,
466  fts_row_state state,
467  ib_vector_t* fts_indexes)
469  __attribute__((nonnull(1,2)));
470 
471 /******************************************************************/
473 UNIV_INTERN
474 void
476 /*=========*/
477  fts_trx_t* fts_trx);
479 /******************************************************************/
484 UNIV_INTERN
485 dberr_t
487 /*=====================*/
488  trx_t* trx,
489  const dict_table_t*
490  table,
492  const char* name,
493  bool skip_doc_id_index)
494  __attribute__((nonnull, warn_unused_result));
495 /******************************************************************/
499 UNIV_INTERN
500 dberr_t
502 /*====================*/
503  trx_t* trx,
504  const dict_index_t* index)
506  __attribute__((nonnull, warn_unused_result));
507 /******************************************************************/
512 UNIV_INTERN
513 dberr_t
515 /*========================*/
516  trx_t* trx,
517  const dict_index_t*
518  index,
520  const char* table_name,
521  table_id_t table_id)
522  __attribute__((nonnull, warn_unused_result));
523 /******************************************************************/
525 UNIV_INTERN
526 void
528 /*==================*/
529  dict_table_t* table,
530  mem_heap_t* heap)
531  __attribute__((nonnull(1)));
532 
533 /*********************************************************************/
538 UNIV_INTERN
539 dberr_t
541 /*============*/
542  trx_t* trx,
543  dict_table_t* table)
545  __attribute__((nonnull));
546 /******************************************************************/
550 UNIV_INTERN
551 dberr_t
552 fts_commit(
553 /*=======*/
554  trx_t* trx)
555  __attribute__((nonnull, warn_unused_result));
556 
557 /*******************************************************************/
560 UNIV_INTERN
561 dberr_t
562 fts_query(
563 /*======*/
564  trx_t* trx,
565  dict_index_t* index,
566  uint flags,
567  const byte* query,
568  ulint query_len,
570  fts_result_t** result)
572  __attribute__((nonnull, warn_unused_result));
573 
574 /******************************************************************/
577 UNIV_INTERN
578 float
580 /*=================*/
581  fts_result_t* result,
582  doc_id_t doc_id);
585 /******************************************************************/
587 UNIV_INTERN
588 void
590 /*==========================*/
591  fts_result_t* result);
594 /******************************************************************/
596 UNIV_INTERN
597 void
599 /*==================*/
600  fts_result_t* result);
603 /******************************************************************/
605 UNIV_INTERN
606 doc_id_t
608 /*====================*/
609  dict_table_t* table,
610  dtuple_t* row);
613 /******************************************************************/
615 UNIV_INTERN
616 doc_id_t
618 /*====================*/
619  dict_table_t* table,
620  const rec_t* rec,
621  mem_heap_t* heap);
623 /******************************************************************/
626 UNIV_INTERN
627 doc_id_t
629 /*==============*/
630  dict_table_t* table,
631  upd_field_t* ufield,
632  doc_id_t* next_doc_id);
634 /******************************************************************/
636 UNIV_INTERN
637 void
638 fts_startup(void);
639 /*==============*/
640 
641 /******************************************************************/
643 UNIV_INTERN
644 void
646 /*===============*/
647  dict_table_t* table,
649  fts_t* fts);
652 /******************************************************************/
654 UNIV_INTERN
655 void
657 /*=========*/
658  dict_table_t* table,
660  fts_t* fts);
663 /******************************************************************/
666 UNIV_INTERN
667 fts_t*
668 fts_create(
669 /*=======*/
670  dict_table_t* table);
673 /**********************************************************************/
675 UNIV_INTERN
676 void
677 fts_free(
678 /*=====*/
679  dict_table_t* table);
682 /*********************************************************************/
685 UNIV_INTERN
686 dberr_t
688 /*===============*/
689  dict_table_t* table)
690  __attribute__((nonnull));
691 
692 /**********************************************************************/
694 UNIV_INTERN
695 void
696 fts_optimize_init(void);
697 /*====================*/
698 
699 /**********************************************************************/
702 UNIV_INTERN
703 ibool
705 /*======================*/
706 
707 /****************************************************************/
710 UNIV_INTERN
711 dberr_t
713 /*==================*/
714  trx_t* trx,
715  dict_index_t* index)
716  __attribute__((nonnull, warn_unused_result));
717 
718 /******************************************************************/
721 UNIV_INTERN
722 void
724 /*======================*/
725  dict_table_t* table);
727 /**********************************************************************/
729 UNIV_INTERN
730 void
732 /*==============================*/
733 
734 /**********************************************************************/
736 UNIV_INTERN
737 void
738 fts_optimize_end(void);
739 /*===================*/
740 
741 /**********************************************************************/
743 UNIV_INTERN
744 void
746 /*===============*/
747  trx_t* trx,
748  fts_trx_t* fts_trx,
749  const char* name)
750  __attribute__((nonnull));
751 /**********************************************************************/
753 UNIV_INTERN
754 void
756 /*===========================*/
757  trx_t* trx)
758  __attribute__((nonnull));
759 /**********************************************************************/
761 UNIV_INTERN
762 void
764 /*==================*/
765  trx_t* trx,
766  const char* name);
768 /**********************************************************************/
770 UNIV_INTERN
771 void
773 /*==============*/
774  fts_cache_t* cache);
776 /*********************************************************************/
778 UNIV_INTERN
779 void
781 /*============*/
782  fts_cache_t* cache);
784 /*********************************************************************/
786 UNIV_INTERN
787 void
789 /*===========*/
790  fts_cache_t* cache);
792 /*********************************************************************/
794 UNIV_INTERN
795 void
797 /*===================*/
798  trx_t* trx,
799  const char* name);
801 /*********************************************************************/
803 UNIV_INTERN
804 void
806 /*=============================*/
807  trx_t* trx);
809 /***********************************************************************/
812 UNIV_INTERN
813 void
815 /*==========================*/
816 
817 /******************************************************************/
821 UNIV_INTERN
822 dberr_t
824 /*========================*/
825  trx_t* trx,
826  dict_index_t* index)
827  __attribute__((nonnull, warn_unused_result));
828 
829 /****************************************************************/
832 UNIV_INTERN
833 dberr_t
835 /*===========*/
836  dict_table_t* table)
837  __attribute__((nonnull));
838 
839 /****************************************************************/
842 UNIV_INTERN
843 void
845 /*==========================*/
846  fts_table_t* fts_table,
847  const fts_index_cache_t*index_cache,
848  que_t* graph);
850 /****************************************************************/
852 UNIV_INTERN
853 CHARSET_INFO*
855 /*==================*/
856  dict_index_t* index);
858 /*********************************************************************/
861 UNIV_INTERN
862 doc_id_t
864 /*============*/
865  const dict_table_t* table);
867 /******************************************************************/
869 extern
870 int
872 /*==================*/
873  const void* cs,
874  const void* p1,
875  const void* p2);
877 /******************************************************************/
879 extern
880 size_t
882 /*====================*/
883  CHARSET_INFO* cs,
884  char* src,
886  size_t src_len,
887  char* dst,
889  size_t dst_len);
892 /******************************************************************/
894 extern
895 int
897 /*=========================*/
898  const void* cs,
899  const void* p1,
900  const void* p2);
902 /*************************************************************/
904 extern
905 ulint
907 /*=========================*/
908  CHARSET_INFO* charset,
909  const byte* start,
910  const byte* end,
912  fts_string_t* token,
913  ulint* offset);
917 /*********************************************************************/
920 UNIV_INTERN
921 ulint
923 /*===============*/
924  fts_table_t* fts_table);
926 /*************************************************************/
929 UNIV_INTERN
930 doc_id_t
932 /*===============*/
933  dict_table_t* table);
935 /******************************************************************/
939 UNIV_INTERN
940 CHARSET_INFO*
942 /*=====================*/
943  const char* stopword_table_name);
945 /****************************************************************/
948 UNIV_INTERN
949 ibool
951 /*==============*/
952  const dict_table_t*
953  table,
954  trx_t* trx,
955  const char* global_stopword_table,
957  const char* session_stopword_table,
959  ibool stopword_is_on,
961  ibool reload);
964 /****************************************************************/
967 UNIV_INTERN
970 /*================*/
971  fts_cache_t* cache);
973 /****************************************************************/
976 UNIV_INTERN
977 dberr_t
979 /*====================*/
980  trx_t* trx,
981  fts_table_t* fts_table,
982  fts_doc_ids_t* doc_ids);
984 /****************************************************************/
990 UNIV_INTERN
991 ibool
993 /*===========*/
994  dict_table_t* table,
995  ibool has_cache_lock);
997 /*******************************************************************/
999 UNIV_INTERN
1000 void
1002 /*==========*/
1003  dict_index_t* index,
1004  dict_table_t* table);
1006 /*******************************************************************/
1009 UNIV_INTERN
1010 dberr_t
1012 /*===========*/
1013  dict_table_t* table,
1014  dict_index_t* index,
1015  trx_t* trx)
1016  __attribute__((nonnull));
1017 
1018 /****************************************************************/
1022 dberr_t
1024 /*==================*/
1025  dict_table_t* table,
1026  const char* new_name,
1027  trx_t* trx);
1029 /*******************************************************************/
1033 UNIV_INTERN
1034 ibool
1036 /*===================*/
1037  dict_table_t* table);
1038 #endif