ferret 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +6 -5
- data/Rakefile +34 -13
- data/TODO +1 -0
- data/TUTORIAL +1 -1
- data/ext/analysis.c +87 -70
- data/ext/analysis.h +18 -6
- data/ext/array.c +1 -2
- data/ext/array.h +1 -1
- data/ext/bitvector.c +10 -6
- data/ext/bitvector.h +2 -2
- data/ext/compound_io.c +30 -27
- data/ext/document.c +15 -15
- data/ext/document.h +5 -5
- data/ext/except.c +2 -0
- data/ext/except.h +25 -23
- data/ext/extconf.rb +1 -0
- data/ext/ferret.c +10 -8
- data/ext/ferret.h +9 -8
- data/ext/field.c +29 -25
- data/ext/filter.c +52 -14
- data/ext/frtio.h +13 -0
- data/ext/fs_store.c +115 -170
- data/ext/global.c +9 -8
- data/ext/global.h +17 -13
- data/ext/hash.c +13 -19
- data/ext/hash.h +11 -11
- data/ext/hashset.c +5 -7
- data/ext/hashset.h +9 -8
- data/ext/helper.c +1 -1
- data/ext/helper.h +2 -1
- data/ext/inc/except.h +25 -23
- data/ext/inc/lang.h +11 -1
- data/ext/ind.c +33 -21
- data/ext/index.h +44 -39
- data/ext/index_io.c +61 -57
- data/ext/index_rw.c +418 -361
- data/ext/lang.c +10 -0
- data/ext/lang.h +11 -1
- data/ext/nix_io.c +135 -0
- data/ext/priorityqueue.c +16 -16
- data/ext/priorityqueue.h +9 -6
- data/ext/q_boolean.c +128 -76
- data/ext/q_const_score.c +20 -20
- data/ext/q_filtered_query.c +20 -20
- data/ext/q_fuzzy.c +37 -23
- data/ext/q_match_all.c +15 -19
- data/ext/q_multi_phrase.c +87 -46
- data/ext/q_parser.c +247 -119
- data/ext/q_phrase.c +86 -52
- data/ext/q_prefix.c +25 -14
- data/ext/q_range.c +59 -14
- data/ext/q_span.c +263 -172
- data/ext/q_term.c +62 -51
- data/ext/q_wildcard.c +24 -13
- data/ext/r_analysis.c +328 -80
- data/ext/r_doc.c +11 -6
- data/ext/r_index_io.c +40 -32
- data/ext/r_qparser.c +15 -14
- data/ext/r_search.c +270 -152
- data/ext/r_store.c +32 -17
- data/ext/ram_store.c +38 -22
- data/ext/search.c +617 -87
- data/ext/search.h +227 -163
- data/ext/similarity.c +54 -45
- data/ext/similarity.h +3 -3
- data/ext/sort.c +132 -53
- data/ext/store.c +21 -2
- data/ext/store.h +14 -14
- data/ext/tags +4322 -232
- data/ext/term.c +140 -109
- data/ext/termdocs.c +74 -60
- data/ext/vector.c +181 -152
- data/ext/w32_io.c +150 -0
- data/lib/ferret.rb +1 -1
- data/lib/ferret/analysis/standard_tokenizer.rb +4 -3
- data/lib/ferret/document/field.rb +1 -1
- data/lib/ferret/index/field_infos.rb +1 -1
- data/lib/ferret/index/term.rb +1 -1
- data/lib/ferret/query_parser/query_parser.tab.rb +8 -24
- data/lib/ferret/search.rb +1 -0
- data/lib/ferret/search/boolean_query.rb +0 -4
- data/lib/ferret/search/index_searcher.rb +21 -8
- data/lib/ferret/search/multi_phrase_query.rb +7 -0
- data/lib/ferret/search/multi_searcher.rb +261 -0
- data/lib/ferret/search/phrase_query.rb +1 -1
- data/lib/ferret/search/query.rb +34 -5
- data/lib/ferret/search/sort.rb +7 -3
- data/lib/ferret/search/sort_field.rb +8 -4
- data/lib/ferret/store/fs_store.rb +13 -6
- data/lib/ferret/store/index_io.rb +0 -14
- data/lib/ferret/store/ram_store.rb +3 -2
- data/lib/rferret.rb +1 -1
- data/test/unit/analysis/ctc_analyzer.rb +131 -0
- data/test/unit/analysis/ctc_tokenstream.rb +98 -9
- data/test/unit/index/tc_index.rb +40 -1
- data/test/unit/index/tc_term.rb +7 -0
- data/test/unit/index/th_doc.rb +8 -0
- data/test/unit/query_parser/tc_query_parser.rb +6 -4
- data/test/unit/search/rtc_sort_field.rb +6 -6
- data/test/unit/search/tc_index_searcher.rb +8 -0
- data/test/unit/search/tc_multi_searcher.rb +275 -0
- data/test/unit/search/tc_multi_searcher2.rb +126 -0
- data/test/unit/search/tc_search_and_sort.rb +66 -0
- metadata +31 -26
- data/test/unit/query_parser/rtc_query_parser.rb +0 -138
data/ext/q_parser.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
/* A Bison parser, made by GNU Bison 2.
|
1
|
+
/* A Bison parser, made by GNU Bison 2.1. */
|
2
2
|
|
3
3
|
/* Skeleton parser for Yacc-like parsing with Bison,
|
4
|
-
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
4
|
+
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
5
5
|
|
6
6
|
This program is free software; you can redistribute it and/or modify
|
7
7
|
it under the terms of the GNU General Public License as published by
|
@@ -15,8 +15,8 @@
|
|
15
15
|
|
16
16
|
You should have received a copy of the GNU General Public License
|
17
17
|
along with this program; if not, write to the Free Software
|
18
|
-
Foundation, Inc.,
|
19
|
-
Boston, MA
|
18
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
19
|
+
Boston, MA 02110-1301, USA. */
|
20
20
|
|
21
21
|
/* As a special exception, when this file is copied by Bison into a
|
22
22
|
Bison output file, you may use that output file without restriction.
|
@@ -36,6 +36,9 @@
|
|
36
36
|
/* Identify Bison output. */
|
37
37
|
#define YYBISON 1
|
38
38
|
|
39
|
+
/* Bison version. */
|
40
|
+
#define YYBISON_VERSION "2.1"
|
41
|
+
|
39
42
|
/* Skeleton name. */
|
40
43
|
#define YYSKELETON_NAME "yacc.c"
|
41
44
|
|
@@ -63,6 +66,7 @@
|
|
63
66
|
HIGH = 265
|
64
67
|
};
|
65
68
|
#endif
|
69
|
+
/* Tokens. */
|
66
70
|
#define WORD 258
|
67
71
|
#define WILD_STR 259
|
68
72
|
#define LOW 260
|
@@ -104,6 +108,11 @@ typedef struct Phrase {
|
|
104
108
|
# define YYERROR_VERBOSE 0
|
105
109
|
#endif
|
106
110
|
|
111
|
+
/* Enabling the token table. */
|
112
|
+
#ifndef YYTOKEN_TABLE
|
113
|
+
# define YYTOKEN_TABLE 0
|
114
|
+
#endif
|
115
|
+
|
107
116
|
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
|
108
117
|
#line 14 "src/query_parser/q_parser.y"
|
109
118
|
typedef union YYSTYPE {
|
@@ -114,8 +123,8 @@ typedef union YYSTYPE {
|
|
114
123
|
Phrase *phrase;
|
115
124
|
char *str;
|
116
125
|
} YYSTYPE;
|
117
|
-
/* Line
|
118
|
-
#line
|
126
|
+
/* Line 196 of yacc.c. */
|
127
|
+
#line 128 "y.tab.c"
|
119
128
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
120
129
|
# define YYSTYPE_IS_DECLARED 1
|
121
130
|
# define YYSTYPE_IS_TRIVIAL 1
|
@@ -174,17 +183,36 @@ Query *get_range_q(char *field, char *from, char *to,
|
|
174
183
|
} while (0)
|
175
184
|
|
176
185
|
|
177
|
-
/* Line
|
178
|
-
#line
|
186
|
+
/* Line 219 of yacc.c. */
|
187
|
+
#line 188 "y.tab.c"
|
179
188
|
|
180
|
-
#if ! defined (
|
189
|
+
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
|
190
|
+
# define YYSIZE_T __SIZE_TYPE__
|
191
|
+
#endif
|
192
|
+
#if ! defined (YYSIZE_T) && defined (size_t)
|
193
|
+
# define YYSIZE_T size_t
|
194
|
+
#endif
|
195
|
+
#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
|
196
|
+
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
|
197
|
+
# define YYSIZE_T size_t
|
198
|
+
#endif
|
199
|
+
#if ! defined (YYSIZE_T)
|
200
|
+
# define YYSIZE_T unsigned int
|
201
|
+
#endif
|
181
202
|
|
182
|
-
#
|
183
|
-
#
|
203
|
+
#ifndef YY_
|
204
|
+
# if YYENABLE_NLS
|
205
|
+
# if ENABLE_NLS
|
206
|
+
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
|
207
|
+
# define YY_(msgid) dgettext ("bison-runtime", msgid)
|
208
|
+
# endif
|
184
209
|
# endif
|
185
|
-
# ifndef
|
186
|
-
# define
|
210
|
+
# ifndef YY_
|
211
|
+
# define YY_(msgid) msgid
|
187
212
|
# endif
|
213
|
+
#endif
|
214
|
+
|
215
|
+
#if ! defined (yyoverflow) || YYERROR_VERBOSE
|
188
216
|
|
189
217
|
/* The parser invokes alloca or malloc; define the necessary symbols. */
|
190
218
|
|
@@ -194,6 +222,10 @@ Query *get_range_q(char *field, char *from, char *to,
|
|
194
222
|
# define YYSTACK_ALLOC __builtin_alloca
|
195
223
|
# else
|
196
224
|
# define YYSTACK_ALLOC alloca
|
225
|
+
# if defined (__STDC__) || defined (__cplusplus)
|
226
|
+
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
|
227
|
+
# define YYINCLUDED_STDLIB_H
|
228
|
+
# endif
|
197
229
|
# endif
|
198
230
|
# endif
|
199
231
|
# endif
|
@@ -201,13 +233,39 @@ Query *get_range_q(char *field, char *from, char *to,
|
|
201
233
|
# ifdef YYSTACK_ALLOC
|
202
234
|
/* Pacify GCC's `empty if-body' warning. */
|
203
235
|
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
|
204
|
-
#
|
205
|
-
|
206
|
-
|
207
|
-
|
236
|
+
# ifndef YYSTACK_ALLOC_MAXIMUM
|
237
|
+
/* The OS might guarantee only one guard page at the bottom of the stack,
|
238
|
+
and a page size can be as small as 4096 bytes. So we cannot safely
|
239
|
+
invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
|
240
|
+
to allow for a few compiler-allocated temporary stack slots. */
|
241
|
+
# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
|
208
242
|
# endif
|
243
|
+
# else
|
209
244
|
# define YYSTACK_ALLOC YYMALLOC
|
210
245
|
# define YYSTACK_FREE YYFREE
|
246
|
+
# ifndef YYSTACK_ALLOC_MAXIMUM
|
247
|
+
# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
|
248
|
+
# endif
|
249
|
+
# ifdef __cplusplus
|
250
|
+
extern "C" {
|
251
|
+
# endif
|
252
|
+
# ifndef YYMALLOC
|
253
|
+
# define YYMALLOC malloc
|
254
|
+
# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
|
255
|
+
&& (defined (__STDC__) || defined (__cplusplus)))
|
256
|
+
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
|
257
|
+
# endif
|
258
|
+
# endif
|
259
|
+
# ifndef YYFREE
|
260
|
+
# define YYFREE free
|
261
|
+
# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
|
262
|
+
&& (defined (__STDC__) || defined (__cplusplus)))
|
263
|
+
void free (void *); /* INFRINGES ON USER NAME SPACE */
|
264
|
+
# endif
|
265
|
+
# endif
|
266
|
+
# ifdef __cplusplus
|
267
|
+
}
|
268
|
+
# endif
|
211
269
|
# endif
|
212
270
|
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
|
213
271
|
|
@@ -242,7 +300,7 @@ union yyalloc
|
|
242
300
|
# define YYCOPY(To, From, Count) \
|
243
301
|
do \
|
244
302
|
{ \
|
245
|
-
|
303
|
+
YYSIZE_T yyi; \
|
246
304
|
for (yyi = 0; yyi < (Count); yyi++) \
|
247
305
|
(To)[yyi] = (From)[yyi]; \
|
248
306
|
} \
|
@@ -292,7 +350,7 @@ union yyalloc
|
|
292
350
|
#define YYUNDEFTOK 2
|
293
351
|
#define YYMAXUTOK 265
|
294
352
|
|
295
|
-
#define YYTRANSLATE(YYX)
|
353
|
+
#define YYTRANSLATE(YYX) \
|
296
354
|
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
297
355
|
|
298
356
|
/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
|
@@ -374,8 +432,8 @@ static const unsigned char yyrline[] =
|
|
374
432
|
};
|
375
433
|
#endif
|
376
434
|
|
377
|
-
#if YYDEBUG || YYERROR_VERBOSE
|
378
|
-
/*
|
435
|
+
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
|
436
|
+
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
|
379
437
|
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
380
438
|
static const char *const yytname[] =
|
381
439
|
{
|
@@ -511,22 +569,6 @@ static const unsigned char yystos[] =
|
|
511
569
|
15, 20, 22, 23, 22, 23, 35, 37, 3
|
512
570
|
};
|
513
571
|
|
514
|
-
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
|
515
|
-
# define YYSIZE_T __SIZE_TYPE__
|
516
|
-
#endif
|
517
|
-
#if ! defined (YYSIZE_T) && defined (size_t)
|
518
|
-
# define YYSIZE_T size_t
|
519
|
-
#endif
|
520
|
-
#if ! defined (YYSIZE_T)
|
521
|
-
# if defined (__STDC__) || defined (__cplusplus)
|
522
|
-
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
|
523
|
-
# define YYSIZE_T size_t
|
524
|
-
# endif
|
525
|
-
#endif
|
526
|
-
#if ! defined (YYSIZE_T)
|
527
|
-
# define YYSIZE_T unsigned int
|
528
|
-
#endif
|
529
|
-
|
530
572
|
#define yyerrok (yyerrstatus = 0)
|
531
573
|
#define yyclearin (yychar = YYEMPTY)
|
532
574
|
#define YYEMPTY (-2)
|
@@ -556,8 +598,8 @@ do \
|
|
556
598
|
goto yybackup; \
|
557
599
|
} \
|
558
600
|
else \
|
559
|
-
{
|
560
|
-
yyerror (qp, "syntax error: cannot back up")
|
601
|
+
{ \
|
602
|
+
yyerror (qp, YY_("syntax error: cannot back up")); \
|
561
603
|
YYERROR; \
|
562
604
|
} \
|
563
605
|
while (0)
|
@@ -636,7 +678,7 @@ do { \
|
|
636
678
|
if (yydebug) \
|
637
679
|
{ \
|
638
680
|
YYFPRINTF (stderr, "%s ", Title); \
|
639
|
-
yysymprint (stderr,
|
681
|
+
yysymprint (stderr, \
|
640
682
|
Type, Value); \
|
641
683
|
YYFPRINTF (stderr, "\n"); \
|
642
684
|
} \
|
@@ -684,13 +726,13 @@ yy_reduce_print (yyrule)
|
|
684
726
|
#endif
|
685
727
|
{
|
686
728
|
int yyi;
|
687
|
-
unsigned int yylno = yyrline[yyrule];
|
688
|
-
YYFPRINTF (stderr, "Reducing stack by rule %d (line %
|
729
|
+
unsigned long int yylno = yyrline[yyrule];
|
730
|
+
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
|
689
731
|
yyrule - 1, yylno);
|
690
732
|
/* Print the symbols being reduced, and their result. */
|
691
733
|
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
|
692
|
-
YYFPRINTF (stderr, "%s ", yytname
|
693
|
-
YYFPRINTF (stderr, "-> %s\n", yytname
|
734
|
+
YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
|
735
|
+
YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
|
694
736
|
}
|
695
737
|
|
696
738
|
# define YY_REDUCE_PRINT(Rule) \
|
@@ -719,7 +761,7 @@ int yydebug;
|
|
719
761
|
if the built-in stack extension method is used).
|
720
762
|
|
721
763
|
Do not make this value too large; the results are undefined if
|
722
|
-
|
764
|
+
YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
|
723
765
|
evaluated with infinite-precision integer arithmetic. */
|
724
766
|
|
725
767
|
#ifndef YYMAXDEPTH
|
@@ -743,7 +785,7 @@ yystrlen (yystr)
|
|
743
785
|
const char *yystr;
|
744
786
|
# endif
|
745
787
|
{
|
746
|
-
|
788
|
+
const char *yys = yystr;
|
747
789
|
|
748
790
|
while (*yys++ != '\0')
|
749
791
|
continue;
|
@@ -768,8 +810,8 @@ yystpcpy (yydest, yysrc)
|
|
768
810
|
const char *yysrc;
|
769
811
|
# endif
|
770
812
|
{
|
771
|
-
|
772
|
-
|
813
|
+
char *yyd = yydest;
|
814
|
+
const char *yys = yysrc;
|
773
815
|
|
774
816
|
while ((*yyd++ = *yys++) != '\0')
|
775
817
|
continue;
|
@@ -779,7 +821,55 @@ yystpcpy (yydest, yysrc)
|
|
779
821
|
# endif
|
780
822
|
# endif
|
781
823
|
|
782
|
-
#
|
824
|
+
# ifndef yytnamerr
|
825
|
+
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
|
826
|
+
quotes and backslashes, so that it's suitable for yyerror. The
|
827
|
+
heuristic is that double-quoting is unnecessary unless the string
|
828
|
+
contains an apostrophe, a comma, or backslash (other than
|
829
|
+
backslash-backslash). YYSTR is taken from yytname. If YYRES is
|
830
|
+
null, do not copy; instead, return the length of what the result
|
831
|
+
would have been. */
|
832
|
+
static YYSIZE_T
|
833
|
+
yytnamerr (char *yyres, const char *yystr)
|
834
|
+
{
|
835
|
+
if (*yystr == '"')
|
836
|
+
{
|
837
|
+
size_t yyn = 0;
|
838
|
+
char const *yyp = yystr;
|
839
|
+
|
840
|
+
for (;;)
|
841
|
+
switch (*++yyp)
|
842
|
+
{
|
843
|
+
case '\'':
|
844
|
+
case ',':
|
845
|
+
goto do_not_strip_quotes;
|
846
|
+
|
847
|
+
case '\\':
|
848
|
+
if (*++yyp != '\\')
|
849
|
+
goto do_not_strip_quotes;
|
850
|
+
/* Fall through. */
|
851
|
+
default:
|
852
|
+
if (yyres)
|
853
|
+
yyres[yyn] = *yyp;
|
854
|
+
yyn++;
|
855
|
+
break;
|
856
|
+
|
857
|
+
case '"':
|
858
|
+
if (yyres)
|
859
|
+
yyres[yyn] = '\0';
|
860
|
+
return yyn;
|
861
|
+
}
|
862
|
+
do_not_strip_quotes: ;
|
863
|
+
}
|
864
|
+
|
865
|
+
if (! yyres)
|
866
|
+
return yystrlen (yystr);
|
867
|
+
|
868
|
+
return yystpcpy (yyres, yystr) - yyres;
|
869
|
+
}
|
870
|
+
# endif
|
871
|
+
|
872
|
+
#endif /* YYERROR_VERBOSE */
|
783
873
|
|
784
874
|
|
785
875
|
|
@@ -904,8 +994,8 @@ YYSTYPE yylval;
|
|
904
994
|
/* Number of syntax errors so far. */
|
905
995
|
int yynerrs;
|
906
996
|
|
907
|
-
|
908
|
-
|
997
|
+
int yystate;
|
998
|
+
int yyn;
|
909
999
|
int yyresult;
|
910
1000
|
/* Number of tokens to shift before error messages enabled. */
|
911
1001
|
int yyerrstatus;
|
@@ -923,12 +1013,12 @@ int yynerrs;
|
|
923
1013
|
/* The state stack. */
|
924
1014
|
short int yyssa[YYINITDEPTH];
|
925
1015
|
short int *yyss = yyssa;
|
926
|
-
|
1016
|
+
short int *yyssp;
|
927
1017
|
|
928
1018
|
/* The semantic value stack. */
|
929
1019
|
YYSTYPE yyvsa[YYINITDEPTH];
|
930
1020
|
YYSTYPE *yyvs = yyvsa;
|
931
|
-
|
1021
|
+
YYSTYPE *yyvsp;
|
932
1022
|
|
933
1023
|
|
934
1024
|
|
@@ -960,9 +1050,6 @@ int yynerrs;
|
|
960
1050
|
yyssp = yyss;
|
961
1051
|
yyvsp = yyvs;
|
962
1052
|
|
963
|
-
|
964
|
-
yyvsp[0] = yylval;
|
965
|
-
|
966
1053
|
goto yysetstate;
|
967
1054
|
|
968
1055
|
/*------------------------------------------------------------.
|
@@ -995,7 +1082,7 @@ int yynerrs;
|
|
995
1082
|
data in use in that stack, in bytes. This used to be a
|
996
1083
|
conditional around just the two extra args, but that might
|
997
1084
|
be undefined if yyoverflow is a macro. */
|
998
|
-
yyoverflow ("
|
1085
|
+
yyoverflow (YY_("memory exhausted"),
|
999
1086
|
&yyss1, yysize * sizeof (*yyssp),
|
1000
1087
|
&yyvs1, yysize * sizeof (*yyvsp),
|
1001
1088
|
|
@@ -1006,11 +1093,11 @@ int yynerrs;
|
|
1006
1093
|
}
|
1007
1094
|
#else /* no yyoverflow */
|
1008
1095
|
# ifndef YYSTACK_RELOCATE
|
1009
|
-
goto
|
1096
|
+
goto yyexhaustedlab;
|
1010
1097
|
# else
|
1011
1098
|
/* Extend the stack our own way. */
|
1012
1099
|
if (YYMAXDEPTH <= yystacksize)
|
1013
|
-
goto
|
1100
|
+
goto yyexhaustedlab;
|
1014
1101
|
yystacksize *= 2;
|
1015
1102
|
if (YYMAXDEPTH < yystacksize)
|
1016
1103
|
yystacksize = YYMAXDEPTH;
|
@@ -1020,7 +1107,7 @@ int yynerrs;
|
|
1020
1107
|
union yyalloc *yyptr =
|
1021
1108
|
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
|
1022
1109
|
if (! yyptr)
|
1023
|
-
goto
|
1110
|
+
goto yyexhaustedlab;
|
1024
1111
|
YYSTACK_RELOCATE (yyss);
|
1025
1112
|
YYSTACK_RELOCATE (yyvs);
|
1026
1113
|
|
@@ -1364,10 +1451,11 @@ yyreduce:
|
|
1364
1451
|
break;
|
1365
1452
|
|
1366
1453
|
|
1454
|
+
default: break;
|
1367
1455
|
}
|
1368
1456
|
|
1369
|
-
/* Line
|
1370
|
-
#line
|
1457
|
+
/* Line 1126 of yacc.c. */
|
1458
|
+
#line 1459 "y.tab.c"
|
1371
1459
|
|
1372
1460
|
yyvsp -= yylen;
|
1373
1461
|
yyssp -= yylen;
|
@@ -1406,12 +1494,36 @@ yyerrlab:
|
|
1406
1494
|
|
1407
1495
|
if (YYPACT_NINF < yyn && yyn < YYLAST)
|
1408
1496
|
{
|
1409
|
-
YYSIZE_T yysize = 0;
|
1410
1497
|
int yytype = YYTRANSLATE (yychar);
|
1411
|
-
|
1412
|
-
|
1498
|
+
YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
|
1499
|
+
YYSIZE_T yysize = yysize0;
|
1500
|
+
YYSIZE_T yysize1;
|
1501
|
+
int yysize_overflow = 0;
|
1502
|
+
char *yymsg = 0;
|
1503
|
+
# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
|
1504
|
+
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
|
1413
1505
|
int yyx;
|
1414
1506
|
|
1507
|
+
#if 0
|
1508
|
+
/* This is so xgettext sees the translatable formats that are
|
1509
|
+
constructed on the fly. */
|
1510
|
+
YY_("syntax error, unexpected %s");
|
1511
|
+
YY_("syntax error, unexpected %s, expecting %s");
|
1512
|
+
YY_("syntax error, unexpected %s, expecting %s or %s");
|
1513
|
+
YY_("syntax error, unexpected %s, expecting %s or %s or %s");
|
1514
|
+
YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
|
1515
|
+
#endif
|
1516
|
+
char *yyfmt;
|
1517
|
+
char const *yyf;
|
1518
|
+
static char const yyunexpected[] = "syntax error, unexpected %s";
|
1519
|
+
static char const yyexpecting[] = ", expecting %s";
|
1520
|
+
static char const yyor[] = " or %s";
|
1521
|
+
char yyformat[sizeof yyunexpected
|
1522
|
+
+ sizeof yyexpecting - 1
|
1523
|
+
+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
|
1524
|
+
* (sizeof yyor - 1))];
|
1525
|
+
char const *yyprefix = yyexpecting;
|
1526
|
+
|
1415
1527
|
/* Start YYX at -YYN if negative to avoid negative indexes in
|
1416
1528
|
YYCHECK. */
|
1417
1529
|
int yyxbegin = yyn < 0 ? -yyn : 0;
|
@@ -1419,48 +1531,68 @@ yyerrlab:
|
|
1419
1531
|
/* Stay within bounds of both yycheck and yytname. */
|
1420
1532
|
int yychecklim = YYLAST - yyn;
|
1421
1533
|
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
|
1422
|
-
int yycount =
|
1534
|
+
int yycount = 1;
|
1535
|
+
|
1536
|
+
yyarg[0] = yytname[yytype];
|
1537
|
+
yyfmt = yystpcpy (yyformat, yyunexpected);
|
1423
1538
|
|
1424
|
-
yyprefix = ", expecting ";
|
1425
1539
|
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
1426
1540
|
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
1427
1541
|
{
|
1428
|
-
|
1429
|
-
yycount += 1;
|
1430
|
-
if (yycount == 5)
|
1542
|
+
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
|
1431
1543
|
{
|
1432
|
-
|
1544
|
+
yycount = 1;
|
1545
|
+
yysize = yysize0;
|
1546
|
+
yyformat[sizeof yyunexpected - 1] = '\0';
|
1433
1547
|
break;
|
1434
1548
|
}
|
1549
|
+
yyarg[yycount++] = yytname[yyx];
|
1550
|
+
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
|
1551
|
+
yysize_overflow |= yysize1 < yysize;
|
1552
|
+
yysize = yysize1;
|
1553
|
+
yyfmt = yystpcpy (yyfmt, yyprefix);
|
1554
|
+
yyprefix = yyor;
|
1435
1555
|
}
|
1436
|
-
yysize += (sizeof ("syntax error, unexpected ")
|
1437
|
-
+ yystrlen (yytname[yytype]));
|
1438
|
-
yymsg = (char *) YYSTACK_ALLOC (yysize);
|
1439
|
-
if (yymsg != 0)
|
1440
|
-
{
|
1441
|
-
char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
|
1442
|
-
yyp = yystpcpy (yyp, yytname[yytype]);
|
1443
1556
|
|
1444
|
-
|
1557
|
+
yyf = YY_(yyformat);
|
1558
|
+
yysize1 = yysize + yystrlen (yyf);
|
1559
|
+
yysize_overflow |= yysize1 < yysize;
|
1560
|
+
yysize = yysize1;
|
1561
|
+
|
1562
|
+
if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
|
1563
|
+
yymsg = (char *) YYSTACK_ALLOC (yysize);
|
1564
|
+
if (yymsg)
|
1565
|
+
{
|
1566
|
+
/* Avoid sprintf, as that infringes on the user's name space.
|
1567
|
+
Don't have undefined behavior even if the translation
|
1568
|
+
produced a string with the wrong number of "%s"s. */
|
1569
|
+
char *yyp = yymsg;
|
1570
|
+
int yyi = 0;
|
1571
|
+
while ((*yyp = *yyf))
|
1445
1572
|
{
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1573
|
+
if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
|
1574
|
+
{
|
1575
|
+
yyp += yytnamerr (yyp, yyarg[yyi++]);
|
1576
|
+
yyf += 2;
|
1577
|
+
}
|
1578
|
+
else
|
1579
|
+
{
|
1580
|
+
yyp++;
|
1581
|
+
yyf++;
|
1582
|
+
}
|
1454
1583
|
}
|
1455
1584
|
yyerror (qp, yymsg);
|
1456
1585
|
YYSTACK_FREE (yymsg);
|
1457
1586
|
}
|
1458
1587
|
else
|
1459
|
-
|
1588
|
+
{
|
1589
|
+
yyerror (qp, YY_("syntax error"));
|
1590
|
+
goto yyexhaustedlab;
|
1591
|
+
}
|
1460
1592
|
}
|
1461
1593
|
else
|
1462
1594
|
#endif /* YYERROR_VERBOSE */
|
1463
|
-
yyerror (qp, "syntax error");
|
1595
|
+
yyerror (qp, YY_("syntax error"));
|
1464
1596
|
}
|
1465
1597
|
|
1466
1598
|
|
@@ -1472,18 +1604,9 @@ yyerrlab:
|
|
1472
1604
|
|
1473
1605
|
if (yychar <= YYEOF)
|
1474
1606
|
{
|
1475
|
-
|
1476
|
-
then the rest of the stack, then return failure. */
|
1607
|
+
/* Return failure if at end of input. */
|
1477
1608
|
if (yychar == YYEOF)
|
1478
|
-
|
1479
|
-
{
|
1480
|
-
|
1481
|
-
YYPOPSTACK;
|
1482
|
-
if (yyssp == yyss)
|
1483
|
-
YYABORT;
|
1484
|
-
yydestruct ("Error: popping",
|
1485
|
-
yystos[*yyssp], yyvsp);
|
1486
|
-
}
|
1609
|
+
YYABORT;
|
1487
1610
|
}
|
1488
1611
|
else
|
1489
1612
|
{
|
@@ -1502,12 +1625,11 @@ yyerrlab:
|
|
1502
1625
|
`---------------------------------------------------*/
|
1503
1626
|
yyerrorlab:
|
1504
1627
|
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1628
|
+
/* Pacify compilers like GCC when the user code never invokes
|
1629
|
+
YYERROR and the label yyerrorlab therefore never appears in user
|
1630
|
+
code. */
|
1508
1631
|
if (0)
|
1509
1632
|
goto yyerrorlab;
|
1510
|
-
#endif
|
1511
1633
|
|
1512
1634
|
yyvsp -= yylen;
|
1513
1635
|
yyssp -= yylen;
|
@@ -1570,23 +1692,29 @@ yyacceptlab:
|
|
1570
1692
|
| yyabortlab -- YYABORT comes here. |
|
1571
1693
|
`-----------------------------------*/
|
1572
1694
|
yyabortlab:
|
1573
|
-
yydestruct ("Error: discarding lookahead",
|
1574
|
-
yytoken, &yylval);
|
1575
|
-
yychar = YYEMPTY;
|
1576
1695
|
yyresult = 1;
|
1577
1696
|
goto yyreturn;
|
1578
1697
|
|
1579
1698
|
#ifndef yyoverflow
|
1580
|
-
|
1581
|
-
|
|
1582
|
-
|
1583
|
-
|
1584
|
-
yyerror (qp, "
|
1699
|
+
/*-------------------------------------------------.
|
1700
|
+
| yyexhaustedlab -- memory exhaustion comes here. |
|
1701
|
+
`-------------------------------------------------*/
|
1702
|
+
yyexhaustedlab:
|
1703
|
+
yyerror (qp, YY_("memory exhausted"));
|
1585
1704
|
yyresult = 2;
|
1586
1705
|
/* Fall through. */
|
1587
1706
|
#endif
|
1588
1707
|
|
1589
1708
|
yyreturn:
|
1709
|
+
if (yychar != YYEOF && yychar != YYEMPTY)
|
1710
|
+
yydestruct ("Cleanup: discarding lookahead",
|
1711
|
+
yytoken, &yylval);
|
1712
|
+
while (yyssp != yyss)
|
1713
|
+
{
|
1714
|
+
yydestruct ("Cleanup: popping",
|
1715
|
+
yystos[*yyssp], yyvsp);
|
1716
|
+
YYPOPSTACK;
|
1717
|
+
}
|
1590
1718
|
#ifndef yyoverflow
|
1591
1719
|
if (yyss != yyssa)
|
1592
1720
|
YYSTACK_FREE (yyss);
|
@@ -1632,7 +1760,7 @@ int get_word(YYSTYPE *lvalp, QParser *qp)
|
|
1632
1760
|
/* check for keywords. There are only four so we have a bit of a hack which
|
1633
1761
|
* just checks for all of them. */
|
1634
1762
|
*bufp = '\0';
|
1635
|
-
len = bufp - buf;
|
1763
|
+
len = (int)(bufp - buf);
|
1636
1764
|
if (len == 3) {
|
1637
1765
|
if (buf[0] == 'A' && buf[1] == 'N' && buf[2] == 'D') return AND;
|
1638
1766
|
if (buf[0] == 'N' && buf[1] == 'O' && buf[2] == 'T') return NOT;
|
@@ -1814,7 +1942,7 @@ Query *get_wild_q(QParser *qp, char *field, char *pattern)
|
|
1814
1942
|
Query *q;
|
1815
1943
|
bool is_prefix = false;
|
1816
1944
|
char *p;
|
1817
|
-
int len = strlen(pattern);
|
1945
|
+
int len = (int)strlen(pattern);
|
1818
1946
|
|
1819
1947
|
if (qp->wild_lower) lower_str(pattern);
|
1820
1948
|
|
@@ -2048,12 +2176,12 @@ Query *get_range_q(char *field, char *from, char *to, bool inc_lower, bool inc_u
|
|
2048
2176
|
return rq_create(field, from, to, inc_lower, inc_upper);
|
2049
2177
|
}
|
2050
2178
|
|
2051
|
-
void qp_destroy(
|
2179
|
+
void qp_destroy(QParser *self)
|
2052
2180
|
{
|
2053
|
-
QParser *self = (QParser *)p;
|
2054
2181
|
if (self->close_def_fields) hs_destroy_all(self->def_fields);
|
2055
2182
|
hs_destroy_all(self->all_fields);
|
2056
2183
|
hs_destroy(self->fields_buf);
|
2184
|
+
a_deref(self->analyzer);
|
2057
2185
|
free(self);
|
2058
2186
|
}
|
2059
2187
|
|
@@ -2111,7 +2239,7 @@ char *qp_clean_str(char *str)
|
|
2111
2239
|
b = *sp;
|
2112
2240
|
/* ignore escaped characters */
|
2113
2241
|
if (pb == '\\') {
|
2114
|
-
if (quote_open &&
|
2242
|
+
if (quote_open && strrchr(PHRASE_CHARS, b)) {
|
2115
2243
|
*nsp++ = '\\'; /* this was left off the first time through */
|
2116
2244
|
}
|
2117
2245
|
|
@@ -2140,7 +2268,7 @@ char *qp_clean_str(char *str)
|
|
2140
2268
|
case ')':
|
2141
2269
|
if (!quote_open) {
|
2142
2270
|
if (br_cnt == 0) {
|
2143
|
-
str_insert(new_str, nsp - new_str, '(');
|
2271
|
+
str_insert(new_str, (int)(nsp - new_str), '(');
|
2144
2272
|
nsp++;
|
2145
2273
|
} else {
|
2146
2274
|
br_cnt--;
|
@@ -2164,7 +2292,7 @@ char *qp_clean_str(char *str)
|
|
2164
2292
|
break;
|
2165
2293
|
default:
|
2166
2294
|
if (quote_open) {
|
2167
|
-
if (
|
2295
|
+
if (strrchr(special_char, b) && b != '|') {
|
2168
2296
|
*nsp++ = '\\';
|
2169
2297
|
}
|
2170
2298
|
}
|