ferret 0.10.8 → 0.10.9

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