isomorfeus-ferret 0.17.2 → 0.17.3

Sign up to get free protection for your applications and to get access to all the features.
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);