Changeset 8f9e905705f715e2dc4745a098e9a1819271873a

Show
Ignore:
Timestamp:
04/23/08 12:42:51 (9 months ago)
Author:
David Balmain <dbalmain@…>
Parents:
7799d1d6f07fd24cc0cf0b784340f994374fc5b1
Children:
294d6fdf2503283b97bc859af2e7b875a85a6eea, daefc89abb93c1d38fc967afa50714e5b878122b
git-committer:
David Balmain <dbalmain@gmail.com> / 2008-04-23T12:42:51Z+1000
Message:

Cleaned up the QueryParser API

The QueryParser now uses the new pointer HashSet?. You no longer need to build hashsets to create a QueryParser. Simply call qp_new and then add your fields with qp_add_field. For example;

*parser = qp_new(analyzer);
qp_add_field(parser, "title", true, true);
qp_add_field(parser, "content", true, false);

Location:
c
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • c/include/internal.h

    r7799d1 r8f9e90  
    767767#define qfilt_new                               frt_qfilt_new 
    768768#define qfilt_new_nr                            frt_qfilt_new_nr 
     769#define qp_add_field                            frt_qp_add_field 
    769770#define qp_clean_str                            frt_qp_clean_str 
    770771#define qp_default_fuzzy_min_sim                frt_qp_default_fuzzy_min_sim 
  • c/include/search.h

    r4ba05f r8f9e90  
    932932typedef FrtQueryParser FrtQParser; /* QParser is an alias for QueryParser */ 
    933933 
    934 extern FrtQParser *frt_qp_new(FrtHashSet *all_fields, FrtHashSet *def_fields, 
    935                        FrtHashSet *tokenized_fields, FrtAnalyzer *analyzer); 
     934extern FrtQParser *frt_qp_new(FrtAnalyzer *analyzer); 
     935extern void frt_qp_add_field(FrtQParser *self, const char *field, 
     936                             bool is_default, bool is_tokenized); 
    936937extern void frt_qp_destroy(FrtQParser *self); 
    937938extern FrtQuery *frt_qp_parse(FrtQParser *self, char *qstr); 
  • c/src/ind.c

    r553474 r8f9e90  
    4444} 
    4545 
     46 
    4647Index *index_new(Store *store, Analyzer *analyzer, HashSet *def_fields, 
    4748                 bool create) 
    4849{ 
    49     HashSet *all_fields = hs_new_str(NULL); 
    5050    Index *self = ALLOC_AND_ZERO(Index); 
     51    HashSetEntry *hse; 
     52    /* FIXME: need to add these to the query parser */ 
    5153    self->config = default_config; 
    5254    mutex_init(&self->mutex, NULL); 
     
    8183 
    8284    REF(self->analyzer); 
    83     self->qp = qp_new(all_fields, def_fields, NULL, self->analyzer); 
     85    self->qp = qp_new(self->analyzer); 
     86    for (hse = def_fields->first; hse; hse = hse->next) { 
     87        qp_add_field(self->qp, (const char *)hse->elem, true, true); 
     88    } 
    8489    /* Index is a convenience class so set qp convenience options */ 
    8590    self->qp->allow_any_fields = true; 
  • c/src/q_parser.c

    rb39568 r8f9e90  
    187187static BooleanClause *get_bool_cls(Query *q, BCType occur); 
    188188 
    189 static Query *get_term_q(QParser *qp, char *field, char *word); 
    190 static Query *get_fuzzy_q(QParser *qp, char *field, char *word, char *slop); 
    191 static Query *get_wild_q(QParser *qp, char *field, char *pattern); 
    192  
    193 static HashSet *first_field(QParser *qp, char *field); 
    194 static HashSet *add_field(QParser *qp, char *field); 
     189static Query *get_term_q(QParser *qp, const char *field, char *word); 
     190static Query *get_fuzzy_q(QParser *qp, const char *field, char *word, 
     191                          char *slop); 
     192static Query *get_wild_q(QParser *qp, const char *field, char *pattern); 
     193 
     194static HashSet *first_field(QParser *qp, const char *field); 
     195static HashSet *add_field(QParser *qp, const char *field); 
    195196 
    196197static Query *get_phrase_q(QParser *qp, Phrase *phrase, char *slop); 
     
    201202static void ph_destroy(Phrase *self); 
    202203 
    203 static Query *get_r_q(QParser *qp, char *field, char *from, char *to, 
     204static Query *get_r_q(QParser *qp, const char *field, char *from, char *to, 
    204205                      bool inc_lower, bool inc_upper); 
    205206 
     
    257258 
    258259/* Line 216 of yacc.c.  */ 
    259 #line 260 "src/q_parser.c" 
     260#line 261 "src/q_parser.c" 
    260261 
    261262#ifdef short 
     
    560561static const yytype_uint16 yyrline[] = 
    561562{ 
    562        0,   225,   225,   226,   228,   229,   230,   231,   233,   234, 
    563      235,   237,   238,   240,   241,   242,   243,   244,   245,   246, 
    564      248,   249,   250,   252,   254,   254,   256,   256,   256,   259, 
    565      260,   262,   263,   264,   265,   267,   268,   269,   270,   271, 
    566      273,   274,   275,   276,   277,   278,   279,   280,   281,   282, 
    567      283,   284 
     563       0,   226,   226,   227,   229,   230,   231,   232,   234,   235, 
     564     236,   238,   239,   241,   242,   243,   244,   245,   246,   247, 
     565     249,   250,   251,   253,   255,   255,   257,   257,   257,   260, 
     566     261,   263,   264,   265,   266,   268,   269,   270,   271,   272, 
     567     274,   275,   276,   277,   278,   279,   280,   281,   282,   283, 
     568     284,   285 
    568569}; 
    569570#endif 
     
    12241225    { 
    12251226      case 27: /* "bool_q" */ 
    1226 #line 220 "src/q_parser.y" 
     1227#line 221 "src/q_parser.y" 
    12271228        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1228 #line 1229 "src/q_parser.c" 
     1229#line 1230 "src/q_parser.c" 
    12291230        break; 
    12301231      case 28: /* "bool_clss" */ 
    1231 #line 222 "src/q_parser.y" 
     1232#line 223 "src/q_parser.y" 
    12321233        { if ((yyvaluep->bclss) && qp->destruct) bca_destroy((yyvaluep->bclss)); }; 
    1233 #line 1234 "src/q_parser.c" 
     1234#line 1235 "src/q_parser.c" 
    12341235        break; 
    12351236      case 29: /* "bool_cls" */ 
    1236 #line 221 "src/q_parser.y" 
     1237#line 222 "src/q_parser.y" 
    12371238        { if ((yyvaluep->bcls) && qp->destruct) bc_deref((yyvaluep->bcls)); }; 
    1238 #line 1239 "src/q_parser.c" 
     1239#line 1240 "src/q_parser.c" 
    12391240        break; 
    12401241      case 30: /* "boosted_q" */ 
    1241 #line 220 "src/q_parser.y" 
     1242#line 221 "src/q_parser.y" 
    12421243        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1243 #line 1244 "src/q_parser.c" 
     1244#line 1245 "src/q_parser.c" 
    12441245        break; 
    12451246      case 31: /* "q" */ 
    1246 #line 220 "src/q_parser.y" 
     1247#line 221 "src/q_parser.y" 
    12471248        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1248 #line 1249 "src/q_parser.c" 
     1249#line 1250 "src/q_parser.c" 
    12491250        break; 
    12501251      case 32: /* "term_q" */ 
    1251 #line 220 "src/q_parser.y" 
     1252#line 221 "src/q_parser.y" 
    12521253        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1253 #line 1254 "src/q_parser.c" 
     1254#line 1255 "src/q_parser.c" 
    12541255        break; 
    12551256      case 33: /* "wild_q" */ 
    1256 #line 220 "src/q_parser.y" 
     1257#line 221 "src/q_parser.y" 
    12571258        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1258 #line 1259 "src/q_parser.c" 
     1259#line 1260 "src/q_parser.c" 
    12591260        break; 
    12601261      case 34: /* "field_q" */ 
    1261 #line 220 "src/q_parser.y" 
     1262#line 221 "src/q_parser.y" 
    12621263        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1263 #line 1264 "src/q_parser.c" 
     1264#line 1265 "src/q_parser.c" 
    12641265        break; 
    12651266      case 39: /* "phrase_q" */ 
    1266 #line 220 "src/q_parser.y" 
     1267#line 221 "src/q_parser.y" 
    12671268        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1268 #line 1269 "src/q_parser.c" 
     1269#line 1270 "src/q_parser.c" 
    12691270        break; 
    12701271      case 40: /* "ph_words" */ 
    1271 #line 223 "src/q_parser.y" 
     1272#line 224 "src/q_parser.y" 
    12721273        { if ((yyvaluep->phrase) && qp->destruct) ph_destroy((yyvaluep->phrase)); }; 
    1273 #line 1274 "src/q_parser.c" 
     1274#line 1275 "src/q_parser.c" 
    12741275        break; 
    12751276      case 41: /* "range_q" */ 
    1276 #line 220 "src/q_parser.y" 
     1277#line 221 "src/q_parser.y" 
    12771278        { if ((yyvaluep->query) && qp->destruct) q_deref((yyvaluep->query)); }; 
    1278 #line 1279 "src/q_parser.c" 
     1279#line 1280 "src/q_parser.c" 
    12791280        break; 
    12801281 
     
    15851586    { 
    15861587        case 2: 
    1587 #line 225 "src/q_parser.y" 
     1588#line 226 "src/q_parser.y" 
    15881589    {   qp->result = (yyval.query) = NULL; } 
    15891590    break; 
    15901591 
    15911592  case 3: 
    1592 #line 226 "src/q_parser.y" 
     1593#line 227 "src/q_parser.y" 
    15931594    { T qp->result = (yyval.query) = get_bool_q((yyvsp[(1) - (1)].bclss)); E } 
    15941595    break; 
    15951596 
    15961597  case 4: 
    1597 #line 228 "src/q_parser.y" 
     1598#line 229 "src/q_parser.y" 
    15981599    { T (yyval.bclss) = first_cls((yyvsp[(1) - (1)].bcls)); E } 
    15991600    break; 
    16001601 
    16011602  case 5: 
    1602 #line 229 "src/q_parser.y" 
     1603#line 230 "src/q_parser.y" 
    16031604    { T (yyval.bclss) = add_and_cls((yyvsp[(1) - (3)].bclss), (yyvsp[(3) - (3)].bcls)); E } 
    16041605    break; 
    16051606 
    16061607  case 6: 
    1607 #line 230 "src/q_parser.y" 
     1608#line 231 "src/q_parser.y" 
    16081609    { T (yyval.bclss) = add_or_cls((yyvsp[(1) - (3)].bclss), (yyvsp[(3) - (3)].bcls)); E } 
    16091610    break; 
    16101611 
    16111612  case 7: 
    1612 #line 231 "src/q_parser.y" 
     1613#line 232 "src/q_parser.y" 
    16131614    { T (yyval.bclss) = add_default_cls(qp, (yyvsp[(1) - (2)].bclss), (yyvsp[(2) - (2)].bcls)); E } 
    16141615    break; 
    16151616 
    16161617  case 8: 
    1617 #line 233 "src/q_parser.y" 
     1618#line 234 "src/q_parser.y" 
    16181619    { T (yyval.bcls) = get_bool_cls((yyvsp[(2) - (2)].query), BC_MUST); E } 
    16191620    break; 
    16201621 
    16211622  case 9: 
    1622 #line 234 "src/q_parser.y" 
     1623#line 235 "src/q_parser.y" 
    16231624    { T (yyval.bcls) = get_bool_cls((yyvsp[(2) - (2)].query), BC_MUST_NOT); E } 
    16241625    break; 
    16251626 
    16261627  case 10: 
    1627 #line 235 "src/q_parser.y" 
     1628#line 236 "src/q_parser.y" 
    16281629    { T (yyval.bcls) = get_bool_cls((yyvsp[(1) - (1)].query), BC_SHOULD); E } 
    16291630    break; 
    16301631 
    16311632  case 12: 
    1632 #line 238 "src/q_parser.y" 
     1633#line 239 "src/q_parser.y" 
    16331634    { T if ((yyvsp[(1) - (3)].query)) sscanf((yyvsp[(3) - (3)].str),"%f",&((yyvsp[(1) - (3)].query)->boost));  (yyval.query)=(yyvsp[(1) - (3)].query); E } 
    16341635    break; 
    16351636 
    16361637  case 14: 
    1637 #line 241 "src/q_parser.y" 
     1638#line 242 "src/q_parser.y" 
    16381639    { T (yyval.query) = bq_new_max(true, qp->max_clauses); E } 
    16391640    break; 
    16401641 
    16411642  case 15: 
    1642 #line 242 "src/q_parser.y" 
     1643#line 243 "src/q_parser.y" 
    16431644    { T (yyval.query) = get_bool_q((yyvsp[(2) - (3)].bclss)); E } 
    16441645    break; 
    16451646 
    16461647  case 20: 
    1647 #line 248 "src/q_parser.y" 
     1648#line 249 "src/q_parser.y" 
    16481649    { FLDS((yyval.query), get_term_q(qp, field, (yyvsp[(1) - (1)].str))); Y} 
    16491650    break; 
    16501651 
    16511652  case 21: 
    1652 #line 249 "src/q_parser.y" 
     1653#line 250 "src/q_parser.y" 
    16531654    { FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str))); Y} 
    16541655    break; 
    16551656 
    16561657  case 22: 
    1657 #line 250 "src/q_parser.y" 
     1658#line 251 "src/q_parser.y" 
    16581659    { FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[(1) - (2)].str), NULL)); Y} 
    16591660    break; 
    16601661 
    16611662  case 23: 
    1662 #line 252 "src/q_parser.y" 
     1663#line 253 "src/q_parser.y" 
    16631664    { FLDS((yyval.query), get_wild_q(qp, field, (yyvsp[(1) - (1)].str))); Y} 
    16641665    break; 
    16651666 
    16661667  case 24: 
    1667 #line 254 "src/q_parser.y" 
     1668#line 255 "src/q_parser.y" 
    16681669    { qp_pop_fields(qp); } 
    16691670    break; 
    16701671 
    16711672  case 25: 
    1672 #line 255 "src/q_parser.y" 
     1673#line 256 "src/q_parser.y" 
    16731674    { (yyval.query) = (yyvsp[(3) - (4)].query); } 
    16741675    break; 
    16751676 
    16761677  case 26: 
    1677 #line 256 "src/q_parser.y" 
     1678#line 257 "src/q_parser.y" 
    16781679    { qp_push_fields(qp, qp->all_fields, false); } 
    16791680    break; 
    16801681 
    16811682  case 27: 
    1682 #line 256 "src/q_parser.y" 
     1683#line 257 "src/q_parser.y" 
    16831684    { qp_pop_fields(qp); } 
    16841685    break; 
    16851686 
    16861687  case 28: 
    1687 #line 257 "src/q_parser.y" 
     1688#line 258 "src/q_parser.y" 
    16881689    { (yyval.query) = (yyvsp[(4) - (5)].query); } 
    16891690    break; 
    16901691 
    16911692  case 29: 
    1692 #line 259 "src/q_parser.y" 
     1693#line 260 "src/q_parser.y" 
    16931694    { (yyval.hashset) = first_field(qp, (yyvsp[(1) - (1)].str)); } 
    16941695    break; 
    16951696 
    16961697  case 30: 
    1697 #line 260 "src/q_parser.y" 
     1698#line 261 "src/q_parser.y" 
    16981699    { (yyval.hashset) = add_field(qp, (yyvsp[(3) - (3)].str));} 
    16991700    break; 
    17001701 
    17011702  case 31: 
    1702 #line 262 "src/q_parser.y" 
     1703#line 263 "src/q_parser.y" 
    17031704    { (yyval.query) = get_phrase_q(qp, (yyvsp[(2) - (3)].phrase), NULL); } 
    17041705    break; 
    17051706 
    17061707  case 32: 
    1707 #line 263 "src/q_parser.y" 
     1708#line 264 "src/q_parser.y" 
    17081709    { (yyval.query) = get_phrase_q(qp, (yyvsp[(2) - (5)].phrase), (yyvsp[(5) - (5)].str)); } 
    17091710    break; 
    17101711 
    17111712  case 33: 
    1712 #line 264 "src/q_parser.y" 
     1713#line 265 "src/q_parser.y" 
    17131714    { (yyval.query) = NULL; } 
    17141715    break; 
    17151716 
    17161717  case 34: 
    1717 #line 265 "src/q_parser.y" 
     1718#line 266 "src/q_parser.y" 
    17181719    { (yyval.query) = NULL; (void)(yyvsp[(4) - (4)].str);} 
    17191720    break; 
    17201721 
    17211722  case 35: 
    1722 #line 267 "src/q_parser.y" 
     1723#line 268 "src/q_parser.y" 
    17231724    { (yyval.phrase) = ph_first_word((yyvsp[(1) - (1)].str)); } 
    17241725    break; 
    17251726 
    17261727  case 36: 
    1727 #line 268 "src/q_parser.y" 
     1728#line 269 "src/q_parser.y" 
    17281729    { (yyval.phrase) = ph_first_word(NULL); } 
    17291730    break; 
    17301731 
    17311732  case 37: 
    1732 #line 269 "src/q_parser.y" 
     1733#line 270 "src/q_parser.y" 
    17331734    { (yyval.phrase) = ph_add_word((yyvsp[(1) - (2)].phrase), (yyvsp[(2) - (2)].str)); } 
    17341735    break; 
    17351736 
    17361737  case 38: 
    1737 #line 270 "src/q_parser.y" 
     1738#line 271 "src/q_parser.y" 
    17381739    { (yyval.phrase) = ph_add_word((yyvsp[(1) - (3)].phrase), NULL); } 
    17391740    break; 
    17401741 
    17411742  case 39: 
    1742 #line 271 "src/q_parser.y" 
     1743#line 272 "src/q_parser.y" 
    17431744    { (yyval.phrase) = ph_add_multi_word((yyvsp[(1) - (3)].phrase), (yyvsp[(3) - (3)].str));  } 
    17441745    break; 
    17451746 
    17461747  case 40: 
    1747 #line 273 "src/q_parser.y" 
     1748#line 274 "src/q_parser.y" 
    17481749    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str),  (yyvsp[(3) - (4)].str),  true,  true)); Y} 
    17491750    break; 
    17501751 
    17511752  case 41: 
    1752 #line 274 "src/q_parser.y" 
     1753#line 275 "src/q_parser.y" 
    17531754    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str),  (yyvsp[(3) - (4)].str),  true,  false)); Y} 
    17541755    break; 
    17551756 
    17561757  case 42: 
    1757 #line 275 "src/q_parser.y" 
     1758#line 276 "src/q_parser.y" 
    17581759    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str),  (yyvsp[(3) - (4)].str),  false, true)); Y} 
    17591760    break; 
    17601761 
    17611762  case 43: 
    1762 #line 276 "src/q_parser.y" 
     1763#line 277 "src/q_parser.y" 
    17631764    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str),  (yyvsp[(3) - (4)].str),  false, false)); Y} 
    17641765    break; 
    17651766 
    17661767  case 44: 
    1767 #line 277 "src/q_parser.y" 
     1768#line 278 "src/q_parser.y" 
    17681769    { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(2) - (3)].str),  false, false)); Y} 
    17691770    break; 
    17701771 
    17711772  case 45: 
    1772 #line 278 "src/q_parser.y" 
     1773#line 279 "src/q_parser.y" 
    17731774    { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(2) - (3)].str),  false, true)); Y} 
    17741775    break; 
    17751776 
    17761777  case 46: 
    1777 #line 279 "src/q_parser.y" 
     1778#line 280 "src/q_parser.y" 
    17781779    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (3)].str),  NULL,true,  false)); Y} 
    17791780    break; 
    17801781 
    17811782  case 47: 
    1782 #line 280 "src/q_parser.y" 
     1783#line 281 "src/q_parser.y" 
    17831784    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (3)].str),  NULL,false, false)); Y} 
    17841785    break; 
    17851786 
    17861787  case 48: 
    1787 #line 281 "src/q_parser.y" 
     1788#line 282 "src/q_parser.y" 
    17881789    { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(2) - (2)].str),  false, false)); Y} 
    17891790    break; 
    17901791 
    17911792  case 49: 
    1792 #line 282 "src/q_parser.y" 
     1793#line 283 "src/q_parser.y" 
    17931794    { FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(3) - (3)].str),  false, true)); Y} 
    17941795    break; 
    17951796 
    17961797  case 50: 
    1797 #line 283 "src/q_parser.y" 
     1798#line 284 "src/q_parser.y" 
    17981799    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(3) - (3)].str),  NULL,true,  false)); Y} 
    17991800    break; 
    18001801 
    18011802  case 51: 
    1802 #line 284 "src/q_parser.y" 
     1803#line 285 "src/q_parser.y" 
    18031804    { FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (2)].str),  NULL,false, false)); Y} 
    18041805    break; 
     
    18061807 
    18071808/* Line 1267 of yacc.c.  */ 
    1808 #line 1809 "src/q_parser.c" 
     1809#line 1810 "src/q_parser.c" 
    18091810      default: break; 
    18101811    } 
     
    20202021 
    20212022 
    2022 #line 286 "src/q_parser.y" 
     2023#line 287 "src/q_parser.y" 
    20232024 
    20242025 
     
    22112212 * with the text to be tokenized. 
    22122213 */ 
    2213 static TokenStream *get_cached_ts(QParser *qp, char *field, char *text) 
     2214static TokenStream *get_cached_ts(QParser *qp, const char *field, char *text) 
    22142215{ 
    22152216    TokenStream *ts; 
    2216     if (!qp->tokenized_fields || hs_exists(qp->tokenized_fields, field)) { 
     2217    if (hs_exists(qp->tokenized_fields, field)) { 
    22172218        ts = (TokenStream *)h_get(qp->ts_cache, field); 
    22182219        if (!ts) { 
     
    23832384 * address and tokenized with the same tokenizer. 
    23842385 */ 
    2385 static Query *get_term_q(QParser *qp, char *field, char *word) 
     2386static Query *get_term_q(QParser *qp, const char *field, char *word) 
    23862387{ 
    23872388    Query *q; 
     
    24212422 * ignored. 
    24222423 */ 
    2423 static Query *get_fuzzy_q(QParser *qp, char *field, char *word, char *slop_str) 
     2424static Query *get_fuzzy_q(QParser *qp, const char *field, char *word, 
     2425                          char *slop_str) 
    24242426{ 
    24252427    Query *q; 
     
    24802482 * only wild char (*, ?) in the pattern is a '*' at the end of the pattern. 
    24812483 */ 
    2482 static Query *get_wild_q(QParser *qp, char *field, char *pattern) 
     2484static Query *get_wild_q(QParser *qp, const char *field, char *pattern) 
    24832485{ 
    24842486    Query *q; 
     
    25242526 * Adds another field to the top of the FieldStack. 
    25252527 */ 
    2526 static HashSet *add_field(QParser *qp, char *field) 
    2527 { 
     2528static HashSet *add_field(QParser *qp, const char *field) 
     2529{ 
     2530    field = intern(field); 
    25282531    if (qp->allow_any_fields || hs_exists(qp->all_fields, field)) { 
    2529         hs_add(qp->fields, (char *)intern(field)); 
     2532        hs_add(qp->fields, (char *)field); 
    25302533    } 
    25312534    return qp->fields; 
     
    25372540 * fields set. 
    25382541 */ 
    2539 static HashSet *first_field(QParser *qp, char *field) 
    2540 { 
    2541     qp_push_fields(qp, hs_new_str(NULL), true); 
     2542static HashSet *first_field(QParser *qp, const char *field) 
     2543{ 
     2544    qp_push_fields(qp, hs_new_ptr(NULL), true); 
    25422545    return add_field(qp, field); 
    25432546} 
     
    26512654 * custom tokenizer which will leave dbalmain@gmail.com as a single token. 
    26522655 */ 
    2653 static Query *get_phrase_query(QParser *qp, char *field, 
     2656static Query *get_phrase_query(QParser *qp, const char *field, 
    26542657                               Phrase *phrase, char *slop_str) 
    26552658{ 
     
    27772780 * tokenizer also downcased its terms. 
    27782781 */ 
    2779 static Query *get_r_q(QParser *qp, char *field, char *from, char *to, 
     2782static Query *get_r_q(QParser *qp, const char *field, char *from, char *to, 
    27802783                      bool inc_lower, bool inc_upper) 
    27812784{ 
     
    28562859void qp_destroy(QParser *self) 
    28572860{ 
    2858     if (self->def_fields != self->all_fields) { 
    2859         hs_destroy(self->def_fields); 
    2860     } 
    2861     if (self->tokenized_fields) { 
    2862         hs_destroy(self->tokenized_fields); 
    2863     } 
    2864     if (self->dynbuf) { 
    2865         free(self->dynbuf); 
    2866     } 
     2861    hs_destroy(self->tokenized_fields); 
     2862    hs_destroy(self->def_fields); 
    28672863    hs_destroy(self->all_fields); 
    28682864 
     
    28822878 * +def_fields+ must also exist in +all_fields+. This should make sense. 
    28832879 */ 
    2884 QParser *qp_new(HashSet *all_fields, HashSet *def_fields, 
    2885                 HashSet *tokenized_fields, Analyzer *analyzer) 
     2880QParser *qp_new(Analyzer *analyzer) 
    28862881{ 
    28872882    QParser *self = ALLOC(QParser); 
     
    28952890    self->use_typed_range_query = false; 
    28962891    self->def_slop = 0; 
    2897     self->all_fields = all_fields; 
    2898     self->tokenized_fields = tokenized_fields; 
    2899     if (def_fields) { 
    2900         HashSetEntry *hse; 
    2901         self->def_fields = def_fields; 
    2902         for (hse = def_fields->first; hse; hse = hse->next) { 
    2903             if (!hs_exists(self->all_fields, hse->elem)) { 
    2904                 hs_add(self->all_fields, hse->elem); 
    2905             } 
    2906         } 
    2907     } 
    2908     else { 
    2909         self->def_fields = all_fields; 
    2910     } 
     2892 
     2893    self->tokenized_fields = hs_new_ptr(NULL); 
     2894    self->all_fields = hs_new_ptr(NULL); 
     2895    self->def_fields = hs_new_ptr(NULL); 
     2896 
    29112897    self->fields_top = NULL; 
    29122898    qp_push_fields(self, self->def_fields, false); 
     
    29202906    mutex_init(&self->mutex, NULL); 
    29212907    return self; 
     2908} 
     2909 
     2910void qp_add_field(QParser *self, 
     2911                  const char *field, 
     2912                  bool is_default, 
     2913                  bool is_tokenized) 
     2914{ 
     2915    field = intern(field); 
     2916    hs_add(self->all_fields, (char *)field); 
     2917    if (is_default) { 
     2918        hs_add(self->def_fields, (char *)field); 
     2919    } 
     2920    if (is_tokenized) { 
     2921        hs_add(self->tokenized_fields, (char *)field); 
     2922    } 
    29222923} 
    29232924 
  • c/src/q_parser.y

    r4ba05f r8f9e90