isomorfeus-ferret 0.13.8 → 0.13.11

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/ext/isomorfeus_ferret_ext/bm_store.c +3 -3
  3. data/ext/isomorfeus_ferret_ext/bzlib.h +83 -82
  4. data/ext/isomorfeus_ferret_ext/frb_index.c +17 -23
  5. data/ext/isomorfeus_ferret_ext/frb_search.c +1 -4
  6. data/ext/isomorfeus_ferret_ext/frb_store.c +32 -34
  7. data/ext/isomorfeus_ferret_ext/frt_analysis.c +4 -4
  8. data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
  9. data/ext/isomorfeus_ferret_ext/frt_bitvector.c +1 -1
  10. data/ext/isomorfeus_ferret_ext/frt_bitvector.h +1 -1
  11. data/ext/isomorfeus_ferret_ext/frt_compound_io.c +41 -66
  12. data/ext/isomorfeus_ferret_ext/frt_config.h +8 -0
  13. data/ext/isomorfeus_ferret_ext/frt_except.c +1 -0
  14. data/ext/isomorfeus_ferret_ext/frt_filter.c +2 -4
  15. data/ext/isomorfeus_ferret_ext/frt_fs_store.c +24 -19
  16. data/ext/isomorfeus_ferret_ext/frt_global.c +6 -4
  17. data/ext/isomorfeus_ferret_ext/frt_global.h +1 -1
  18. data/ext/isomorfeus_ferret_ext/frt_hash.c +40 -48
  19. data/ext/isomorfeus_ferret_ext/frt_hash.h +14 -16
  20. data/ext/isomorfeus_ferret_ext/frt_hashset.c +5 -5
  21. data/ext/isomorfeus_ferret_ext/frt_ind.c +2 -3
  22. data/ext/isomorfeus_ferret_ext/frt_index.c +148 -219
  23. data/ext/isomorfeus_ferret_ext/frt_index.h +31 -31
  24. data/ext/isomorfeus_ferret_ext/frt_lang.c +1 -4
  25. data/ext/isomorfeus_ferret_ext/frt_multimapper.c +8 -9
  26. data/ext/isomorfeus_ferret_ext/frt_multimapper.h +1 -1
  27. data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +6 -6
  28. data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -3
  29. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +1743 -1742
  30. data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +1 -2
  31. data/ext/isomorfeus_ferret_ext/frt_q_span.c +11 -10
  32. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +24 -40
  33. data/ext/isomorfeus_ferret_ext/frt_search.c +29 -28
  34. data/ext/isomorfeus_ferret_ext/frt_search.h +18 -19
  35. data/ext/isomorfeus_ferret_ext/frt_store.c +47 -40
  36. data/ext/isomorfeus_ferret_ext/frt_store.h +46 -48
  37. data/ext/isomorfeus_ferret_ext/frt_threading.h +12 -5
  38. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +4 -3
  39. data/ext/isomorfeus_ferret_ext/test_1710.c +1 -2
  40. data/ext/isomorfeus_ferret_ext/test_compound_io.c +8 -8
  41. data/ext/isomorfeus_ferret_ext/test_fields.c +7 -7
  42. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +1 -1
  43. data/ext/isomorfeus_ferret_ext/test_filter.c +4 -3
  44. data/ext/isomorfeus_ferret_ext/test_fs_store.c +1 -1
  45. data/ext/isomorfeus_ferret_ext/test_highlighter.c +3 -1
  46. data/ext/isomorfeus_ferret_ext/test_index.c +61 -61
  47. data/ext/isomorfeus_ferret_ext/test_q_const_score.c +2 -1
  48. data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -2
  49. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +3 -1
  50. data/ext/isomorfeus_ferret_ext/test_q_span.c +8 -1
  51. data/ext/isomorfeus_ferret_ext/test_ram_store.c +4 -4
  52. data/ext/isomorfeus_ferret_ext/test_search.c +9 -4
  53. data/ext/isomorfeus_ferret_ext/test_segments.c +4 -3
  54. data/ext/isomorfeus_ferret_ext/test_sort.c +17 -9
  55. data/ext/isomorfeus_ferret_ext/test_term.c +4 -2
  56. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +2 -2
  57. data/ext/isomorfeus_ferret_ext/test_threading.c +5 -4
  58. data/lib/isomorfeus/ferret/index/index.rb +8 -3
  59. data/lib/isomorfeus/ferret/version.rb +1 -1
  60. metadata +16 -2
