Author: marvin
Date: Sat Jun 30 01:14:14 2012
New Revision: 1355618
URL: http://svn.apache.org/viewvc?rev=1355618&view=rev
Log:
Cache derived var "default_occur" in object.
Modified:
lucy/trunk/core/Lucy/Search/QueryParser.c
lucy/trunk/core/Lucy/Search/QueryParser.cfh
Modified: lucy/trunk/core/Lucy/Search/QueryParser.c
URL:
http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser.c?rev=1355618&r1=1355617&r2=1355618&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser.c (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser.c Sat Jun 30 01:14:14 2012
@@ -151,9 +151,14 @@ QParser_init(QueryParser *self, Schema *
}
VA_Sort(self->fields, NULL, NULL);
- if (!(CB_Equals_Str(self->default_boolop, "OR", 2)
- || CB_Equals_Str(self->default_boolop, "AND", 3))
- ) {
+ // Derive default "occur" from default boolean operator.
+ if (CB_Equals_Str(self->default_boolop, "OR", 2)) {
+ self->default_occur = SHOULD;
+ }
+ else if (CB_Equals_Str(self->default_boolop, "AND", 3)) {
+ self->default_occur = MUST;
+ }
+ else {
THROW(ERR, "Invalid value for default_boolop: %o",
self->default_boolop);
}
@@ -328,9 +333,6 @@ S_do_tree(QueryParser *self, CharBuf *qu
Hash *extractions) {
Query *retval;
bool_t apply_parens = false;
- uint32_t default_occur = CB_Equals_Str(self->default_boolop, "AND", 3)
- ? MUST
- : SHOULD;
VArray *elems = S_parse_flat_string(self, query_string);
// Determine whether this subclause is bracketed by parens.
@@ -373,7 +375,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
= (CharBuf*)Hash_Fetch(extractions, (Obj*)text);
LeafQuery *query = LeafQuery_new(field, inner_text);
ParserElem *new_elem = ParserElem_new(TOKEN_QUERY,
(Obj*)query);
- ParserElem_Set_Occur(new_elem, default_occur);
+ ParserElem_Set_Occur(new_elem, self->default_occur);
DECREF(Hash_Delete(extractions, (Obj*)text));
VA_Store(elems, i, (Obj*)new_elem);
}
@@ -387,7 +389,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
if (query) {
ParserElem *new_elem
= ParserElem_new(TOKEN_QUERY, (Obj*)query);
- ParserElem_Set_Occur(new_elem, default_occur);
+ ParserElem_Set_Occur(new_elem, self->default_occur);
VA_Store(elems, i, (Obj*)new_elem);
}
}
@@ -396,7 +398,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
LeafQuery *query = LeafQuery_new(field, text);
ParserElem *new_elem
= ParserElem_new(TOKEN_QUERY, (Obj*)query);
- ParserElem_Set_Occur(new_elem, default_occur);
+ ParserElem_Set_Occur(new_elem, self->default_occur);
VA_Store(elems, i, (Obj*)new_elem);
}
}
@@ -493,7 +495,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
}
Query *and_query = QParser_Make_AND_Query(self, children);
ParserElem_Set_Value(preceding, (Obj*)and_query);
- ParserElem_Set_Occur(preceding, default_occur);
+ ParserElem_Set_Occur(preceding, self->default_occur);
DECREF(and_query);
DECREF(children);
@@ -537,7 +539,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
}
Query *or_query = QParser_Make_OR_Query(self, children);
ParserElem_Set_Value(preceding, (Obj*)or_query);
- ParserElem_Set_Occur(preceding, default_occur);
+ ParserElem_Set_Occur(preceding, self->default_occur);
DECREF(or_query);
DECREF(children);
@@ -552,7 +554,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
// No elems means no query. Maybe the search string was something
// like 'NOT AND'
if (apply_parens) {
- retval = default_occur == SHOULD
+ retval = self->default_occur == SHOULD
? QParser_Make_OR_Query(self, NULL)
: QParser_Make_AND_Query(self, NULL);
}
Modified: lucy/trunk/core/Lucy/Search/QueryParser.cfh
URL:
http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser.cfh?rev=1355618&r1=1355617&r2=1355618&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser.cfh (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser.cfh Sat Jun 30 01:14:14 2012
@@ -51,6 +51,7 @@ public class Lucy::Search::QueryParser c
CharBuf *bool_group_label;
bool_t heed_colons;
uint32_t label_inc;
+ bool_t default_occur;
inert incremented QueryParser*
new(Schema *schema, Analyzer *analyzer = NULL,