ferret 0.10.8 → 0.10.9

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.
data/ext/index.c CHANGED
@@ -4809,7 +4809,7 @@ static int sm_append_postings(SegmentMerger *sm, SegmentMergeInfo **matches,
4809
4809
  }
4810
4810
 
4811
4811
  /* copy position deltas */
4812
- is2os_copy_bytes(STDE(tde)->prx_in, sm->prx_out, freq);
4812
+ is2os_copy_vints(STDE(tde)->prx_in, sm->prx_out, freq);
4813
4813
  }
4814
4814
  }
4815
4815
  return df;
data/ext/q_parser.c CHANGED
@@ -349,18 +349,18 @@ union yyalloc
349
349
  #endif
350
350
 
351
351
  /* YYFINAL -- State number of the termination state. */
352
- #define YYFINAL 38
352
+ #define YYFINAL 39
353
353
  /* YYLAST -- Last index in YYTABLE. */
354
- #define YYLAST 98
354
+ #define YYLAST 126
355
355
 
356
356
  /* YYNTOKENS -- Number of terminals. */
357
357
  #define YYNTOKENS 26
358
358
  /* YYNNTS -- Number of nonterminals. */
359
359
  #define YYNNTS 16
360
360
  /* YYNRULES -- Number of rules. */
361
- #define YYNRULES 50
361
+ #define YYNRULES 51
362
362
  /* YYNRULES -- Number of states. */
363
- #define YYNSTATES 79
363
+ #define YYNSTATES 80
364
364
 
365
365
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
366
366
  #define YYUNDEFTOK 2
@@ -407,11 +407,11 @@ static const unsigned char yytranslate[] =
407
407
  static const unsigned char yyprhs[] =
408
408
  {
409
409
  0, 0, 3, 4, 6, 8, 12, 16, 19, 22,
410
- 25, 27, 29, 33, 35, 39, 41, 43, 45, 47,
411
- 49, 53, 56, 58, 59, 64, 65, 66, 72, 74,
412
- 78, 82, 88, 91, 96, 98, 101, 104, 108, 112,
413
- 117, 122, 127, 132, 136, 140, 144, 148, 151, 155,
414
- 159
410
+ 25, 27, 29, 33, 35, 38, 42, 44, 46, 48,
411
+ 50, 52, 56, 59, 61, 62, 67, 68, 69, 75,
412
+ 77, 81, 85, 91, 94, 99, 101, 104, 107, 111,
413
+ 115, 120, 125, 130, 135, 139, 143, 147, 151, 154,
414
+ 158, 162
415
415
  };
416
416
 
417
417
  /* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -420,31 +420,31 @@ static const yysigned_char yyrhs[] =
420
420
  27, 0, -1, -1, 28, -1, 29, -1, 28, 7,
421
421
  29, -1, 28, 6, 29, -1, 28, 29, -1, 9,
422
422
  30, -1, 8, 30, -1, 30, -1, 31, -1, 31,
423
- 12, 3, -1, 32, -1, 13, 28, 14, -1, 34,
424
- -1, 39, -1, 41, -1, 33, -1, 3, -1, 3,
425
- 15, 3, -1, 3, 15, -1, 4, -1, -1, 38,
426
- 10, 31, 35, -1, -1, -1, 16, 36, 10, 31,
427
- 37, -1, 3, -1, 38, 17, 3, -1, 18, 40,
428
- 18, -1, 18, 40, 18, 15, 3, -1, 18, 18,
429
- -1, 18, 18, 15, 3, -1, 3, -1, 19, 20,
430
- -1, 40, 3, -1, 40, 19, 20, -1, 40, 17,
431
- 3, -1, 21, 3, 3, 22, -1, 21, 3, 3,
432
- 23, -1, 24, 3, 3, 22, -1, 24, 3, 3,
433
- 23, -1, 19, 3, 23, -1, 19, 3, 22, -1,
434
- 21, 3, 20, -1, 24, 3, 20, -1, 19, 3,
435
- -1, 19, 25, 3, -1, 20, 25, 3, -1, 20,
436
- 3, -1
423
+ 12, 3, -1, 32, -1, 13, 14, -1, 13, 28,
424
+ 14, -1, 34, -1, 39, -1, 41, -1, 33, -1,
425
+ 3, -1, 3, 15, 3, -1, 3, 15, -1, 4,
426
+ -1, -1, 38, 10, 31, 35, -1, -1, -1, 16,
427
+ 36, 10, 31, 37, -1, 3, -1, 38, 17, 3,
428
+ -1, 18, 40, 18, -1, 18, 40, 18, 15, 3,
429
+ -1, 18, 18, -1, 18, 18, 15, 3, -1, 3,
430
+ -1, 19, 20, -1, 40, 3, -1, 40, 19, 20,
431
+ -1, 40, 17, 3, -1, 21, 3, 3, 22, -1,
432
+ 21, 3, 3, 23, -1, 24, 3, 3, 22, -1,
433
+ 24, 3, 3, 23, -1, 19, 3, 23, -1, 19,
434
+ 3, 22, -1, 21, 3, 20, -1, 24, 3, 20,
435
+ -1, 19, 3, -1, 19, 25, 3, -1, 20, 25,
436
+ 3, -1, 20, 3, -1
437
437
  };
438
438
 
439
439
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
440
440
  static const unsigned char yyrline[] =
441
441
  {
442
442
  0, 102, 102, 103, 105, 106, 107, 108, 110, 111,
443
- 112, 114, 115, 117, 118, 119, 120, 121, 122, 124,
444
- 125, 126, 128, 130, 130, 132, 132, 132, 135, 136,
445
- 138, 139, 140, 141, 143, 144, 145, 146, 147, 149,
443
+ 112, 114, 115, 117, 118, 119, 120, 121, 122, 123,
444
+ 125, 126, 127, 129, 131, 131, 133, 133, 133, 136,
445
+ 137, 139, 140, 141, 142, 144, 145, 146, 147, 148,
446
446
  150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
447
- 160
447
+ 160, 161
448
448
  };
449
449
  #endif
450
450
 
@@ -476,22 +476,22 @@ static const unsigned short int yytoknum[] =
476
476
  static const unsigned char yyr1[] =
477
477
  {
478
478
  0, 26, 27, 27, 28, 28, 28, 28, 29, 29,
479
- 29, 30, 30, 31, 31, 31, 31, 31, 31, 32,
480
- 32, 32, 33, 35, 34, 36, 37, 34, 38, 38,
481
- 39, 39, 39, 39, 40, 40, 40, 40, 40, 41,
479
+ 29, 30, 30, 31, 31, 31, 31, 31, 31, 31,
480
+ 32, 32, 32, 33, 35, 34, 36, 37, 34, 38,
481
+ 38, 39, 39, 39, 39, 40, 40, 40, 40, 40,
482
482
  41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
483
- 41
483
+ 41, 41
484
484
  };
485
485
 
486
486
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
487
487
  static const unsigned char yyr2[] =
488
488
  {
489
489
  0, 2, 0, 1, 1, 3, 3, 2, 2, 2,
490
- 1, 1, 3, 1, 3, 1, 1, 1, 1, 1,
491
- 3, 2, 1, 0, 4, 0, 0, 5, 1, 3,
492
- 3, 5, 2, 4, 1, 2, 2, 3, 3, 4,
493
- 4, 4, 4, 3, 3, 3, 3, 2, 3, 3,
494
- 2
490
+ 1, 1, 3, 1, 2, 3, 1, 1, 1, 1,
491
+ 1, 3, 2, 1, 0, 4, 0, 0, 5, 1,
492
+ 3, 3, 5, 2, 4, 1, 2, 2, 3, 3,
493
+ 4, 4, 4, 4, 3, 3, 3, 3, 2, 3,
494
+ 3, 2
495
495
  };
496
496
 
497
497
  /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -499,76 +499,82 @@ static const unsigned char yyr2[] =
499
499
  means the default is an error. */
500
500
  static const unsigned char yydefact[] =
501
501
  {
502
- 2, 19, 22, 0, 0, 0, 25, 0, 0, 0,
503
- 0, 0, 0, 3, 4, 10, 11, 13, 18, 15,
504
- 0, 16, 17, 21, 9, 8, 0, 0, 34, 32,
505
- 0, 0, 47, 0, 50, 0, 0, 0, 1, 0,
506
- 0, 7, 0, 0, 0, 20, 14, 0, 0, 35,
507
- 36, 0, 30, 0, 44, 43, 48, 49, 0, 45,
508
- 0, 46, 6, 5, 12, 23, 29, 26, 33, 38,
509
- 0, 37, 39, 40, 41, 42, 24, 27, 31
502
+ 2, 20, 23, 0, 0, 0, 26, 0, 0, 0,
503
+ 0, 0, 0, 3, 4, 10, 11, 13, 19, 16,
504
+ 0, 17, 18, 22, 9, 8, 14, 0, 0, 35,
505
+ 33, 0, 0, 48, 0, 51, 0, 0, 0, 1,
506
+ 0, 0, 7, 0, 0, 0, 21, 15, 0, 0,
507
+ 36, 37, 0, 31, 0, 45, 44, 49, 50, 0,
508
+ 46, 0, 47, 6, 5, 12, 24, 30, 27, 34,
509
+ 39, 0, 38, 40, 41, 42, 43, 25, 28, 32
510
510
  };
511
511
 
512
512
  /* YYDEFGOTO[NTERM-NUM]. */
513
513
  static const yysigned_char yydefgoto[] =
514
514
  {
515
- -1, 12, 13, 14, 15, 16, 17, 18, 19, 76,
516
- 27, 77, 20, 21, 31, 22
515
+ -1, 12, 13, 14, 15, 16, 17, 18, 19, 77,
516
+ 28, 78, 20, 21, 32, 22
517
517
  };
518
518
 
519
519
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
520
520
  STATE-NUM. */
521
- #define YYPACT_NINF -32
521
+ #define YYPACT_NINF -30
522
522
  static const yysigned_char yypact[] =
523
523
  {
524
- 44, 75, -32, 63, 63, 44, -32, 55, -2, -1,
525
- 0, 3, 11, 25, -32, -32, 18, -32, -32, -32,
526
- 76, -32, -32, 33, -32, -32, 1, 32, -32, 41,
527
- 39, 52, 17, 58, -32, 69, 15, 34, -32, 44,
528
- 44, -32, 72, 63, 77, -32, -32, 63, 88, -32,
529
- -32, 91, 80, 78, -32, -32, -32, -32, 28, -32,
530
- 66, -32, -32, -32, -32, -32, -32, -32, -32, -32,
531
- 93, -32, -32, -32, -32, -32, -32, -32, -32
524
+ 83, -4, -30, 102, 102, 64, -30, 7, -2, -1,
525
+ 6, 15, 31, 45, -30, -30, 29, -30, -30, -30,
526
+ -5, -30, -30, 40, -30, -30, -30, 26, 47, -30,
527
+ 55, 42, 19, -15, 68, -30, 71, 0, 1, -30,
528
+ 83, 83, -30, 72, 102, 73, -30, -30, 102, 76,
529
+ -30, -30, 78, 74, 70, -30, -30, -30, -30, -6,
530
+ -30, 33, -30, -30, -30, -30, -30, -30, -30, -30,
531
+ -30, 90, -30, -30, -30, -30, -30, -30, -30, -30
532
532
  };
533
533
 
534
534
  /* YYPGOTO[NTERM-NUM]. */
535
535
  static const yysigned_char yypgoto[] =
536
536
  {
537
- -32, -32, 92, -13, 74, -31, -32, -32, -32, -32,
538
- -32, -32, -32, -32, -32, -32
537
+ -30, -30, 89, -13, 56, -29, -30, -30, -30, -30,
538
+ -30, -30, -30, -30, -30, -30
539
539
  };
540
540
 
541
541
  /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
542
542
  positive, shift that token. If negative, reduce the rule which
543
543
  number is the opposite. If zero, do what YYDEFACT says.
544
544
  If YYTABLE_NINF, syntax error. */
545
- #define YYTABLE_NINF -29
545
+ #define YYTABLE_NINF -30
546
546
  static const yysigned_char yytable[] =
547
547
  {
548
- 41, 32, 34, 36, 1, 2, 37, 39, 40, 3,
549
- 4, 38, 65, 41, 5, 46, 67, 6, 58, 7,
550
- 8, 9, 10, 33, 35, 11, 62, 63, 1, 2,
551
- 42, 39, 40, 3, 4, 59, 45, 60, 5, 54,
552
- 55, 6, 47, 7, 8, 9, 10, 1, 2, 11,
553
- 72, 73, 3, 4, 61, 50, 48, 5, 28, 49,
554
- 6, 56, 7, 8, 9, 10, 1, 2, 11, 51,
555
- 52, 53, 57, 29, 30, 64, 5, 24, 25, 6,
556
- 66, 7, 8, 9, 10, -28, 43, 11, 74, 75,
557
- 23, 68, -28, 44, 69, 70, 78, 26, 71
548
+ 42, 33, 35, 59, 61, 44, -29, 55, 56, 37,
549
+ 29, 23, 45, -29, 42, 66, 73, 74, 38, 68,
550
+ 60, 62, 51, 34, 36, 30, 31, 63, 64, 1,
551
+ 2, 39, 40, 41, 3, 4, 52, 53, 54, 5,
552
+ 47, 43, 6, 46, 7, 8, 9, 10, 1, 2,
553
+ 11, 40, 41, 3, 4, 75, 76, 48, 5, 24,
554
+ 25, 6, 50, 7, 8, 9, 10, 1, 2, 11,
555
+ 49, 57, 3, 4, 58, 65, 67, 5, 26, 69,
556
+ 6, 70, 7, 8, 9, 10, 1, 2, 11, 71,
557
+ 72, 3, 4, 79, 27, 0, 5, 0, 0, 6,
558
+ 0, 7, 8, 9, 10, 1, 2, 11, 0, 0,
559
+ 0, 0, 0, 0, 0, 5, 0, 0, 6, 0,
560
+ 7, 8, 9, 10, 0, 0, 11
558
561
  };
559
562
 
560
- static const unsigned char yycheck[] =
563
+ static const yysigned_char yycheck[] =
561
564
  {
562
- 13, 3, 3, 3, 3, 4, 3, 6, 7, 8,
563
- 9, 0, 43, 26, 13, 14, 47, 16, 3, 18,
564
- 19, 20, 21, 25, 25, 24, 39, 40, 3, 4,
565
- 12, 6, 7, 8, 9, 20, 3, 3, 13, 22,
566
- 23, 16, 10, 18, 19, 20, 21, 3, 4, 24,
567
- 22, 23, 8, 9, 20, 3, 15, 13, 3, 20,
568
- 16, 3, 18, 19, 20, 21, 3, 4, 24, 17,
569
- 18, 19, 3, 18, 19, 3, 13, 3, 4, 16,
570
- 3, 18, 19, 20, 21, 10, 10, 24, 22, 23,
571
- 15, 3, 17, 17, 3, 15, 3, 5, 20
565
+ 13, 3, 3, 3, 3, 10, 10, 22, 23, 3,
566
+ 3, 15, 17, 17, 27, 44, 22, 23, 3, 48,
567
+ 20, 20, 3, 25, 25, 18, 19, 40, 41, 3,
568
+ 4, 0, 6, 7, 8, 9, 17, 18, 19, 13,
569
+ 14, 12, 16, 3, 18, 19, 20, 21, 3, 4,
570
+ 24, 6, 7, 8, 9, 22, 23, 10, 13, 3,
571
+ 4, 16, 20, 18, 19, 20, 21, 3, 4, 24,
572
+ 15, 3, 8, 9, 3, 3, 3, 13, 14, 3,
573
+ 16, 3, 18, 19, 20, 21, 3, 4, 24, 15,
574
+ 20, 8, 9, 3, 5, -1, 13, -1, -1, 16,
575
+ -1, 18, 19, 20, 21, 3, 4, 24, -1, -1,
576
+ -1, -1, -1, -1, -1, 13, -1, -1, 16, -1,
577
+ 18, 19, 20, 21, -1, -1, 24
572
578
  };
573
579
 
574
580
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -577,12 +583,12 @@ static const unsigned char yystos[] =
577
583
  {
578
584
  0, 3, 4, 8, 9, 13, 16, 18, 19, 20,
579
585
  21, 24, 27, 28, 29, 30, 31, 32, 33, 34,
580
- 38, 39, 41, 15, 30, 30, 28, 36, 3, 18,
581
- 19, 40, 3, 25, 3, 25, 3, 3, 0, 6,
582
- 7, 29, 12, 10, 17, 3, 14, 10, 15, 20,
583
- 3, 17, 18, 19, 22, 23, 3, 3, 3, 20,
584
- 3, 20, 29, 29, 3, 31, 3, 31, 3, 3,
585
- 15, 20, 22, 23, 22, 23, 35, 37, 3
586
+ 38, 39, 41, 15, 30, 30, 14, 28, 36, 3,
587
+ 18, 19, 40, 3, 25, 3, 25, 3, 3, 0,
588
+ 6, 7, 29, 12, 10, 17, 3, 14, 10, 15,
589
+ 20, 3, 17, 18, 19, 22, 23, 3, 3, 3,
590
+ 20, 3, 20, 29, 29, 3, 31, 3, 31, 3,
591
+ 3, 15, 20, 22, 23, 22, 23, 35, 37, 3
586
592
  };
587
593
 
588
594
  #define yyerrok (yyerrstatus = 0)
@@ -1303,77 +1309,77 @@ yyreduce:
1303
1309
 
1304
1310
  case 14:
1305
1311
  #line 118 "src/q_parser.y"
1306
- { (yyval.query) = get_bool_q((yyvsp[-1].bclss)); }
1312
+ { (yyval.query) = bq_new(true); }
1307
1313
  break;
1308
1314
 
1309
- case 19:
1310
- #line 124 "src/q_parser.y"
1311
- { FLDS((yyval.query), get_term_q(qp, field, (yyvsp[0].str))); }
1315
+ case 15:
1316
+ #line 119 "src/q_parser.y"
1317
+ { (yyval.query) = get_bool_q((yyvsp[-1].bclss)); }
1312
1318
  break;
1313
1319
 
1314
1320
  case 20:
1315
1321
  #line 125 "src/q_parser.y"
1316
- { FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[-2].str), (yyvsp[0].str))); }
1322
+ { FLDS((yyval.query), get_term_q(qp, field, (yyvsp[0].str))); }
1317
1323
  break;
1318
1324
 
1319
1325
  case 21:
1320
1326
  #line 126 "src/q_parser.y"
1321
- { FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[-1].str), NULL)); }
1327
+ { FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[-2].str), (yyvsp[0].str))); }
1322
1328
  break;
1323
1329
 
1324
1330
  case 22:
1325
- #line 128 "src/q_parser.y"
1326
- { FLDS((yyval.query), get_wild_q(qp, field, (yyvsp[0].str))); }
1331
+ #line 127 "src/q_parser.y"
1332
+ { FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[-1].str), NULL)); }
1327
1333
  break;
1328
1334
 
1329
1335
  case 23:
1330
- #line 130 "src/q_parser.y"
1331
- { qp->fields = qp->def_fields; }
1336
+ #line 129 "src/q_parser.y"
1337
+ { FLDS((yyval.query), get_wild_q(qp, field, (yyvsp[0].str))); }
1332
1338
  break;
1333
1339
 
1334
1340
  case 24:
1335
1341
  #line 131 "src/q_parser.y"
1336
- { (yyval.query) = (yyvsp[-1].query); }
1342
+ { qp->fields = qp->def_fields; }
1337
1343
  break;
1338
1344
 
1339
1345
  case 25:
1340
1346
  #line 132 "src/q_parser.y"
1341
- { qp->fields = qp->all_fields; }
1347
+ { (yyval.query) = (yyvsp[-1].query); }
1342
1348
  break;
1343
1349
 
1344
1350
  case 26:
1345
- #line 132 "src/q_parser.y"
1346
- {qp->fields = qp->def_fields;}
1351
+ #line 133 "src/q_parser.y"
1352
+ { qp->fields = qp->all_fields; }
1347
1353
  break;
1348
1354
 
1349
1355
  case 27:
1350
1356
  #line 133 "src/q_parser.y"
1351
- { (yyval.query) = (yyvsp[-1].query); }
1357
+ {qp->fields = qp->def_fields;}
1352
1358
  break;
1353
1359
 
1354
1360
  case 28:
1355
- #line 135 "src/q_parser.y"
1356
- { (yyval.hashset) = first_field(qp, (yyvsp[0].str)); }
1361
+ #line 134 "src/q_parser.y"
1362
+ { (yyval.query) = (yyvsp[-1].query); }
1357
1363
  break;
1358
1364
 
1359
1365
  case 29:
1360
1366
  #line 136 "src/q_parser.y"
1361
- { (yyval.hashset) = add_field(qp, (yyvsp[0].str));}
1367
+ { (yyval.hashset) = first_field(qp, (yyvsp[0].str)); }
1362
1368
  break;
1363
1369
 
1364
1370
  case 30:
1365
- #line 138 "src/q_parser.y"
1366
- { (yyval.query) = get_phrase_q(qp, (yyvsp[-1].phrase), NULL); }
1371
+ #line 137 "src/q_parser.y"
1372
+ { (yyval.hashset) = add_field(qp, (yyvsp[0].str));}
1367
1373
  break;
1368
1374
 
1369
1375
  case 31:
1370
1376
  #line 139 "src/q_parser.y"
1371
- { (yyval.query) = get_phrase_q(qp, (yyvsp[-3].phrase), (yyvsp[0].str)); }
1377
+ { (yyval.query) = get_phrase_q(qp, (yyvsp[-1].phrase), NULL); }
1372
1378
  break;
1373
1379
 
1374
1380
  case 32:
1375
1381
  #line 140 "src/q_parser.y"
1376
- { (yyval.query) = NULL; }
1382
+ { (yyval.query) = get_phrase_q(qp, (yyvsp[-3].phrase), (yyvsp[0].str)); }
1377
1383
  break;
1378
1384
 
1379
1385
  case 33:
@@ -1382,87 +1388,92 @@ yyreduce:
1382
1388
  break;
1383
1389
 
1384
1390
  case 34:
1385
- #line 143 "src/q_parser.y"
1386
- { (yyval.phrase) = ph_first_word((yyvsp[0].str)); }
1391
+ #line 142 "src/q_parser.y"
1392
+ { (yyval.query) = NULL; }
1387
1393
  break;
1388
1394
 
1389
1395
  case 35:
1390
1396
  #line 144 "src/q_parser.y"
1391
- { (yyval.phrase) = ph_first_word(NULL); }
1397
+ { (yyval.phrase) = ph_first_word((yyvsp[0].str)); }
1392
1398
  break;
1393
1399
 
1394
1400
  case 36:
1395
1401
  #line 145 "src/q_parser.y"
1396
- { (yyval.phrase) = ph_add_word((yyvsp[-1].phrase), (yyvsp[0].str)); }
1402
+ { (yyval.phrase) = ph_first_word(NULL); }
1397
1403
  break;
1398
1404
 
1399
1405
  case 37:
1400
1406
  #line 146 "src/q_parser.y"
1401
- { (yyval.phrase) = ph_add_word((yyvsp[-2].phrase), NULL); }
1407
+ { (yyval.phrase) = ph_add_word((yyvsp[-1].phrase), (yyvsp[0].str)); }
1402
1408
  break;
1403
1409
 
1404
1410
  case 38:
1405
1411
  #line 147 "src/q_parser.y"
1406
- { (yyval.phrase) = ph_add_multi_word((yyvsp[-2].phrase), (yyvsp[0].str)); }
1412
+ { (yyval.phrase) = ph_add_word((yyvsp[-2].phrase), NULL); }
1407
1413
  break;
1408
1414
 
1409
1415
  case 39:
1410
- #line 149 "src/q_parser.y"
1411
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), true, true)); }
1416
+ #line 148 "src/q_parser.y"
1417
+ { (yyval.phrase) = ph_add_multi_word((yyvsp[-2].phrase), (yyvsp[0].str)); }
1412
1418
  break;
1413
1419
 
1414
1420
  case 40:
1415
1421
  #line 150 "src/q_parser.y"
1416
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), true, false)); }
1422
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), true, true)); }
1417
1423
  break;
1418
1424
 
1419
1425
  case 41:
1420
1426
  #line 151 "src/q_parser.y"
1421
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), false, true)); }
1427
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), true, false)); }
1422
1428
  break;
1423
1429
 
1424
1430
  case 42:
1425
1431
  #line 152 "src/q_parser.y"
1426
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), false, false)); }
1432
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), false, true)); }
1427
1433
  break;
1428
1434
 
1429
1435
  case 43:
1430
1436
  #line 153 "src/q_parser.y"
1431
- { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[-1].str), false, false)); }
1437
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-2].str), (yyvsp[-1].str), false, false)); }
1432
1438
  break;
1433
1439
 
1434
1440
  case 44:
1435
1441
  #line 154 "src/q_parser.y"
1436
- { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[-1].str), false, true)); }
1442
+ { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[-1].str), false, false)); }
1437
1443
  break;
1438
1444
 
1439
1445
  case 45:
1440
1446
  #line 155 "src/q_parser.y"
1441
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-1].str), NULL,true, false)); }
1447
+ { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[-1].str), false, true)); }
1442
1448
  break;
1443
1449
 
1444
1450
  case 46:
1445
1451
  #line 156 "src/q_parser.y"
1446
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-1].str), NULL,false, false)); }
1452
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-1].str), NULL,true, false)); }
1447
1453
  break;
1448
1454
 
1449
1455
  case 47:
1450
1456
  #line 157 "src/q_parser.y"
1451
- { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[0].str), false, false)); }
1457
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-1].str), NULL,false, false)); }
1452
1458
  break;
1453
1459
 
1454
1460
  case 48:
1455
1461
  #line 158 "src/q_parser.y"
1456
- { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[0].str), false, true)); }
1462
+ { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[0].str), false, false)); }
1457
1463
  break;
1458
1464
 
1459
1465
  case 49:
1460
1466
  #line 159 "src/q_parser.y"
1461
- { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[0].str), NULL,true, false)); }
1467
+ { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[0].str), false, true)); }
1462
1468
  break;
1463
1469
 
1464
1470
  case 50:
1465
1471
  #line 160 "src/q_parser.y"
1472
+ { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[0].str), NULL,true, false)); }
1473
+ break;
1474
+
1475
+ case 51:
1476
+ #line 161 "src/q_parser.y"
1466
1477
  { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[0].str), NULL,false, false)); }
1467
1478
  break;
1468
1479
 
@@ -1471,7 +1482,7 @@ yyreduce:
1471
1482
  }
1472
1483
 
1473
1484
  /* Line 1126 of yacc.c. */
1474
- #line 1475 "y.tab.c"
1485
+ #line 1486 "y.tab.c"
1475
1486
 
1476
1487
  yyvsp -= yylen;
1477
1488
  yyssp -= yylen;
@@ -1739,7 +1750,7 @@ yyreturn:
1739
1750
  }
1740
1751
 
1741
1752
 
1742
- #line 162 "src/q_parser.y"
1753
+ #line 163 "src/q_parser.y"
1743
1754
 
1744
1755
 
1745
1756
  const char *special_char = "&:()[]{}!\"~^|<>=*?+-";
data/ext/r_index.c CHANGED
@@ -1233,6 +1233,14 @@ frt_iw_get_doc_count(VALUE self)
1233
1233
  return INT2FIX(iw_doc_count(iw));
1234
1234
  }
1235
1235
 
1236
+ static char *
1237
+ nstrdup(const char *str, int len)
1238
+ {
1239
+ char *new = ALLOC_N(char, len + 1);
1240
+ memcpy(new, str, len + 1);
1241
+ return new;
1242
+ }
1243
+
1236
1244
  static int
1237
1245
  frt_hash_to_doc_i(VALUE key, VALUE value, VALUE arg)
1238
1246
  {
@@ -1266,17 +1274,25 @@ frt_hash_to_doc_i(VALUE key, VALUE value, VALUE arg)
1266
1274
  case T_ARRAY:
1267
1275
  {
1268
1276
  int i;
1277
+ df->destroy_data = true;
1269
1278
  for (i = 0; i < RARRAY(value)->len; i++) {
1270
1279
  val = rb_obj_as_string(RARRAY(value)->ptr[i]);
1271
1280
  df_add_data_len(df,
1272
- RSTRING(val)->ptr,
1281
+ nstrdup(RSTRING(val)->ptr,
1282
+ RSTRING(val)->len),
1273
1283
  RSTRING(val)->len);
1274
1284
  }
1275
1285
  }
1276
1286
  break;
1287
+ case T_STRING:
1288
+ df_add_data_len(df, RSTRING(value)->ptr, RSTRING(value)->len);
1289
+ break;
1277
1290
  default:
1278
1291
  val = rb_obj_as_string(value);
1279
- df_add_data_len(df, RSTRING(val)->ptr, RSTRING(val)->len);
1292
+ df->destroy_data = true;
1293
+ df_add_data_len(df,
1294
+ nstrdup(RSTRING(val)->ptr, RSTRING(val)->len),
1295
+ RSTRING(val)->len);
1280
1296
  break;
1281
1297
  }
1282
1298
  doc_add_field(doc, df);
@@ -1303,10 +1319,12 @@ frt_get_doc(VALUE rdoc)
1303
1319
  {
1304
1320
  int i;
1305
1321
  df = df_new("content");
1322
+ df->destroy_data = true;
1306
1323
  for (i = 0; i < RARRAY(rdoc)->len; i++) {
1307
1324
  val = rb_obj_as_string(RARRAY(rdoc)->ptr[i]);
1308
1325
  df_add_data_len(df,
1309
- RSTRING(val)->ptr,
1326
+ nstrdup(RSTRING(val)->ptr,
1327
+ RSTRING(val)->len),
1310
1328
  RSTRING(val)->len);
1311
1329
  }
1312
1330
  doc_add_field(doc, df);
@@ -1317,11 +1335,17 @@ frt_get_doc(VALUE rdoc)
1317
1335
  doc_add_field(doc, df);
1318
1336
  break;
1319
1337
  case T_STRING:
1338
+ df = df_add_data_len(df_new("content"), RSTRING(rdoc)->ptr,
1339
+ RSTRING(rdoc)->len);
1340
+ doc_add_field(doc, df);
1341
+ break;
1320
1342
  default:
1321
1343
  val = rb_obj_as_string(rdoc);
1322
1344
  df = df_add_data_len(df_new("content"),
1323
- RSTRING(val)->ptr,
1345
+ nstrdup(RSTRING(val)->ptr,
1346
+ RSTRING(val)->len),
1324
1347
  RSTRING(val)->len);
1348
+ df->destroy_data = true;
1325
1349
  doc_add_field(doc, df);
1326
1350
  break;
1327
1351
  }
@@ -2247,7 +2271,7 @@ frt_ir_is_latest(VALUE self)
2247
2271
  * index_reader.term_vector(doc_id, field) -> TermVector
2248
2272
  *
2249
2273
  * Return the TermVector for the field +field+ in the document at +doc_id+ in
2250
- * the index. See TermVector.
2274
+ * the index. Return nil of no such term_vector exists. See TermVector.
2251
2275
  */
2252
2276
  static VALUE
2253
2277
  frt_ir_term_vector(VALUE self, VALUE rdoc_id, VALUE rfield)
@@ -2256,9 +2280,14 @@ frt_ir_term_vector(VALUE self, VALUE rdoc_id, VALUE rfield)
2256
2280
  TermVector *tv;
2257
2281
  VALUE rtv;
2258
2282
  tv = ir->term_vector(ir, FIX2INT(rdoc_id), frt_field(rfield));
2259
- rtv = frt_get_tv(tv);
2260
- tv_destroy(tv);
2261
- return rtv;
2283
+ if (tv) {
2284
+ rtv = frt_get_tv(tv);
2285
+ tv_destroy(tv);
2286
+ return rtv;
2287
+ }
2288
+ else {
2289
+ return Qnil;
2290
+ }
2262
2291
  }
2263
2292
 
2264
2293
  static void
data/ext/r_store.c CHANGED
@@ -21,8 +21,8 @@ frt_unwrap_locks(Store *store)
21
21
  for (i = 0; i < store->locks->size; i++) {
22
22
  void *lock = store->locks->elems[i];
23
23
  VALUE rlock = object_get(lock);
24
- object_del(lock);
25
24
  if (rlock != Qnil) {
25
+ object_del(lock);
26
26
  Frt_Unwrap_Struct(rlock);
27
27
  }
28
28
  }
data/lib/ferret/index.rb CHANGED
@@ -91,7 +91,7 @@ module Ferret::Index
91
91
  end
92
92
 
93
93
  if (fi = options[:field_infos]).is_a?(String)
94
- options[:field_infos] = FieldInfos.load(options[:field_infos])
94
+ options[:field_infos] = FieldInfos.load(fi)
95
95
  end
96
96
 
97
97
  @close_dir = options[:close_dir]
@@ -103,7 +103,8 @@ module Ferret::Index
103
103
  begin
104
104
  @dir = FSDirectory.new(options[:path], options[:create])
105
105
  rescue IOError => io
106
- @dir = FSDirectory.new(options[:path], options[:create_if_missing])
106
+ @dir = FSDirectory.new(options[:path],
107
+ options[:create_if_missing] != false)
107
108
  end
108
109
  elsif options[:dir]
109
110
  @dir = options[:dir]
@@ -220,7 +221,6 @@ module Ferret::Index
220
221
  ensure_writer_open()
221
222
  return @writer
222
223
  end
223
- protected :reader, :writer, :searcher
224
224
 
225
225
  # Adds a document to this index, using the provided analyzer instead of
226
226
  # the local analyzer if provided. If the document contains more than
@@ -1,3 +1,3 @@
1
1
  module Ferret
2
- VERSION = '0.10.8'
2
+ VERSION = '0.10.9'
3
3
  end
@@ -195,8 +195,8 @@ class QueryParserTest < Test::Unit::TestCase
195
195
 
196
196
  pairs = [
197
197
  ['::*word', 'word'],
198
- ['()*&)(*^&*(', ''],
199
- ['()*&one)(*two(*&"', '"one two"~1']
198
+ ['::*&)(*^&*(', ''],
199
+ ['::*&one)(*two(*&"', '"one two"~1']
200
200
  ]
201
201
 
202
202
  pairs.each do |query_str, expected|
@@ -95,12 +95,12 @@ class NumberToolsTest < Test::Unit::TestCase
95
95
 
96
96
  def test_date_time_to_s_lex
97
97
  10.times do
98
- d1 = DateTime.strptime("#{rand(2200)}-#{rand(12)+1}-#{rand(28)+1} "+
99
- "#{rand(24)}:#{rand(60)}:#{rand(60)}",
100
- "%Y-%m-%d %H:%M:%S")
101
- d2 = DateTime.strptime("#{rand(2200)}-#{rand(12)+1}-#{rand(28)+1} "+
102
- "#{rand(24)}:#{rand(60)}:#{rand(60)}",
103
- "%Y-%m-%d %H:%M:%S")
98
+ d1 = "#{rand(600) + 1600}-#{rand(12)+1}-#{rand(28)+1} " +
99
+ "#{rand(24)}:#{rand(60)}:#{rand(60)}"
100
+ d2 = "#{rand(600) + 1600}-#{rand(12)+1}-#{rand(28)+1} " +
101
+ "#{rand(24)}:#{rand(60)}:#{rand(60)}"
102
+ d1 = DateTime.strptime(d1, "%Y-%m-%d %H:%M:%S")
103
+ d2 = DateTime.strptime(d2, "%Y-%m-%d %H:%M:%S")
104
104
  assert_equal(d1.to_s, d1.to_s_lex(:second).to_date_time_lex.to_s)
105
105
  assert_equal(d2.to_s, d2.to_s_lex(:second).to_date_time_lex.to_s)
106
106
  [:year, :month, :day, :hour, :minute, :second].each do |prec|
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: ferret
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.10.8
7
- date: 2006-09-25 00:00:00 +09:00
6
+ version: 0.10.9
7
+ date: 2006-09-27 00:00:00 +09:00
8
8
  summary: Ruby indexing library.
9
9
  require_paths:
10
10
  - lib