@@ -539,7 +539,7 @@ static void prep_test_1seg_index(FrtStore *store, FrtDocument **docs,
539
539
 
540
540
  frt_dw_close(dw);
541
541
  frt_iw_close(iw);
542
- frt_si_deref(si);
542
+ frt_si_close(si);
543
543
  }
544
544
 
545
545
  /****************************************************************************
@@ -725,7 +725,7 @@ static void test_segment_tde_deleted_docs(TestCase *tc, void *data)
725
725
  frt_is_close(prx_in);
726
726
  frt_tir_close(tir);
727
727
  frt_sfi_close(sfi);
728
- frt_si_deref(si);
728
+ frt_si_close(si);
729
729
  }
730
730
 
731
731
  /****************************************************************************
@@ -984,7 +984,7 @@ static void test_create_with_reader(TestCase *tc, void *data)
984
984
  frt_ir_close(ir);
985
985
  frt_ir_close(ir2);
986
986
  store->clear_all(store);
987
- frt_store_deref(store);
987
+ frt_store_close(store);
988
988
  frt_doc_destroy(doc);
989
989
  }
990
990
 
@@ -998,7 +998,7 @@ static void test_simulated_crashed_writer(TestCase *tc, void *data)
998
998
  {
999
999
  int i;
1000
1000
  long gen;
1001
- off_t length;
1001
+ frt_off_t length;
1002
1002
  FrtStore *store = (FrtStore *)data;
1003
1003
  FrtIndexWriter *iw;
1004
1004
  FrtIndexReader *ir;
@@ -1059,7 +1059,7 @@ static void test_simulated_corrupt_index1(TestCase *tc, void *data)
1059
1059
  {
1060
1060
  int i;
1061
1061
  long gen;
1062
- off_t length;
1062
+ frt_off_t length;
1063
1063
  FrtStore *store = (FrtStore *)data;
1064
1064
  FrtIndexWriter *iw;
1065
1065
  FrtIndexReader *ir;
@@ -1312,7 +1312,7 @@ static void reader_test_env_destroy(ReaderTestEnvironment *rte)
1312
1312
  {
1313
1313
  int i;
1314
1314
  for (i = 0; i < rte->store_cnt; i++) {
1315
- frt_store_deref(rte->stores[i]);
1315
+ frt_store_close(rte->stores[i]);
1316
1316
  }
1317
1317
  free(rte->stores);
1318
1318
  free(rte);
@@ -1328,6 +1328,7 @@ static FrtIndexReader *reader_test_env_ir_open(ReaderTestEnvironment *rte)
1328
1328
  int i;
1329
1329
  for (i = 0; i < rte->store_cnt; i++) {
1330
1330
  sub_readers[i] = frt_ir_open(NULL, rte->stores[i]);
1331
+ FRT_DEREF(sub_readers[i]);
1331
1332
  }
1332
1333
  return (frt_mr_open(NULL, sub_readers, rte->store_cnt));
1333
1334
  }
@@ -1413,7 +1414,7 @@ static ReaderTestEnvironment *reader_test_env_new(int type)
1413
1414
  frt_iw_close(iw);
1414
1415
  for (i = 0; i < rte->store_cnt; i++) {
1415
1416
  frt_ir_close(readers[i]);
1416
- frt_store_deref(rte->stores[i]);
1417
+ frt_store_close(rte->stores[i]);
1417
1418
  }
1418
1419
  free(readers);
1419
1420
  rte->stores[0] = store;
@@ -1473,7 +1474,6 @@ static void test_ir_open_empty_index(TestCase *tc, void *data)
1473
1474
  static void test_ir_basic_ops(TestCase *tc, void *data)
1474
1475
  {
1475
1476
  FrtIndexReader *ir = (FrtIndexReader *)data;
1476
-
1477
1477
  Aiequal(IR_TEST_DOC_CNT, ir->num_docs(ir));
1478
1478
  Aiequal(IR_TEST_DOC_CNT, ir->max_doc(ir));
1479
1479
 
@@ -1684,55 +1684,55 @@ static void test_ir_term_doc_enum(TestCase *tc, void *data)
1684
1684
  static void test_ir_term_vectors(TestCase *tc, void *data)
1685
1685
  {
1686
1686
  FrtIndexReader *ir = (FrtIndexReader *)data;
1687
-
1688
- FrtTermVector *tv = ir->term_vector(ir, 3, rb_intern("body"));
1689
1687
  FrtHash *tvs;
1690
-
1691
- Asequal("body", rb_id2name(tv->field));
1692
- Aiequal(4, tv->term_cnt);
1693
- Asequal("word1", tv->terms[0].text);
1694
- Asequal("word2", tv->terms[1].text);
1695
- Asequal("word3", tv->terms[2].text);
1696
- Asequal("word4", tv->terms[3].text);
1697
- Aiequal(3, tv->terms[0].freq);
1698
- Aiequal(2, tv->terms[0].positions[0]);
1699
- Aiequal(4, tv->terms[0].positions[1]);
1700
- Aiequal(7, tv->terms[0].positions[2]);
1701
- Aiequal(12, tv->offsets[tv->terms[0].positions[0]].start);
1702
- Aiequal(17, tv->offsets[tv->terms[0].positions[0]].end);
1703
- Aiequal(24, tv->offsets[tv->terms[0].positions[1]].start);
1704
- Aiequal(29, tv->offsets[tv->terms[0].positions[1]].end);
1705
- Aiequal(42, tv->offsets[tv->terms[0].positions[2]].start);
1706
- Aiequal(47, tv->offsets[tv->terms[0].positions[2]].end);
1707
-
1708
- Aiequal(1, tv->terms[1].freq);
1709
- Aiequal(3, tv->terms[1].positions[0]);
1710
- Aiequal(18, tv->offsets[tv->terms[1].positions[0]].start);
1711
- Aiequal(23, tv->offsets[tv->terms[1].positions[0]].end);
1712
-
1713
- Aiequal(4, tv->terms[2].freq);
1714
- Aiequal(0, tv->terms[2].positions[0]);
1715
- Aiequal(5, tv->terms[2].positions[1]);
1716
- Aiequal(8, tv->terms[2].positions[2]);
1717
- Aiequal(9, tv->terms[2].positions[3]);
1718
- Aiequal(0, tv->offsets[tv->terms[2].positions[0]].start);
1719
- Aiequal(5, tv->offsets[tv->terms[2].positions[0]].end);
1720
- Aiequal(30, tv->offsets[tv->terms[2].positions[1]].start);
1721
- Aiequal(35, tv->offsets[tv->terms[2].positions[1]].end);
1722
- Aiequal(48, tv->offsets[tv->terms[2].positions[2]].start);
1723
- Aiequal(53, tv->offsets[tv->terms[2].positions[2]].end);
1724
- Aiequal(54, tv->offsets[tv->terms[2].positions[3]].start);
1725
- Aiequal(59, tv->offsets[tv->terms[2].positions[3]].end);
1726
-
1727
- Aiequal(2, tv->terms[3].freq);
1728
- Aiequal(1, tv->terms[3].positions[0]);
1729
- Aiequal(6, tv->terms[3].positions[1]);
1730
- Aiequal(6, tv->offsets[tv->terms[3].positions[0]].start);
1731
- Aiequal(11, tv->offsets[tv->terms[3].positions[0]].end);
1732
- Aiequal(36, tv->offsets[tv->terms[3].positions[1]].start);
1733
- Aiequal(41, tv->offsets[tv->terms[3].positions[1]].end);
1734
-
1735
- frt_tv_destroy(tv);
1688
+ FrtTermVector *tv = ir->term_vector(ir, 3, rb_intern("body"));
1689
+ if (Apnotnull(tv)) {
1690
+ Asequal("body", rb_id2name(tv->field));
1691
+ Aiequal(4, tv->term_cnt);
1692
+ Asequal("word1", tv->terms[0].text);
1693
+ Asequal("word2", tv->terms[1].text);
1694
+ Asequal("word3", tv->terms[2].text);
1695
+ Asequal("word4", tv->terms[3].text);
1696
+ Aiequal(3, tv->terms[0].freq);
1697
+ Aiequal(2, tv->terms[0].positions[0]);
1698
+ Aiequal(4, tv->terms[0].positions[1]);
1699
+ Aiequal(7, tv->terms[0].positions[2]);
1700
+ Aiequal(12, tv->offsets[tv->terms[0].positions[0]].start);
1701
+ Aiequal(17, tv->offsets[tv->terms[0].positions[0]].end);
1702
+ Aiequal(24, tv->offsets[tv->terms[0].positions[1]].start);
1703
+ Aiequal(29, tv->offsets[tv->terms[0].positions[1]].end);
1704
+ Aiequal(42, tv->offsets[tv->terms[0].positions[2]].start);
1705
+ Aiequal(47, tv->offsets[tv->terms[0].positions[2]].end);
1706
+
1707
+ Aiequal(1, tv->terms[1].freq);
1708
+ Aiequal(3, tv->terms[1].positions[0]);
1709
+ Aiequal(18, tv->offsets[tv->terms[1].positions[0]].start);
1710
+ Aiequal(23, tv->offsets[tv->terms[1].positions[0]].end);
1711
+
1712
+ Aiequal(4, tv->terms[2].freq);
1713
+ Aiequal(0, tv->terms[2].positions[0]);
1714
+ Aiequal(5, tv->terms[2].positions[1]);
1715
+ Aiequal(8, tv->terms[2].positions[2]);
1716
+ Aiequal(9, tv->terms[2].positions[3]);
1717
+ Aiequal(0, tv->offsets[tv->terms[2].positions[0]].start);
1718
+ Aiequal(5, tv->offsets[tv->terms[2].positions[0]].end);
1719
+ Aiequal(30, tv->offsets[tv->terms[2].positions[1]].start);
1720
+ Aiequal(35, tv->offsets[tv->terms[2].positions[1]].end);
1721
+ Aiequal(48, tv->offsets[tv->terms[2].positions[2]].start);
1722
+ Aiequal(53, tv->offsets[tv->terms[2].positions[2]].end);
1723
+ Aiequal(54, tv->offsets[tv->terms[2].positions[3]].start);
1724
+ Aiequal(59, tv->offsets[tv->terms[2].positions[3]].end);
1725
+
1726
+ Aiequal(2, tv->terms[3].freq);
1727
+ Aiequal(1, tv->terms[3].positions[0]);
1728
+ Aiequal(6, tv->terms[3].positions[1]);
1729
+ Aiequal(6, tv->offsets[tv->terms[3].positions[0]].start);
1730
+ Aiequal(11, tv->offsets[tv->terms[3].positions[0]].end);
1731
+ Aiequal(36, tv->offsets[tv->terms[3].positions[1]].start);
1732
+ Aiequal(41, tv->offsets[tv->terms[3].positions[1]].end);
1733
+
1734
+ frt_tv_destroy(tv);
1735
+ }
1736
1736
 
1737
1737
  tvs = ir->term_vectors(ir, 3);
1738
1738
  Aiequal(3, tvs->size);
@@ -2103,7 +2103,7 @@ static void test_ir_delete(TestCase *tc, void *data)
2103
2103
  frt_ir_close(ir);
2104
2104
  frt_ir_close(ir2);
2105
2105
  reader_test_env_destroy(rte);
2106
- frt_store_deref(store);
2106
+ frt_store_close(store);
2107
2107
  }
2108
2108
 
2109
2109
  static void test_ir_read_while_optimizing(TestCase *tc, void *data)
@@ -2167,7 +2167,7 @@ static void test_ir_multivalue_fields(TestCase *tc, void *data)
2167
2167
  Aiequal(true, fi_store_offsets(fi));
2168
2168
  Aiequal(true, fi_store_positions(fi));
2169
2169
 
2170
- frt_doc_destroy(doc);
2170
+ frt_doc_destroy(doc);
2171
2171
  frt_iw_close(iw);
2172
2172
 
2173
2173
  ir = frt_ir_open(NULL, store);
@@ -2193,7 +2193,7 @@ static void test_ir_multivalue_fields(TestCase *tc, void *data)
2193
2193
  Aiequal(1, df->size);
2194
2194
  Asequal(author_text, df->data[0]);
2195
2195
 
2196
- frt_doc_destroy(doc);
2196
+ frt_doc_destroy(doc);
2197
2197
  frt_ir_delete_doc(ir, 0);
2198
2198
  frt_ir_close(ir);
2199
2199
  }
@@ -2324,10 +2324,10 @@ TestSuite *ts_index(TestSuite *suite)
2324
2324
  fs_store = frt_open_fs_store(TEST_DIR);
2325
2325
  tst_run_test_with_name(suite, test_ir_read_while_optimizing, fs_store, "test_ir_read_while_optimizing_on_disk");
2326
2326
  fs_store->clear_all(fs_store);
2327
- frt_store_deref(fs_store);
2327
+ frt_store_close(fs_store);
2328
2328
 
2329
2329
  tst_run_test(suite, test_ir_multivalue_fields, store);
2330
2330
 
2331
- frt_store_deref(store);
2331
+ frt_store_close(store);
2332
2332
  return suite;
2333
2333
  }
@@ -80,7 +80,8 @@ TestSuite *ts_q_const_score(TestSuite *suite)
80
80
  tst_run_test(suite, test_const_score_query, (void *)searcher);
81
81
  tst_run_test(suite, test_const_score_query_hash, NULL);
82
82
 
83
- frt_store_deref(store);
84
83
  frt_searcher_close(searcher);
84
+ frt_ir_close(ir);
85
+ frt_store_close(store);
85
86
  return suite;
86
87
  }
@@ -57,7 +57,8 @@ TestSuite *ts_q_filtered(TestSuite *suite)
57
57
 
58
58
  tst_run_test(suite, test_filtered_query, (void *)searcher);
59
59
 
60
- frt_store_deref(store);
61
- searcher->close(searcher);
60
+ frt_searcher_close(searcher);
61
+ frt_ir_close(ir);
62
+ frt_store_close(store);
62
63
  return suite;
63
64
  }
@@ -110,6 +110,7 @@ static void test_fuzziness(TestCase *tc, void *data)
110
110
  frt_td_destroy(top_docs);
111
111
 
112
112
  frt_searcher_close(sea);
113
+ frt_ir_close(ir);
113
114
  }
114
115
 
115
116
  static void test_fuzziness_long(TestCase *tc, void *data)
@@ -165,6 +166,7 @@ static void test_fuzziness_long(TestCase *tc, void *data)
165
166
  frt_td_destroy(top_docs);
166
167
 
167
168
  frt_searcher_close(sea);
169
+ frt_ir_close(ir);
168
170
  }
169
171
 
170
172
  /**
@@ -239,6 +241,6 @@ TestSuite *ts_q_fuzzy(TestSuite *suite)
239
241
  tst_run_test(suite, test_fuzzy_query_hash, (void *)store);
240
242
  tst_run_test(suite, test_fuzzy_query_to_s, (void *)store);
241
243
 
242
- frt_store_deref(store);
244
+ frt_store_close(store);
243
245
  return suite;
244
246
  }
@@ -100,6 +100,7 @@ static void test_span_term(TestCase *tc, void *data)
100
100
  frt_q_deref(tq);
101
101
 
102
102
  frt_searcher_close(sea);
103
+ frt_ir_close(ir);
103
104
  }
104
105
 
105
106
  static void test_span_term_hash(TestCase *tc, void *data)
@@ -169,6 +170,7 @@ static void test_span_multi_term(TestCase *tc, void *data)
169
170
  frt_q_deref(mtq);
170
171
 
171
172
  frt_searcher_close(sea);
173
+ frt_ir_close(ir);
172
174
  }
173
175
 
174
176
  static void test_span_multi_term_hash(TestCase *tc, void *data)
@@ -230,6 +232,7 @@ static void test_span_prefix(TestCase *tc, void *data)
230
232
  frt_q_deref(prq);
231
233
 
232
234
  frt_searcher_close(sea);
235
+ frt_ir_close(ir);
233
236
  }
234
237
 
235
238
  static void test_span_prefix_hash(TestCase *tc, void *data)
@@ -279,6 +282,7 @@ static void test_span_first(TestCase *tc, void *data)
279
282
  frt_q_deref(q);
280
283
 
281
284
  frt_searcher_close(sea);
285
+ frt_ir_close(ir);
282
286
  }
283
287
 
284
288
  static void test_span_first_hash(TestCase *tc, void *data)
@@ -327,6 +331,7 @@ static void test_span_or(TestCase *tc, void *data)
327
331
  TEST_SE(q, ir, "SpanOrEnum(span_or[span_terms(field:flip),span_terms(field:flop)])@START");
328
332
  frt_q_deref(q);
329
333
  frt_searcher_close(sea);
334
+ frt_ir_close(ir);
330
335
  }
331
336
 
332
337
  static void test_span_or_hash(TestCase *tc, void *data)
@@ -407,6 +412,7 @@ static void test_span_near(TestCase *tc, void *data)
407
412
  frt_q_deref(q);
408
413
 
409
414
  frt_searcher_close(sea);
415
+ frt_ir_close(ir);
410
416
  }
411
417
 
412
418
  static void test_span_near_hash(TestCase *tc, void *data)
@@ -514,6 +520,7 @@ static void test_span_not(TestCase *tc, void *data)
514
520
  frt_q_deref(q);
515
521
 
516
522
  frt_searcher_close(sea);
523
+ frt_ir_close(ir);
517
524
  }
518
525
 
519
526
  static void test_span_not_hash(TestCase *tc, void *data)
@@ -573,6 +580,6 @@ TestSuite *ts_q_span(TestSuite *suite)
573
580
  tst_run_test(suite, test_span_near_hash, NULL);
574
581
  tst_run_test(suite, test_span_not, (void *)store);
575
582
  tst_run_test(suite, test_span_not_hash, NULL);
576
- frt_store_deref(store);
583
+ frt_store_close(store);
577
584
  return suite;
578
585
  }
@@ -42,7 +42,7 @@ void test_write_to(TestCase *tc, void *data)
42
42
  frt_is_close(istream);
43
43
 
44
44
  Aiequal(17021, fs_store->length(fs_store, "_rw_funny_string.cfs"));
45
- frt_store_deref(ram_store);
45
+ frt_store_close(ram_store);
46
46
  ram_store = frt_open_ram_store_and_copy(NULL, fs_store, false);
47
47
 
48
48
  istream = ram_store->open_input(ram_store, "_rw_funny_string.cfs");
@@ -54,8 +54,8 @@ void test_write_to(TestCase *tc, void *data)
54
54
  Aiequal(17021, ram_store->length(ram_store, "_rw_funny_string.cfs"));
55
55
 
56
56
  fs_store->clear_all(fs_store);
57
- frt_store_deref(fs_store);
58
- frt_store_deref(ram_store);
57
+ frt_store_close(fs_store);
58
+ frt_store_close(ram_store);
59
59
  }
60
60
 
61
61
  /**
@@ -71,7 +71,7 @@ TestSuite *ts_ram_store(TestSuite *suite)
71
71
 
72
72
  tst_run_test(suite, test_write_to, NULL);
73
73
 
74
- frt_store_deref(store);
74
+ frt_store_close(store);
75
75
 
76
76
  return suite;
77
77
  }
@@ -1688,8 +1688,9 @@ TestSuite *ts_search(TestSuite *suite)
1688
1688
 
1689
1689
  tst_run_test(suite, test_search_unscored, (void *)searcher);
1690
1690
 
1691
- frt_store_deref(store);
1692
1691
  frt_searcher_close(searcher);
1692
+ frt_ir_close(ir);
1693
+ frt_store_close(store);
1693
1694
  return suite;
1694
1695
  }
1695
1696
 
@@ -1845,7 +1846,9 @@ TestSuite *ts_multi_search(TestSuite *suite)
1845
1846
  searchers = FRT_ALLOC_N(FrtSearcher *, 2);
1846
1847
  searchers[0] = frt_isea_new(ir0);
1847
1848
  searchers[1] = frt_isea_new(ir1);
1848
- searcher = frt_msea_new(searchers, 2, true);
1849
+ FRT_DEREF(searchers[0]);
1850
+ FRT_DEREF(searchers[1]);
1851
+ searcher = frt_msea_new(searchers, 2);
1849
1852
 
1850
1853
  tst_run_test(suite, test_get_doc, (void *)searcher);
1851
1854
 
@@ -1862,8 +1865,10 @@ TestSuite *ts_multi_search(TestSuite *suite)
1862
1865
 
1863
1866
  tst_run_test(suite, test_query_combine, NULL);
1864
1867
 
1865
- frt_store_deref(store0);
1866
- frt_store_deref(store1);
1867
1868
  frt_searcher_close(searcher);
1869
+ frt_ir_close(ir0);
1870
+ frt_ir_close(ir1);
1871
+ frt_store_close(store0);
1872
+ frt_store_close(store1);
1868
1873
  return suite;
1869
1874
  }
@@ -54,6 +54,7 @@ static void test_si(TestCase *tc, void *data)
54
54
  si->name[1] = '2';
55
55
  si->doc_cnt += 2;
56
56
  si->store = store;
57
+ FRT_REF(store);
57
58
  Asi_has_vals(si, "_2", 12, store);
58
59
  Assert(!frt_si_has_separate_norms(si), "doesn't use compound file/have norms");
59
60
  si->use_compound_file = true;
@@ -65,8 +66,8 @@ static void test_si(TestCase *tc, void *data)
65
66
  Assert(!frt_si_has_separate_norms(si), "has norms in compound file");
66
67
  frt_si_advance_norm_gen(si, 3);
67
68
  Assert(frt_si_has_separate_norms(si), "has seperate norms");
68
- frt_si_deref(si);
69
- frt_store_deref(store);
69
+ frt_si_close(si);
70
+ frt_store_close(store);
70
71
  }
71
72
 
72
73
  /***************************************************************************
@@ -163,6 +164,6 @@ TestSuite *ts_segments(TestSuite *suite)
163
164
  tst_run_test(suite, test_sis_add_del, store);
164
165
  tst_run_test(suite, test_sis_rw, store);
165
166
 
166
- frt_store_deref(store);
167
+ frt_store_close(store);
167
168
  return suite;
168
169
  }
@@ -292,6 +292,8 @@ TestSuite *ts_sort(TestSuite *suite)
292
292
  {
293
293
  FrtSearcher *sea, **searchers;
294
294
  FrtStore *store = frt_open_ram_store(NULL), *fs_store;
295
+ FrtIndexReader *ir0;
296
+ FrtIndexReader *ir1;
295
297
 
296
298
  search = rb_intern("search");
297
299
  string = rb_intern("string");
@@ -305,11 +307,13 @@ TestSuite *ts_sort(TestSuite *suite)
305
307
  tst_run_test(suite, test_sort_field_to_s, NULL);
306
308
  tst_run_test(suite, test_sort_to_s, NULL);
307
309
 
308
- sea = frt_isea_new(frt_ir_open(NULL, store));
310
+ ir0 = frt_ir_open(NULL, store);
311
+ sea = frt_isea_new(ir0);
309
312
 
310
313
  tst_run_test(suite, test_sorts, (void *)sea);
311
314
 
312
315
  frt_searcher_close(sea);
316
+ frt_ir_close(ir0);
313
317
 
314
318
  do_byte_test = false;
315
319
 
@@ -321,16 +325,20 @@ TestSuite *ts_sort(TestSuite *suite)
321
325
  sort_multi_test_setup(store, fs_store);
322
326
 
323
327
  searchers = FRT_ALLOC_N(FrtSearcher *, 2);
324
-
325
- searchers[0] = frt_isea_new(frt_ir_open(NULL, store));
326
- searchers[1] = frt_isea_new(frt_ir_open(NULL, fs_store));
327
-
328
- sea = frt_msea_new(searchers, 2, true);
328
+ ir0 = frt_ir_open(NULL, store);
329
+ ir1 = frt_ir_open(NULL, fs_store);
330
+ searchers[0] = frt_isea_new(ir0);
331
+ searchers[1] = frt_isea_new(ir1);
332
+ FRT_DEREF(searchers[0]);
333
+ FRT_DEREF(searchers[1]);
334
+ sea = frt_msea_new(searchers, 2);
329
335
  tst_run_test(suite, test_sorts, (void *)sea);
330
- frt_searcher_close(sea);
331
336
 
332
- frt_store_deref(store);
333
- frt_store_deref(fs_store);
337
+ frt_searcher_close(sea);
338
+ frt_ir_close(ir0);
339
+ frt_ir_close(ir1);
340
+ frt_store_close(store);
341
+ frt_store_close(fs_store);
334
342
 
335
343
  return suite;
336
344
  }
@@ -163,7 +163,9 @@ void test_segment_term_enum(TestCase *tc, void *data)
163
163
  add_multi_field_terms(store);
164
164
 
165
165
  sfi = frt_sfi_open(store, "_0");
166
- te = frt_ste_new(store->open_input(store, "_0.tis"), sfi);
166
+ FrtInStream *is = store->open_input(store, "_0.tis");
167
+ FRT_DEREF(is);
168
+ te = frt_ste_new(is, sfi);
167
169
  te->set_field(te, 0);
168
170
  for (i = 0; i < 40; i++) {
169
171
  int doc_count = i % 20 + 1;
@@ -347,7 +349,7 @@ TestSuite *ts_term(TestSuite *suite)
347
349
  tst_run_test(suite, test_segment_term_enum, store);
348
350
  tst_run_test(suite, test_term_infos_reader, store);
349
351
 
350
- frt_store_deref(store);
352
+ frt_store_close(store);
351
353
 
352
354
  return suite;
353
355
  }
@@ -220,7 +220,7 @@ static void test_tv_single_doc(TestCase *tc, void *data)
220
220
 
221
221
  frt_fr_close(fr);
222
222
  frt_fis_deref(fis);
223
- frt_store_deref(store);
223
+ frt_store_close(store);
224
224
  }
225
225
 
226
226
  static void test_tv_multi_doc(TestCase *tc, void *data)
@@ -352,7 +352,7 @@ static void test_tv_multi_doc(TestCase *tc, void *data)
352
352
  frt_h_destroy(tvs);
353
353
  frt_fr_close(fr);
354
354
  frt_fis_deref(fis);
355
- frt_store_deref(store);
355
+ frt_store_close(store);
356
356
  }
357
357
 
358
358
 
@@ -170,18 +170,19 @@ TestSuite *ts_threading(TestSuite *suite)
170
170
 
171
171
  suite = ADD_SUITE(suite);
172
172
 
173
- frt_store_deref(store);
173
+ frt_store_close(store);
174
174
  frt_a_deref(a);
175
175
 
176
176
  tst_run_test(suite, test_number_to_str, NULL);
177
- tst_run_test(suite, test_threading_test, index);
178
- tst_run_test(suite, test_threading, index);
177
+ // with pthreads these won't work if frt_micro_sleep depends on ruby threads
178
+ //tst_run_test(suite, test_threading_test, index);
179
+ //tst_run_test(suite, test_threading, index);
179
180
 
180
181
  frt_index_destroy(index);
181
182
 
182
183
  store = frt_open_fs_store("./test/testdir/store");
183
184
  store->clear_all(store);
184
- frt_store_deref(store);
185
+ frt_store_close(store);
185
186
 
186
187
  return suite;
187
188
  }
@@ -123,7 +123,10 @@ module Isomorfeus
123
123
  @dir = RAMDirectory.new
124
124
  end
125
125
 
126
- @dir.extend(MonitorMixin) unless @dir.kind_of? MonitorMixin
126
+ unless @dir.kind_of? MonitorMixin
127
+ @dir.extend(MonitorMixin)
128
+ @dir.new_cond
129
+ end
127
130
  options[:dir] = @dir
128
131
  options[:lock_retry_time]||= 2
129
132
  @options = options
@@ -796,7 +799,10 @@ module Isomorfeus
796
799
  elsif directory.is_a?(Ferret::Store::Directory)
797
800
  @dir = directory
798
801
  end
799
- @dir.extend(MonitorMixin) unless @dir.kind_of? MonitorMixin
802
+ unless @dir.kind_of? MonitorMixin
803
+ @dir.extend(MonitorMixin)
804
+ @dir.new_cond
805
+ end
800
806
  @options[:dir] = @dir
801
807
  @options[:create_if_missing] = true
802
808
  add_indexes([old_dir])
@@ -967,4 +973,3 @@ module Isomorfeus
967
973
  I = Index::Index
968
974
  end
969
975
  end
970
-
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Ferret
3
- VERSION = '0.13.8'
3
+ VERSION = '0.13.11'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-ferret
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.8
4
+ version: 0.13.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-29 00:00:00.000000000 Z
11
+ date: 2022-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oj
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement