isomorfeus-ferret 0.14.3 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +56 -6
  3. data/ext/isomorfeus_ferret_ext/extconf.rb +19 -1
  4. data/ext/isomorfeus_ferret_ext/frb_analysis.c +0 -4
  5. data/ext/isomorfeus_ferret_ext/frb_field_info.c +65 -55
  6. data/ext/isomorfeus_ferret_ext/frb_index.c +21 -23
  7. data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +4 -0
  8. data/ext/isomorfeus_ferret_ext/frb_qparser.c +1 -6
  9. data/ext/isomorfeus_ferret_ext/frb_search.c +0 -5
  10. data/ext/isomorfeus_ferret_ext/frb_store.c +66 -4
  11. data/ext/isomorfeus_ferret_ext/frb_utils.c +0 -4
  12. data/ext/isomorfeus_ferret_ext/frt_compound_io.c +4 -4
  13. data/ext/isomorfeus_ferret_ext/frt_except.c +11 -11
  14. data/ext/isomorfeus_ferret_ext/frt_fs_store.c +62 -88
  15. data/ext/isomorfeus_ferret_ext/frt_hash.c +32 -70
  16. data/ext/isomorfeus_ferret_ext/frt_ind.c +21 -21
  17. data/ext/isomorfeus_ferret_ext/frt_ind.h +1 -1
  18. data/ext/isomorfeus_ferret_ext/frt_index.c +144 -223
  19. data/ext/isomorfeus_ferret_ext/frt_index.h +35 -58
  20. data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +691 -0
  21. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +4 -4
  22. data/ext/isomorfeus_ferret_ext/frt_q_span.c +2 -2
  23. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +9 -9
  24. data/ext/isomorfeus_ferret_ext/frt_search.c +0 -3
  25. data/ext/isomorfeus_ferret_ext/frt_search.h +1 -1
  26. data/ext/isomorfeus_ferret_ext/frt_sort.c +2 -2
  27. data/ext/isomorfeus_ferret_ext/frt_store.c +6 -8
  28. data/ext/isomorfeus_ferret_ext/frt_store.h +43 -21
  29. data/ext/isomorfeus_ferret_ext/frt_threading.h +0 -16
  30. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +0 -9
  31. data/ext/isomorfeus_ferret_ext/mdbx.c +33632 -0
  32. data/ext/isomorfeus_ferret_ext/mdbx.h +5495 -0
  33. data/ext/isomorfeus_ferret_ext/test.c +20 -18
  34. data/ext/isomorfeus_ferret_ext/test_1710.c +1 -1
  35. data/ext/isomorfeus_ferret_ext/test_fields.c +39 -39
  36. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +1 -1
  37. data/ext/isomorfeus_ferret_ext/test_filter.c +1 -1
  38. data/ext/isomorfeus_ferret_ext/test_highlighter.c +1 -2
  39. data/ext/isomorfeus_ferret_ext/test_index.c +36 -36
  40. data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +19 -0
  41. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +2 -2
  42. data/ext/isomorfeus_ferret_ext/test_q_span.c +1 -1
  43. data/ext/isomorfeus_ferret_ext/test_search.c +4 -4
  44. data/ext/isomorfeus_ferret_ext/test_segments.c +1 -4
  45. data/ext/isomorfeus_ferret_ext/test_sort.c +2 -2
  46. data/ext/isomorfeus_ferret_ext/test_store.c +4 -8
  47. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +6 -6
  48. data/ext/isomorfeus_ferret_ext/test_threading.c +4 -4
  49. data/ext/isomorfeus_ferret_ext/tests_all.h +2 -0
  50. data/lib/isomorfeus/ferret/version.rb +1 -1
  51. metadata +9 -5
@@ -62,27 +62,7 @@ extern FrtHash *frt_co_hash_create();
62
62
  *
63
63
  ****************************************************************************/
64
64
 
65
- typedef enum {
66
- FRT_STORE_NO = 0,
67
- FRT_STORE_YES = 1,
68
- } FrtStoreValue;
69
-
70
- typedef enum {
71
- FRT_INDEX_NO = 0,
72
- FRT_INDEX_UNTOKENIZED = 1,
73
- FRT_INDEX_YES = 3,
74
- FRT_INDEX_UNTOKENIZED_OMIT_NORMS = 5,
75
- FRT_INDEX_YES_OMIT_NORMS = 7
76
- } FrtIndexValue;
77
-
78
- typedef enum {
79
- FRT_TERM_VECTOR_NO = 0,
80
- FRT_TERM_VECTOR_YES = 1,
81
- FRT_TERM_VECTOR_WITH_POSITIONS = 3,
82
- FRT_TERM_VECTOR_WITH_OFFSETS = 5,
83
- FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS = 7
84
- } FrtTermVectorValue;
85
-
65
+ #define FRT_FI_DEFAULTS_BM FRT_FI_IS_STORED_BM | FRT_FI_IS_INDEXED_BM | FRT_FI_IS_TOKENIZED_BM | FRT_FI_STORE_TERM_VECTOR_BM | FRT_FI_STORE_POSITIONS_BM | FRT_FI_STORE_OFFSETS_BM
86
66
  #define FRT_FI_IS_STORED_BM 0x001
