isomorfeus-ferret 0.17.2 → 0.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/ext/isomorfeus_ferret_ext/benchmark.c +9 -20
  3. data/ext/isomorfeus_ferret_ext/benchmarks_all.h +1 -2
  4. data/ext/isomorfeus_ferret_ext/bm_hash.c +1 -2
  5. data/ext/isomorfeus_ferret_ext/brotli_dec_decode.c +4 -2
  6. data/ext/isomorfeus_ferret_ext/brotli_enc_encode.c +3 -2
  7. data/ext/isomorfeus_ferret_ext/frb_analysis.c +4 -5
  8. data/ext/isomorfeus_ferret_ext/frb_field_info.c +3 -4
  9. data/ext/isomorfeus_ferret_ext/frb_index.c +118 -125
  10. data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
  11. data/ext/isomorfeus_ferret_ext/frb_search.c +31 -23
  12. data/ext/isomorfeus_ferret_ext/frb_store.c +27 -13
  13. data/ext/isomorfeus_ferret_ext/frb_utils.c +3 -6
  14. data/ext/isomorfeus_ferret_ext/frt_analysis.c +39 -46
  15. data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
  16. data/ext/isomorfeus_ferret_ext/frt_array.c +11 -22
  17. data/ext/isomorfeus_ferret_ext/frt_bitvector.h +3 -6
  18. data/ext/isomorfeus_ferret_ext/frt_doc_field.c +87 -0
  19. data/ext/isomorfeus_ferret_ext/frt_doc_field.h +26 -0
  20. data/ext/isomorfeus_ferret_ext/frt_document.c +4 -97
  21. data/ext/isomorfeus_ferret_ext/frt_document.h +2 -27
  22. data/ext/isomorfeus_ferret_ext/frt_except.c +8 -6
  23. data/ext/isomorfeus_ferret_ext/frt_except.h +1 -2
  24. data/ext/isomorfeus_ferret_ext/frt_field_index.c +13 -32
  25. data/ext/isomorfeus_ferret_ext/frt_field_index.h +0 -6
  26. data/ext/isomorfeus_ferret_ext/frt_field_info.c +69 -0
  27. data/ext/isomorfeus_ferret_ext/frt_field_info.h +49 -0
  28. data/ext/isomorfeus_ferret_ext/frt_field_infos.c +196 -0
  29. data/ext/isomorfeus_ferret_ext/frt_field_infos.h +35 -0
  30. data/ext/isomorfeus_ferret_ext/frt_global.c +10 -4
  31. data/ext/isomorfeus_ferret_ext/frt_global.h +11 -15
  32. data/ext/isomorfeus_ferret_ext/frt_hash.c +8 -8
  33. data/ext/isomorfeus_ferret_ext/frt_hash.h +1 -2
  34. data/ext/isomorfeus_ferret_ext/frt_hashset.c +20 -40
  35. data/ext/isomorfeus_ferret_ext/frt_hashset.h +1 -2
  36. data/ext/isomorfeus_ferret_ext/frt_helper.c +7 -15
  37. data/ext/isomorfeus_ferret_ext/frt_in_stream.c +35 -45
  38. data/ext/isomorfeus_ferret_ext/frt_in_stream.h +3 -2
  39. data/ext/isomorfeus_ferret_ext/frt_ind.c +20 -38
  40. data/ext/isomorfeus_ferret_ext/frt_index.c +292 -790
  41. data/ext/isomorfeus_ferret_ext/frt_index.h +1 -102
  42. data/ext/isomorfeus_ferret_ext/frt_lang.c +5 -10
  43. data/ext/isomorfeus_ferret_ext/frt_lazy_doc.c +3 -3
  44. data/ext/isomorfeus_ferret_ext/frt_lazy_doc.h +1 -1
  45. data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.c +18 -25
  46. data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.h +5 -5
  47. data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +102 -70
  48. data/ext/isomorfeus_ferret_ext/frt_mempool.c +8 -16
  49. data/ext/isomorfeus_ferret_ext/frt_multimapper.c +23 -46
  50. data/ext/isomorfeus_ferret_ext/frt_multimapper.h +4 -8
  51. data/ext/isomorfeus_ferret_ext/frt_out_stream.c +31 -43
  52. data/ext/isomorfeus_ferret_ext/frt_out_stream.h +2 -2
  53. data/ext/isomorfeus_ferret_ext/frt_posh.c +6 -819
  54. data/ext/isomorfeus_ferret_ext/frt_posh.h +0 -57
  55. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +11 -22
  56. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +1 -2
  57. data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +85 -171
  58. data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -16
  59. data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +1 -2
  60. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
  61. data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +52 -104
  62. data/ext/isomorfeus_ferret_ext/frt_q_range.c +6 -12
  63. data/ext/isomorfeus_ferret_ext/frt_q_span.c +113 -226
  64. data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +1 -2
  65. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +134 -85
  66. data/ext/isomorfeus_ferret_ext/frt_search.c +82 -164
  67. data/ext/isomorfeus_ferret_ext/frt_similarity.c +11 -22
  68. data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
  69. data/ext/isomorfeus_ferret_ext/frt_store.c +13 -25
  70. data/ext/isomorfeus_ferret_ext/frt_store.h +86 -52
  71. data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +8 -16
  72. data/ext/isomorfeus_ferret_ext/frt_win32.h +5 -10
  73. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +12 -11
  74. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +11 -13
  75. data/ext/isomorfeus_ferret_ext/lz4.c +422 -195
  76. data/ext/isomorfeus_ferret_ext/lz4.h +114 -46
  77. data/ext/isomorfeus_ferret_ext/lz4frame.c +421 -242
  78. data/ext/isomorfeus_ferret_ext/lz4frame.h +122 -53
  79. data/ext/isomorfeus_ferret_ext/lz4hc.c +127 -111
  80. data/ext/isomorfeus_ferret_ext/lz4hc.h +14 -14
  81. data/ext/isomorfeus_ferret_ext/lz4xxhash.h +1 -1
  82. data/ext/isomorfeus_ferret_ext/mdbx.c +3762 -2526
  83. data/ext/isomorfeus_ferret_ext/mdbx.h +115 -70
  84. data/ext/isomorfeus_ferret_ext/test.c +40 -87
  85. data/ext/isomorfeus_ferret_ext/test.h +3 -6
  86. data/ext/isomorfeus_ferret_ext/test_1710.c +11 -13
  87. data/ext/isomorfeus_ferret_ext/test_analysis.c +32 -64
  88. data/ext/isomorfeus_ferret_ext/test_array.c +6 -12
  89. data/ext/isomorfeus_ferret_ext/test_bitvector.c +12 -24
  90. data/ext/isomorfeus_ferret_ext/test_document.c +23 -33
  91. data/ext/isomorfeus_ferret_ext/test_except.c +10 -21
  92. data/ext/isomorfeus_ferret_ext/test_fields.c +62 -68
  93. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +15 -23
  94. data/ext/isomorfeus_ferret_ext/test_filter.c +17 -27
  95. data/ext/isomorfeus_ferret_ext/test_global.c +14 -29
  96. data/ext/isomorfeus_ferret_ext/test_hash.c +19 -38
  97. data/ext/isomorfeus_ferret_ext/test_hashset.c +8 -16
  98. data/ext/isomorfeus_ferret_ext/test_helper.c +4 -8
  99. data/ext/isomorfeus_ferret_ext/test_highlighter.c +16 -28
  100. data/ext/isomorfeus_ferret_ext/test_index.c +277 -487
  101. data/ext/isomorfeus_ferret_ext/test_lang.c +7 -14
  102. data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +2 -5
  103. data/ext/isomorfeus_ferret_ext/test_mempool.c +5 -10
  104. data/ext/isomorfeus_ferret_ext/test_multimapper.c +3 -6
  105. data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +9 -18
  106. data/ext/isomorfeus_ferret_ext/test_q_const_score.c +4 -6
  107. data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -4
  108. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +9 -15
  109. data/ext/isomorfeus_ferret_ext/test_q_parser.c +8 -16
  110. data/ext/isomorfeus_ferret_ext/test_q_span.c +19 -35
  111. data/ext/isomorfeus_ferret_ext/test_ram_store.c +14 -13
  112. data/ext/isomorfeus_ferret_ext/test_search.c +60 -109
  113. data/ext/isomorfeus_ferret_ext/test_segments.c +8 -13
  114. data/ext/isomorfeus_ferret_ext/test_similarity.c +2 -4
  115. data/ext/isomorfeus_ferret_ext/test_sort.c +14 -24
  116. data/ext/isomorfeus_ferret_ext/test_store.c +96 -115
  117. data/ext/isomorfeus_ferret_ext/test_term.c +9 -15
  118. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -14
  119. data/ext/isomorfeus_ferret_ext/test_test.c +4 -8
  120. data/ext/isomorfeus_ferret_ext/test_threading.c +14 -20
  121. data/ext/isomorfeus_ferret_ext/testhelper.c +11 -21
  122. data/ext/isomorfeus_ferret_ext/testhelper.h +1 -1
  123. data/ext/isomorfeus_ferret_ext/tests_all.h +1 -2
  124. data/lib/isomorfeus/ferret/index/index.rb +1 -1
  125. data/lib/isomorfeus/ferret/version.rb +1 -1
  126. metadata +24 -4
@@ -208,8 +208,7 @@ static VALUE frb_fis_add(VALUE self, VALUE rfi) {
208
208
  * of the available properties.
209
209
  */
210
210
  static VALUE
211
- frb_fis_add_field(int argc, VALUE *argv, VALUE self)
212
- {
211
+ frb_fis_add_field(int argc, VALUE *argv, VALUE self) {
213
212
  FrtFieldInfos *fis = (FrtFieldInfos *)DATA_PTR(self);
214
213
  FrtFieldInfo *fi;
215
214
  unsigned int bits = fis->bits;
@@ -233,8 +232,7 @@ frb_fis_add_field(int argc, VALUE *argv, VALUE self)
233
232
  * Iterate through the FieldInfo objects.
234
233
  */
235
234
  static VALUE
236
- frb_fis_each(VALUE self)
237
- {
235
+ frb_fis_each(VALUE self) {
238
236
  int i;
239
237
  FrtFieldInfos *fis = (FrtFieldInfos *)DATA_PTR(self);
240
238
 
@@ -251,8 +249,7 @@ frb_fis_each(VALUE self)
251
249
  * Return a string representation of the FieldInfos object.
252
250
  */
253
251
  static VALUE
254
- frb_fis_to_s(VALUE self)
255
- {
252
+ frb_fis_to_s(VALUE self) {
256
253
  FrtFieldInfos *fis = (FrtFieldInfos *)DATA_PTR(self);
257
254
  char *fis_s = frt_fis_to_s(fis);
258
255
  VALUE rfis_s = rb_str_new2(fis_s);
@@ -291,6 +288,7 @@ static VALUE frb_fis_create_index(VALUE self, VALUE rdir) {
291
288
  StringValue(rdir);
292
289
  frb_create_dir(rdir);
293
290
  store = frt_open_mdbx_store(rs2s(rdir));
291
+ store->create_folder(store, segm_idx_name);
294
292
  frt_index_create(store, fis);
295
293
  frt_store_close(store);
296
294
  }
@@ -306,8 +304,7 @@ static VALUE frb_fis_create_index(VALUE self, VALUE rdir) {
306
304
  * index.
307
305
  */
308
306
  static VALUE
309
- frb_fis_get_fields(VALUE self)
310
- {
307
+ frb_fis_get_fields(VALUE self) {
311
308
  FrtFieldInfos *fis = (FrtFieldInfos *)DATA_PTR(self);
312
309
  VALUE rfield_names = rb_ary_new();
313
310
  int i;
@@ -325,8 +322,7 @@ frb_fis_get_fields(VALUE self)
325
322
  * in the index.
326
323
  */
327
324
  static VALUE
328
- frb_fis_get_tk_fields(VALUE self)
329
- {
325
+ frb_fis_get_tk_fields(VALUE self) {
330
326
  FrtFieldInfos *fis = (FrtFieldInfos *)DATA_PTR(self);
331
327
  VALUE rfield_names = rb_ary_new();
332
328
  int i;
@@ -777,16 +773,13 @@ static VALUE frb_tde_to_json(int argc, VALUE *argv, VALUE self) {
777
773
  if (do_positions) {
778
774
  if (argc == 0) {
779
775
  format = "{\"document\":%d,\"frequency\":%d,\"positions\":[";
780
- }
781
- else {
776
+ } else {
782
777
  format = "[%d,%d,[";
783
778
  }
784
- }
785
- else {
779
+ } else {
786
780
  if (argc == 0) {
787
781
  format = "{\"document\":%d,\"frequency\":%d},";
788
- }
789
- else {
782
+ } else {
790
783
  format = "[%d,%d],";
791
784
  }
792
785
  }
@@ -1039,6 +1032,7 @@ static VALUE frb_iw_init(int argc, VALUE *argv, VALUE self) {
1039
1032
  StringValue(rval);
1040
1033
  frb_create_dir(rval);
1041
1034
  store = frt_open_mdbx_store(rs2s(rval));
1035
+ store->create_folder(store, segm_idx_name);
1042
1036
  }
1043
1037
 
1044
1038
  if ((rval = rb_hash_aref(roptions, sym_analyzer)) != Qnil) {
@@ -1060,8 +1054,9 @@ static VALUE frb_iw_init(int argc, VALUE *argv, VALUE self) {
1060
1054
  }
1061
1055
  if (NULL == store) {
1062
1056
  store = frt_open_ram_store(NULL);
1057
+ store->create_folder(store, segm_idx_name);
1063
1058
  }
1064
- if (!create && create_if_missing && !store->exists(store, "segments")) {
1059
+ if (!create && create_if_missing && !store->exists(store, segm_idx_name, "segments")) {
1065
1060
  create = true;
1066
1061
  }
1067
1062
  if (create) {
@@ -1130,8 +1125,7 @@ frb_iw_get_doc_count(VALUE self) {
1130
1125
  }
1131
1126
 
1132
1127
  static int
1133
- frb_hash_to_doc_i(VALUE key, VALUE value, VALUE arg)
1134
- {
1128
+ frb_hash_to_doc_i(VALUE key, VALUE value, VALUE arg) {
1135
1129
  if (key == Qundef) {
1136
1130
  return ST_CONTINUE;
1137
1131
  } else {
@@ -1151,20 +1145,18 @@ frb_hash_to_doc_i(VALUE key, VALUE value, VALUE arg)
1151
1145
  case T_ARRAY:
1152
1146
  {
1153
1147
  int i;
1154
- df->destroy_data = true;
1155
1148
  for (i = 0; i < RARRAY_LEN(value); i++) {
1156
1149
  val = rb_obj_as_string(RARRAY_PTR(value)[i]);
1157
- frt_df_add_data_len(df, rstrdup(val), RSTRING_LEN(val), rb_enc_get(val));
1150
+ frt_df_add_data_len(df, RSTRING_PTR(val), RSTRING_LEN(val), rb_enc_get(val));
1158
1151
  }
1159
1152
  }
1160
1153
  break;
1161
1154
  case T_STRING:
1162
- frt_df_add_data_len(df, rs2s(value), RSTRING_LEN(value), rb_enc_get(value));
1155
+ frt_df_add_data_len(df, RSTRING_PTR(value), RSTRING_LEN(value), rb_enc_get(value));
1163
1156
  break;
1164
1157
  default:
1165
1158
  val = rb_obj_as_string(value);
1166
- df->destroy_data = true;
1167
- frt_df_add_data_len(df, rstrdup(val), RSTRING_LEN(val), rb_enc_get(val));
1159
+ frt_df_add_data_len(df, RSTRING_PTR(val), RSTRING_LEN(val), rb_enc_get(val));
1168
1160
  break;
1169
1161
  }
1170
1162
  FRT_TRY
@@ -1181,8 +1173,7 @@ frb_hash_to_doc_i(VALUE key, VALUE value, VALUE arg)
1181
1173
  }
1182
1174
 
1183
1175
  static FrtDocument *
1184
- frb_get_doc(VALUE rdoc)
1185
- {
1176
+ frb_get_doc(VALUE rdoc) {
1186
1177
  VALUE val;
1187
1178
  FrtDocument *doc = frt_doc_new();
1188
1179
  FrtDocField *df;
@@ -1199,27 +1190,25 @@ frb_get_doc(VALUE rdoc)
1199
1190
  {
1200
1191
  int i;
1201
1192
  df = frt_df_new(fsym_content);
1202
- df->destroy_data = true;
1203
1193
  for (i = 0; i < RARRAY_LEN(rdoc); i++) {
1204
1194
  val = rb_obj_as_string(RARRAY_PTR(rdoc)[i]);
1205
- frt_df_add_data_len(df, rstrdup(val), RSTRING_LEN(val), rb_enc_get(val));
1195
+ frt_df_add_data_len(df, RSTRING_PTR(val), RSTRING_LEN(val), rb_enc_get(val));
1206
1196
  }
1207
1197
  frt_doc_add_field(doc, df);
1208
1198
  }
1209
1199
  break;
1210
1200
  case T_SYMBOL:
1211
1201
  /* TODO: clean up this ugly cast */
1212
- df = frt_df_add_data(frt_df_new(fsym_content), (char *)rb_id2name(SYM2ID(rdoc)), rb_enc_get(rdoc));
1202
+ df = frt_df_add_data(frt_df_new(fsym_content), rb_id2name(SYM2ID(rdoc)), rb_enc_get(rdoc));
1213
1203
  frt_doc_add_field(doc, df);
1214
1204
  break;
1215
1205
  case T_STRING:
1216
- df = frt_df_add_data_len(frt_df_new(fsym_content), rs2s(rdoc), RSTRING_LEN(rdoc), rb_enc_get(rdoc));
1206
+ df = frt_df_add_data_len(frt_df_new(fsym_content), RSTRING_PTR(rdoc), RSTRING_LEN(rdoc), rb_enc_get(rdoc));
1217
1207
  frt_doc_add_field(doc, df);
1218
1208
  break;
1219
1209
  default:
1220
1210
  val = rb_obj_as_string(rdoc);
1221
- df = frt_df_add_data_len(frt_df_new(fsym_content), rstrdup(val), RSTRING_LEN(val), rb_enc_get(val));
1222
- df->destroy_data = true;
1211
+ df = frt_df_add_data_len(frt_df_new(fsym_content), RSTRING_PTR(val), RSTRING_LEN(val), rb_enc_get(val));
1223
1212
  frt_doc_add_field(doc, df);
1224
1213
  break;
1225
1214
  }
@@ -1439,8 +1428,7 @@ static VALUE frb_iw_field_infos(VALUE self) {
1439
1428
  * to use the same analyzer in a QueryParser.
1440
1429
  */
1441
1430
  static VALUE
1442
- frb_iw_get_analyzer(VALUE self)
1443
- {
1431
+ frb_iw_get_analyzer(VALUE self) {
1444
1432
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1445
1433
  return frb_get_analyzer(iw->analyzer);
1446
1434
  }
@@ -1454,8 +1442,7 @@ frb_iw_get_analyzer(VALUE self)
1454
1442
  * same analyzer will be used for all documents during search.
1455
1443
  */
1456
1444
  static VALUE
1457
- frb_iw_set_analyzer(VALUE self, VALUE ranalyzer)
1458
- {
1445
+ frb_iw_set_analyzer(VALUE self, VALUE ranalyzer) {
1459
1446
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1460
1447
 
1461
1448
  frt_a_deref(iw->analyzer);
@@ -1470,8 +1457,7 @@ frb_iw_set_analyzer(VALUE self, VALUE ranalyzer)
1470
1457
  * Returns the current version of the index writer.
1471
1458
  */
1472
1459
  static VALUE
1473
- frb_iw_version(VALUE self)
1474
- {
1460
+ frb_iw_version(VALUE self) {
1475
1461
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1476
1462
  return ULL2NUM(iw->sis->version);
1477
1463
  }
@@ -1483,8 +1469,7 @@ frb_iw_version(VALUE self)
1483
1469
  * Return the current value of chunk_size
1484
1470
  */
1485
1471
  static VALUE
1486
- frb_iw_get_chunk_size(VALUE self)
1487
- {
1472
+ frb_iw_get_chunk_size(VALUE self) {
1488
1473
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1489
1474
  return INT2FIX(iw->config.chunk_size);
1490
1475
  }
@@ -1496,8 +1481,7 @@ frb_iw_get_chunk_size(VALUE self)
1496
1481
  * Set the chunk_size parameter
1497
1482
  */
1498
1483
  static VALUE
1499
- frb_iw_set_chunk_size(VALUE self, VALUE rval)
1500
- {
1484
+ frb_iw_set_chunk_size(VALUE self, VALUE rval) {
1501
1485
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1502
1486
  iw->config.chunk_size = FIX2INT(rval);
1503
1487
  return rval;
@@ -1510,8 +1494,7 @@ frb_iw_set_chunk_size(VALUE self, VALUE rval)
1510
1494
  * Return the current value of max_buffer_memory
1511
1495
  */
1512
1496
  static VALUE
1513
- frb_iw_get_max_buffer_memory(VALUE self)
1514
- {
1497
+ frb_iw_get_max_buffer_memory(VALUE self) {
1515
1498
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1516
1499
  return INT2FIX(iw->config.max_buffer_memory);
1517
1500
  }
@@ -1523,8 +1506,7 @@ frb_iw_get_max_buffer_memory(VALUE self)
1523
1506
  * Set the max_buffer_memory parameter
1524
1507
  */
1525
1508
  static VALUE
1526
- frb_iw_set_max_buffer_memory(VALUE self, VALUE rval)
1527
- {
1509
+ frb_iw_set_max_buffer_memory(VALUE self, VALUE rval) {
1528
1510
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1529
1511
  iw->config.max_buffer_memory = FIX2INT(rval);
1530
1512
  return rval;
@@ -1537,8 +1519,7 @@ frb_iw_set_max_buffer_memory(VALUE self, VALUE rval)
1537
1519
  * Return the current value of term_index_interval
1538
1520
  */
1539
1521
  static VALUE
1540
- frb_iw_get_index_interval(VALUE self)
1541
- {
1522
+ frb_iw_get_index_interval(VALUE self) {
1542
1523
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1543
1524
  return INT2FIX(iw->config.index_interval);
1544
1525
  }
@@ -1550,8 +1531,7 @@ frb_iw_get_index_interval(VALUE self)
1550
1531
  * Set the term_index_interval parameter
1551
1532
  */
1552
1533
  static VALUE
1553
- frb_iw_set_index_interval(VALUE self, VALUE rval)
1554
- {
1534
+ frb_iw_set_index_interval(VALUE self, VALUE rval) {
1555
1535
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1556
1536
  iw->config.index_interval = FIX2INT(rval);
1557
1537
  return rval;
@@ -1564,8 +1544,7 @@ frb_iw_set_index_interval(VALUE self, VALUE rval)
1564
1544
  * Return the current value of doc_skip_interval
1565
1545
  */
1566
1546
  static VALUE
1567
- frb_iw_get_skip_interval(VALUE self)
1568
- {
1547
+ frb_iw_get_skip_interval(VALUE self) {
1569
1548
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1570
1549
  return INT2FIX(iw->config.skip_interval);
1571
1550
  }
@@ -1577,8 +1556,7 @@ frb_iw_get_skip_interval(VALUE self)
1577
1556
  * Set the doc_skip_interval parameter
1578
1557
  */
1579
1558
  static VALUE
1580
- frb_iw_set_skip_interval(VALUE self, VALUE rval)
1581
- {
1559
+ frb_iw_set_skip_interval(VALUE self, VALUE rval) {
1582
1560
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1583
1561
  iw->config.skip_interval = FIX2INT(rval);
1584
1562
  return rval;
@@ -1591,8 +1569,7 @@ frb_iw_set_skip_interval(VALUE self, VALUE rval)
1591
1569
  * Return the current value of merge_factor
1592
1570
  */
1593
1571
  static VALUE
1594
- frb_iw_get_merge_factor(VALUE self)
1595
- {
1572
+ frb_iw_get_merge_factor(VALUE self) {
1596
1573
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1597
1574
  return INT2FIX(iw->config.merge_factor);
1598
1575
  }
@@ -1604,8 +1581,7 @@ frb_iw_get_merge_factor(VALUE self)
1604
1581
  * Set the merge_factor parameter
1605
1582
  */
1606
1583
  static VALUE
1607
- frb_iw_set_merge_factor(VALUE self, VALUE rval)
1608
- {
1584
+ frb_iw_set_merge_factor(VALUE self, VALUE rval) {
1609
1585
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1610
1586
  iw->config.merge_factor = FIX2INT(rval);
1611
1587
  return rval;
@@ -1618,8 +1594,7 @@ frb_iw_set_merge_factor(VALUE self, VALUE rval)
1618
1594
  * Return the current value of max_buffered_docs
1619
1595
  */
1620
1596
  static VALUE
1621
- frb_iw_get_max_buffered_docs(VALUE self)
1622
- {
1597
+ frb_iw_get_max_buffered_docs(VALUE self) {
1623
1598
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1624
1599
  return INT2FIX(iw->config.max_buffered_docs);
1625
1600
  }
@@ -1631,8 +1606,7 @@ frb_iw_get_max_buffered_docs(VALUE self)
1631
1606
  * Set the max_buffered_docs parameter
1632
1607
  */
1633
1608
  static VALUE
1634
- frb_iw_set_max_buffered_docs(VALUE self, VALUE rval)
1635
- {
1609
+ frb_iw_set_max_buffered_docs(VALUE self, VALUE rval) {
1636
1610
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1637
1611
  iw->config.max_buffered_docs = FIX2INT(rval);
1638
1612
  return rval;
@@ -1645,8 +1619,7 @@ frb_iw_set_max_buffered_docs(VALUE self, VALUE rval)
1645
1619
  * Return the current value of max_merge_docs
1646
1620
  */
1647
1621
  static VALUE
1648
- frb_iw_get_max_merge_docs(VALUE self)
1649
- {
1622
+ frb_iw_get_max_merge_docs(VALUE self) {
1650
1623
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1651
1624
  return INT2FIX(iw->config.max_merge_docs);
1652
1625
  }
@@ -1658,8 +1631,7 @@ frb_iw_get_max_merge_docs(VALUE self)
1658
1631
  * Set the max_merge_docs parameter
1659
1632
  */
1660
1633
  static VALUE
1661
- frb_iw_set_max_merge_docs(VALUE self, VALUE rval)
1662
- {
1634
+ frb_iw_set_max_merge_docs(VALUE self, VALUE rval) {
1663
1635
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1664
1636
  iw->config.max_merge_docs = FIX2INT(rval);
1665
1637
  return rval;
@@ -1672,8 +1644,7 @@ frb_iw_set_max_merge_docs(VALUE self, VALUE rval)
1672
1644
  * Return the current value of max_field_length
1673
1645
  */
1674
1646
  static VALUE
1675
- frb_iw_get_max_field_length(VALUE self)
1676
- {
1647
+ frb_iw_get_max_field_length(VALUE self) {
1677
1648
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1678
1649
  return INT2FIX(iw->config.max_field_length);
1679
1650
  }
@@ -1685,8 +1656,7 @@ frb_iw_get_max_field_length(VALUE self)
1685
1656
  * Set the max_field_length parameter
1686
1657
  */
1687
1658
  static VALUE
1688
- frb_iw_set_max_field_length(VALUE self, VALUE rval)
1689
- {
1659
+ frb_iw_set_max_field_length(VALUE self, VALUE rval) {
1690
1660
  FrtIndexWriter *iw = (FrtIndexWriter *)DATA_PTR(self);
1691
1661
  iw->config.max_field_length = FIX2INT(rval);
1692
1662
  return rval;
@@ -1766,6 +1736,7 @@ static VALUE frb_ir_init(VALUE self, VALUE rdir) {
1766
1736
  case T_STRING:
1767
1737
  frb_create_dir(rdir);
1768
1738
  store = frt_open_mdbx_store(rs2s(rdir));
1739
+ store->create_folder(store, segm_idx_name);
1769
1740
  break;
1770
1741
  default:
1771
1742
  FRT_RAISE(FRT_ARG_ERROR, "%s isn't a valid directory "
@@ -1787,6 +1758,7 @@ static VALUE frb_ir_init(VALUE self, VALUE rdir) {
1787
1758
  case T_STRING:
1788
1759
  frb_create_dir(rdir);
1789
1760
  store = frt_open_mdbx_store(rs2s(rdir));
1761
+ store->create_folder(store, segm_idx_name);
1790
1762
  break;
1791
1763
  default:
1792
1764
  FRT_RAISE(FRT_ARG_ERROR, "%s isn't a valid directory argument. "
@@ -1860,8 +1832,7 @@ frb_ir_set_norm(VALUE self, VALUE rdoc_id, VALUE rfield, VALUE rval) {
1860
1832
  * could have null bytes.
1861
1833
  */
1862
1834
  static VALUE
1863
- frb_ir_norms(VALUE self, VALUE rfield)
1864
- {
1835
+ frb_ir_norms(VALUE self, VALUE rfield) {
1865
1836
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
1866
1837
  frt_uchar *norms;
1867
1838
  norms = frt_ir_get_norms(ir, frb_field(rfield));
@@ -1879,8 +1850,7 @@ frb_ir_norms(VALUE self, VALUE rfield)
1879
1850
  * Expert: Get the norm values into a string +buffer+ starting at +offset+.
1880
1851
  */
1881
1852
  static VALUE
1882
- frb_ir_get_norms_into(VALUE self, VALUE rfield, VALUE rnorms, VALUE roffset)
1883
- {
1853
+ frb_ir_get_norms_into(VALUE self, VALUE rfield, VALUE rnorms, VALUE roffset) {
1884
1854
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
1885
1855
  int offset;
1886
1856
  offset = FIX2INT(roffset);
@@ -1935,8 +1905,7 @@ frb_ir_commit(VALUE self) {
1935
1905
  * errors.
1936
1906
  */
1937
1907
  static VALUE
1938
- frb_ir_close(VALUE self)
1939
- {
1908
+ frb_ir_close(VALUE self) {
1940
1909
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
1941
1910
  ((struct RData *)(self))->data = NULL;
1942
1911
  ((struct RData *)(self))->dmark = NULL;
@@ -1953,8 +1922,7 @@ frb_ir_close(VALUE self)
1953
1922
  * IndexReader or committed by any other IndexReader.
1954
1923
  */
1955
1924
  static VALUE
1956
- frb_ir_has_deletions(VALUE self)
1957
- {
1925
+ frb_ir_has_deletions(VALUE self) {
1958
1926
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
1959
1927
  return ir->has_deletions(ir) ? Qtrue : Qfalse;
1960
1928
  }
@@ -1995,8 +1963,7 @@ frb_ir_delete(VALUE self, VALUE rdoc_id) {
1995
1963
  * Returns true if the document at +doc_id+ has been deleted.
1996
1964
  */
1997
1965
  static VALUE
1998
- frb_ir_is_deleted(VALUE self, VALUE rdoc_id)
1999
- {
1966
+ frb_ir_is_deleted(VALUE self, VALUE rdoc_id) {
2000
1967
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2001
1968
  return ir->is_deleted(ir, FIX2INT(rdoc_id)) ? Qtrue : Qfalse;
2002
1969
  }
@@ -2011,8 +1978,7 @@ frb_ir_is_deleted(VALUE self, VALUE rdoc_id)
2011
1978
  * in the index.
2012
1979
  */
2013
1980
  static VALUE
2014
- frb_ir_max_doc(VALUE self)
2015
- {
1981
+ frb_ir_max_doc(VALUE self) {
2016
1982
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2017
1983
  return INT2FIX(ir->max_doc(ir));
2018
1984
  }
@@ -2026,8 +1992,7 @@ frb_ir_max_doc(VALUE self)
2026
1992
  * deleted from the index.
2027
1993
  */
2028
1994
  static VALUE
2029
- frb_ir_num_docs(VALUE self)
2030
- {
1995
+ frb_ir_num_docs(VALUE self) {
2031
1996
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2032
1997
  return INT2FIX(ir->num_docs(ir));
2033
1998
  }
@@ -2042,24 +2007,36 @@ frb_ir_num_docs(VALUE self)
2042
2007
  * effect on these documents.
2043
2008
  */
2044
2009
  static VALUE
2045
- frb_ir_undelete_all(VALUE self)
2046
- {
2010
+ frb_ir_undelete_all(VALUE self) {
2047
2011
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2048
2012
  frt_ir_undelete_all(ir);
2049
2013
  return self;
2050
2014
  }
2051
2015
 
2052
2016
  static VALUE
2053
- frb_get_doc_range(FrtIndexReader *ir, int pos, int len, int max)
2054
- {
2017
+ frb_get_doc_range(FrtIndexReader *ir, int pos, int len, int max) {
2018
+ int ex_code = 0;
2019
+ const char *msg = NULL;
2055
2020
  VALUE ary;
2056
2021
  int i;
2057
2022
  max = FRT_MIN(max, pos+len);
2058
2023
  len = max - pos;
2059
2024
  ary = rb_ary_new2(len);
2060
- for (i = 0; i < len; i++) {
2061
- rb_ary_store(ary, i, frb_get_lazy_doc(ir->get_lazy_doc(ir, i + pos)));
2025
+
2026
+ FRT_TRY
2027
+ for (i = 0; i < len; i++) {
2028
+ rb_ary_store(ary, i, frb_get_lazy_doc(ir->get_lazy_doc(ir, i + pos)));
2029
+ }
2030
+ FRT_XCATCHALL
2031
+ ex_code = xcontext.excode;
2032
+ msg = xcontext.msg;
2033
+ FRT_HANDLED();
2034
+ FRT_XENDTRY
2035
+
2036
+ if (ex_code && msg) {
2037
+ frb_raise(ex_code, msg);
2062
2038
  }
2039
+
2063
2040
  return ary;
2064
2041
  }
2065
2042
 
@@ -2087,7 +2064,24 @@ frb_ir_get_doc(int argc, VALUE *argv, VALUE self) {
2087
2064
  rb_raise(rb_eArgError, "index %ld is out of range [%d..%ld] for "
2088
2065
  "IndexReader#[]", pos, 0, max);
2089
2066
  }
2090
- return frb_get_lazy_doc(ir->get_lazy_doc(ir, pos));
2067
+
2068
+ int ex_code = 0;
2069
+ const char *msg = NULL;
2070
+ VALUE ld = Qnil;
2071
+
2072
+ FRT_TRY
2073
+ ld = frb_get_lazy_doc(ir->get_lazy_doc(ir, pos));
2074
+ FRT_XCATCHALL
2075
+ ex_code = xcontext.excode;
2076
+ msg = xcontext.msg;
2077
+ FRT_HANDLED();
2078
+ FRT_XENDTRY
2079
+
2080
+ if (ex_code && msg) {
2081
+ frb_raise(ex_code, msg);
2082
+ }
2083
+
2084
+ return ld;
2091
2085
  }
2092
2086
 
2093
2087
  /* check if idx is Range */
@@ -2118,8 +2112,7 @@ frb_ir_get_doc(int argc, VALUE *argv, VALUE self) {
2118
2112
  * index to search the latest documents added to the index.
2119
2113
  */
2120
2114
  static VALUE
2121
- frb_ir_is_latest(VALUE self)
2122
- {
2115
+ frb_ir_is_latest(VALUE self) {
2123
2116
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2124
2117
  return frt_ir_is_latest(ir) ? Qtrue : Qfalse;
2125
2118
  }
@@ -2132,8 +2125,7 @@ frb_ir_is_latest(VALUE self)
2132
2125
  * the index. Return nil if no such term_vector exists. See TermVector.
2133
2126
  */
2134
2127
  static VALUE
2135
- frb_ir_term_vector(VALUE self, VALUE rdoc_id, VALUE rfield)
2136
- {
2128
+ frb_ir_term_vector(VALUE self, VALUE rdoc_id, VALUE rfield) {
2137
2129
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2138
2130
  FrtTermVector *tv;
2139
2131
  VALUE rtv;
@@ -2142,15 +2134,13 @@ frb_ir_term_vector(VALUE self, VALUE rdoc_id, VALUE rfield)
2142
2134
  rtv = frb_get_tv(tv);
2143
2135
  frt_tv_destroy(tv);
2144
2136
  return rtv;
2145
- }
2146
- else {
2137
+ } else {
2147
2138
  return Qnil;
2148
2139
  }
2149
2140
  }
2150
2141
 
2151
2142
  static void
2152
- frb_add_each_tv(void *key, void *value, void *rtvs)
2153
- {
2143
+ frb_add_each_tv(void *key, void *value, void *rtvs) {
2154
2144
  rb_hash_aset((VALUE)rtvs, ID2SYM((ID)key), frb_get_tv(value));
2155
2145
  }
2156
2146
 
@@ -2163,8 +2153,7 @@ frb_add_each_tv(void *key, void *value, void *rtvs)
2163
2153
  * and they are referenced by field names (as symbols).
2164
2154
  */
2165
2155
  static VALUE
2166
- frb_ir_term_vectors(VALUE self, VALUE rdoc_id)
2167
- {
2156
+ frb_ir_term_vectors(VALUE self, VALUE rdoc_id) {
2168
2157
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2169
2158
  FrtHash *tvs = ir->term_vectors(ir, FIX2INT(rdoc_id));
2170
2159
  VALUE rtvs = rb_hash_new();
@@ -2182,8 +2171,7 @@ frb_ir_term_vectors(VALUE self, VALUE rdoc_id)
2182
2171
  * See TermDocEnum for more info.
2183
2172
  */
2184
2173
  static VALUE
2185
- frb_ir_term_docs(VALUE self)
2186
- {
2174
+ frb_ir_term_docs(VALUE self) {
2187
2175
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2188
2176
  return frb_get_tde(self, ir->term_docs(ir));
2189
2177
  }
@@ -2196,8 +2184,7 @@ frb_ir_term_docs(VALUE self)
2196
2184
  * term +term+ in the field +field+. See TermDocEnum for more info.
2197
2185
  */
2198
2186
  static VALUE
2199
- frb_ir_term_docs_for(VALUE self, VALUE rfield, VALUE rterm)
2200
- {
2187
+ frb_ir_term_docs_for(VALUE self, VALUE rfield, VALUE rterm) {
2201
2188
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2202
2189
  return frb_get_tde(self, ir_term_docs_for(ir,
2203
2190
  frb_field(rfield),
@@ -2213,8 +2200,7 @@ frb_ir_term_docs_for(VALUE self, VALUE rfield, VALUE rterm)
2213
2200
  * more info.
2214
2201
  */
2215
2202
  static VALUE
2216
- frb_ir_term_positions(VALUE self)
2217
- {
2203
+ frb_ir_term_positions(VALUE self) {
2218
2204
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2219
2205
  return frb_get_tde(self, ir->term_positions(ir));
2220
2206
  }
@@ -2228,8 +2214,7 @@ frb_ir_term_positions(VALUE self)
2228
2214
  * TermDocEnum for more info.
2229
2215
  */
2230
2216
  static VALUE
2231
- frb_ir_t_pos_for(VALUE self, VALUE rfield, VALUE rterm)
2232
- {
2217
+ frb_ir_t_pos_for(VALUE self, VALUE rfield, VALUE rterm) {
2233
2218
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2234
2219
  return frb_get_tde(self, frt_ir_term_positions_for(ir,
2235
2220
  frb_field(rfield),
@@ -2244,8 +2229,7 @@ frb_ir_t_pos_for(VALUE self, VALUE rfield, VALUE rterm)
2244
2229
  * field +field+.
2245
2230
  */
2246
2231
  static VALUE
2247
- frb_ir_doc_freq(VALUE self, VALUE rfield, VALUE rterm)
2248
- {
2232
+ frb_ir_doc_freq(VALUE self, VALUE rfield, VALUE rterm) {
2249
2233
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2250
2234
  return INT2FIX(frt_ir_doc_freq(ir,
2251
2235
  frb_field(rfield),
@@ -2260,8 +2244,7 @@ frb_ir_doc_freq(VALUE self, VALUE rfield, VALUE rterm)
2260
2244
  * terms in the field +field+ in the index.
2261
2245
  */
2262
2246
  static VALUE
2263
- frb_ir_terms(VALUE self, VALUE rfield)
2264
- {
2247
+ frb_ir_terms(VALUE self, VALUE rfield) {
2265
2248
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2266
2249
  return frb_get_te(self, frt_ir_terms(ir, frb_field(rfield)));
2267
2250
  }
@@ -2274,8 +2257,7 @@ frb_ir_terms(VALUE self, VALUE rfield)
2274
2257
  * at term +term+.
2275
2258
  */
2276
2259
  static VALUE
2277
- frb_ir_terms_from(VALUE self, VALUE rfield, VALUE rterm)
2278
- {
2260
+ frb_ir_terms_from(VALUE self, VALUE rfield, VALUE rterm) {
2279
2261
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2280
2262
  return frb_get_te(self, frt_ir_terms_from(ir,
2281
2263
  frb_field(rfield),
@@ -2289,8 +2271,7 @@ frb_ir_terms_from(VALUE self, VALUE rfield, VALUE rterm)
2289
2271
  * Same return a count of the number of terms in the field
2290
2272
  */
2291
2273
  static VALUE
2292
- frb_ir_term_count(VALUE self, VALUE rfield)
2293
- {
2274
+ frb_ir_term_count(VALUE self, VALUE rfield) {
2294
2275
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2295
2276
  FrtTermEnum *te = frt_ir_terms(ir, frb_field(rfield));
2296
2277
  int count = 0;
@@ -2311,8 +2292,7 @@ frb_ir_term_count(VALUE self, VALUE rfield)
2311
2292
  * gathered from the FieldInfos object.
2312
2293
  */
2313
2294
  static VALUE
2314
- frb_ir_fields(VALUE self)
2315
- {
2295
+ frb_ir_fields(VALUE self) {
2316
2296
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2317
2297
  FrtFieldInfos *fis = ir->fis;
2318
2298
  VALUE rfield_names = rb_ary_new();
@@ -2345,8 +2325,7 @@ static VALUE frb_ir_field_infos(VALUE self) {
2345
2325
  * of field names can also be gathered from the FieldInfos object.
2346
2326
  */
2347
2327
  static VALUE
2348
- frb_ir_tk_fields(VALUE self)
2349
- {
2328
+ frb_ir_tk_fields(VALUE self) {
2350
2329
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2351
2330
  FrtFieldInfos *fis = ir->fis;
2352
2331
  VALUE rfield_names = rb_ary_new();
@@ -2377,14 +2356,28 @@ static VALUE frb_ir_to_enum(VALUE self) {
2377
2356
  static VALUE frb_ir_each(VALUE self) {
2378
2357
  FrtIndexReader *ir = (FrtIndexReader *)DATA_PTR(self);
2379
2358
  if (rb_block_given_p()) {
2359
+ int ex_code = 0;
2360
+ const char *msg = NULL;
2380
2361
  long i;
2381
2362
  long max_doc = ir->max_doc(ir);
2382
2363
  VALUE rld;
2383
- for (i = 0; i < max_doc; i++) {
2384
- if (ir->is_deleted(ir, i)) continue;
2385
- rld = frb_get_lazy_doc(ir->get_lazy_doc(ir, i));
2386
- rb_yield(rld);
2364
+
2365
+ FRT_TRY
2366
+ for (i = 0; i < max_doc; i++) {
2367
+ if (ir->is_deleted(ir, i)) continue;
2368
+ rld = frb_get_lazy_doc(ir->get_lazy_doc(ir, i));
2369
+ rb_yield(rld);
2370
+ }
2371
+ FRT_XCATCHALL
2372
+ ex_code = xcontext.excode;
2373
+ msg = xcontext.msg;
2374
+ FRT_HANDLED();
2375
+ FRT_XENDTRY
2376
+
2377
+ if (ex_code && msg) {
2378
+ frb_raise(ex_code, msg);
2387
2379
  }
2380
+
2388
2381
  return self;
2389
2382
  } else {
2390
2383
  return frb_ir_to_enum(self);