87
67
  #define FRT_FI_IS_COMPRESSED_BM 0x002
88
68
  #define FRT_FI_IS_INDEXED_BM 0x004
@@ -105,24 +85,24 @@ typedef struct FrtFieldInfo {
105
85
  } FrtFieldInfo;
106
86
 
107
87
  extern FrtFieldInfo *frt_fi_alloc();
108
- extern FrtFieldInfo *frt_fi_init(FrtFieldInfo *fi, ID name, FrtStoreValue store, FrtCompressionType compression, FrtIndexValue index, FrtTermVectorValue term_vector);
109
- extern FrtFieldInfo *frt_fi_new(ID name, FrtStoreValue store, FrtCompressionType compression, FrtIndexValue index, FrtTermVectorValue term_vector);
88
+ extern FrtFieldInfo *frt_fi_init(FrtFieldInfo *fi, ID name, unsigned int bits);
89
+ extern FrtFieldInfo *frt_fi_new(ID name, unsigned int bits);
110
90
  extern char *frt_fi_to_s(FrtFieldInfo *fi);
111
91
  extern void frt_fi_deref(FrtFieldInfo *fi);
112
92
 
113
- #define fi_is_stored(fi) (((fi)->bits & FRT_FI_IS_STORED_BM) != 0)
114
- #define fi_is_compressed(fi) (((fi)->bits & FRT_FI_IS_COMPRESSED_BM) != 0)
115
- #define fi_is_compressed_brotli(fi) (((fi)->bits & FRT_FI_COMPRESSION_BROTLI_BM) != 0)
116
- #define fi_is_compressed_bz2(fi) (((fi)->bits & FRT_FI_COMPRESSION_BZ2_BM) != 0)
117
- #define fi_is_compressed_lz4(fi) (((fi)->bits & FRT_FI_COMPRESSION_LZ4_BM) != 0)
118
- #define fi_is_indexed(fi) (((fi)->bits & FRT_FI_IS_INDEXED_BM) != 0)
119
- #define fi_is_tokenized(fi) (((fi)->bits & FRT_FI_IS_TOKENIZED_BM) != 0)
120
- #define fi_omit_norms(fi) (((fi)->bits & FRT_FI_OMIT_NORMS_BM) != 0)
121
- #define fi_store_term_vector(fi) (((fi)->bits & FRT_FI_STORE_TERM_VECTOR_BM) != 0)
122
- #define fi_store_positions(fi) (((fi)->bits & FRT_FI_STORE_POSITIONS_BM) != 0)
123
- #define fi_store_offsets(fi) (((fi)->bits & FRT_FI_STORE_OFFSETS_BM) != 0)
124
- #define fi_has_norms(fi)\
125
- (((fi)->bits & (FRT_FI_OMIT_NORMS_BM|FRT_FI_IS_INDEXED_BM)) == FRT_FI_IS_INDEXED_BM)
93
+ #define bits_is_stored(bits) ((bits & FRT_FI_IS_STORED_BM) != 0)
94
+ #define bits_is_compressed(bits) ((bits & FRT_FI_IS_COMPRESSED_BM) != 0)
95
+ #define bits_is_compressed_brotli(bits) ((bits & FRT_FI_COMPRESSION_BROTLI_BM) != 0)
96
+ #define bits_is_compressed_bz2(bits) ((bits & FRT_FI_COMPRESSION_BZ2_BM) != 0)
97
+ #define bits_is_compressed_lz4(bits) ((bits & FRT_FI_COMPRESSION_LZ4_BM) != 0)
98
+ #define bits_is_indexed(bits) ((bits & FRT_FI_IS_INDEXED_BM) != 0)
99
+ #define bits_is_tokenized(bits) ((bits & FRT_FI_IS_TOKENIZED_BM) != 0)
100
+ #define bits_omit_norms(bits) ((bits & FRT_FI_OMIT_NORMS_BM) != 0)
101
+ #define bits_store_term_vector(bits) ((bits & FRT_FI_STORE_TERM_VECTOR_BM) != 0)
102
+ #define bits_store_positions(bits) ((bits & FRT_FI_STORE_POSITIONS_BM) != 0)
103
+ #define bits_store_offsets(bits) ((bits & FRT_FI_STORE_OFFSETS_BM) != 0)
104
+ #define bits_has_norms(bits)\
105
+ ((bits & (FRT_FI_OMIT_NORMS_BM|FRT_FI_IS_INDEXED_BM)) == FRT_FI_IS_INDEXED_BM)
126
106
 
127
107
  /****************************************************************************
128
108
  *
@@ -133,21 +113,18 @@ extern void frt_fi_deref(FrtFieldInfo *fi);
133
113
  #define FIELD_INFOS_INIT_CAPA 4
134
114
  /* carry changes over to dummy_fis in test/test_segments.c */
135
115
  typedef struct FrtFieldInfos {
136
- FrtStoreValue store_val;
137
- FrtCompressionType compression;
138
- FrtIndexValue index;
139
- FrtTermVectorValue term_vector;
140
- int size;
141
- int capa;
142
- FrtFieldInfo **fields;
143
- FrtHash *field_dict;
116
+ unsigned int bits;
117
+ int size;
118
+ int capa;
119
+ FrtFieldInfo **fields;
120
+ FrtHash *field_dict;
144
121
  _Atomic unsigned int ref_cnt;
145
- VALUE rfis;
122
+ VALUE rfis;
146
123
  } FrtFieldInfos;
147
124
 
148
125
  FrtFieldInfos *frt_fis_alloc();
149
- FrtFieldInfos *frt_fis_init(FrtFieldInfos *fis, FrtStoreValue store, FrtCompressionType compression, FrtIndexValue index, FrtTermVectorValue term_vector);
150
- FrtFieldInfos *frt_fis_new(FrtStoreValue store, FrtCompressionType compression, FrtIndexValue index, FrtTermVectorValue term_vector);
126
+ FrtFieldInfos *frt_fis_init(FrtFieldInfos *fis, unsigned int bits);
127
+ FrtFieldInfos *frt_fis_new(unsigned int bits);
151
128
  extern FrtFieldInfo *frt_fis_add_field(FrtFieldInfos *fis, FrtFieldInfo *fi);
152
129
  extern FrtFieldInfo *frt_fis_get_field(FrtFieldInfos *fis, ID name);
153
130
  extern int frt_fis_get_field_num(FrtFieldInfos *fis, ID name);
@@ -265,25 +242,25 @@ FrtTermInfo *frt_te_get_ti(struct FrtTermEnum *te);
265
242
  /* FrtSegmentTermIndex */
266
243
 
267
244
  typedef struct FrtSegmentTermIndex {
268
- frt_off_t index_ptr;
269
- frt_off_t ptr;
245
+ frt_off_t index_ptr;
246
+ frt_off_t ptr;
270
247
  int index_cnt;
271
248
  int size;
272
249
  char **index_terms;
273
250
  int *index_term_lens;
274
251
  FrtTermInfo *index_term_infos;
275
- frt_off_t *index_ptrs;
252
+ frt_off_t *index_ptrs;
276
253
  } FrtSegmentTermIndex;
277
254
 
278
255
  /* FrtSegmentFieldIndex */
279
256
 
280
257
  typedef struct FrtSegmentFieldIndex {
281
- frt_mutex_t mutex;
282
- int skip_interval;
283
- int index_interval;
258
+ pthread_mutex_t mutex;
259
+ int skip_interval;
260
+ int index_interval;
284
261
  frt_off_t index_ptr;
285
- FrtTermEnum *index_te;
286
- FrtHash *field_dict;
262
+ FrtTermEnum *index_te;
263
+ FrtHash *field_dict;
287
264
  } FrtSegmentFieldIndex;
288
265
 
289
266
  /* FrtSegmentTermEnum */
@@ -681,9 +658,9 @@ struct FrtIndexReader {
681
658
  FrtFieldInfos *fis;
682
659
  FrtHash *cache;
683
660
  FrtHash *field_index_cache;
684
- frt_mutex_t field_index_mutex;
661
+ pthread_mutex_t field_index_mutex;
685
662
  frt_uchar *fake_norms;
686
- frt_mutex_t mutex;
663
+ pthread_mutex_t mutex;
687
664
  bool has_changes : 1;
688
665
  bool is_stale : 1;
689
666
  bool is_owner : 1;
@@ -815,7 +792,7 @@ extern void frt_dw_reset_postings(FrtHash *postings);
815
792
 
816
793
  struct FrtIndexWriter {
817
794
  FrtConfig config;
818
- frt_mutex_t mutex;
795
+ pthread_mutex_t mutex;
819
796
  FrtStore *store;
820
797
  FrtAnalyzer *analyzer;
821
798
  FrtSegmentInfos *sis;