You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2012/07/13 02:31:13 UTC
[lucy-commits] svn commit: r1361015 - in /lucy/trunk/core/Lucy/Search: QueryParser.c
QueryParser/ParserElem.c QueryParser/ParserElem.cfh
Author: marvin
Date: Fri Jul 13 00:31:12 2012
New Revision: 1361015
URL: http://svn.apache.org/viewvc?rev=1361015&view=rev
Log:
Improve encapsulation of ParserElem.
Change from manipulating the value of `occur` via accessors to
logical wrappers.
Modified:
lucy/trunk/core/Lucy/Search/QueryParser.c
lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c
lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh
Modified: lucy/trunk/core/Lucy/Search/QueryParser.c
URL: http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser.c?rev=1361015&r1=1361014&r2=1361015&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser.c (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser.c Fri Jul 13 00:31:12 2012
@@ -255,7 +255,9 @@ S_parse_subqueries(QueryParser *self, VA
VArray *sub_elems = VA_Slice(elems, left + 1, right - left - 1);
Query *subquery = S_parse_subquery(self, sub_elems, field, true);
ParserElem *new_elem = ParserElem_new(TOKEN_QUERY, (Obj*)subquery);
- ParserElem_Set_Occur(new_elem, self->default_occur);
+ if (self->default_occur == MUST) {
+ ParserElem_Require(new_elem);
+ }
DECREF(sub_elems);
// Replace the elements used to create the subquery with the subquery
@@ -369,7 +371,9 @@ S_compose_inner_queries(QueryParser *sel
LeafQuery *query = LeafQuery_new(field, text);
ParserElem *new_elem
= ParserElem_new(TOKEN_QUERY, (Obj*)query);
- ParserElem_Set_Occur(new_elem, self->default_occur);
+ if (self->default_occur == MUST) {
+ ParserElem_Require(new_elem);
+ }
VA_Store(elems, i, (Obj*)new_elem);
}
}
@@ -402,7 +406,7 @@ S_compose_not_queries(QueryParser *self,
for (uint32_t i = 0, max = VA_Get_Size(elems); i < max; i++) {
ParserElem *elem = (ParserElem*)VA_Fetch(elems, i);
if (ParserElem_Get_Type(elem) == TOKEN_QUERY
- && ParserElem_Get_Occur(elem) == MUST_NOT
+ && ParserElem_Negated(elem)
) {
Query *inner_query = (Query*)ParserElem_As(elem, QUERY);
Query *not_query = QParser_Make_NOT_Query(self, inner_query);
@@ -471,7 +475,9 @@ S_compose_and_queries(QueryParser *self,
}
Query *and_query = QParser_Make_AND_Query(self, children);
ParserElem_Set_Value(preceding, (Obj*)and_query);
- ParserElem_Set_Occur(preceding, self->default_occur);
+ if (self->default_occur == MUST) {
+ ParserElem_Require(preceding);
+ }
DECREF(and_query);
DECREF(children);
@@ -514,7 +520,9 @@ S_compose_or_queries(QueryParser *self,
}
Query *or_query = QParser_Make_OR_Query(self, children);
ParserElem_Set_Value(preceding, (Obj*)or_query);
- ParserElem_Set_Occur(preceding, self->default_occur);
+ if (self->default_occur == MUST) {
+ ParserElem_Require(preceding);
+ }
DECREF(or_query);
DECREF(children);
@@ -555,16 +563,14 @@ S_compose_subquery(QueryParser *self, VA
// Demux elems into bins.
for (uint32_t i = 0; i < num_elems; i++) {
ParserElem *elem = (ParserElem*)VA_Fetch(elems, i);
- uint32_t occur = ParserElem_Get_Occur(elem);
- Query *query = (Query*)ParserElem_As(elem, QUERY);
- if (occur == MUST) {
- VA_Push(required, INCREF(query));
+ if (ParserElem_Required(elem)) {
+ VA_Push(required, INCREF(ParserElem_As(elem, QUERY)));
}
- else if (occur == SHOULD) {
- VA_Push(optional, INCREF(query));
+ else if (ParserElem_Optional(elem)) {
+ VA_Push(optional, INCREF(ParserElem_As(elem, QUERY)));
}
- else if (occur == MUST_NOT) {
- VA_Push(negated, INCREF(query));
+ else if (ParserElem_Negated(elem)) {
+ VA_Push(negated, INCREF(ParserElem_As(elem, QUERY)));
}
}
uint32_t num_required = VA_Get_Size(required);
Modified: lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c
URL: http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c?rev=1361015&r1=1361014&r2=1361015&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c Fri Jul 13 00:31:12 2012
@@ -60,16 +60,6 @@ ParserElem_get_type(ParserElem *self) {
}
void
-ParserElem_set_occur(ParserElem *self, uint32_t occur) {
- self->occur = occur;
-}
-
-uint32_t
-ParserElem_get_occur(ParserElem *self) {
- return self->occur;
-}
-
-void
ParserElem_require(ParserElem *self) {
switch (self->occur) {
case LUCY_QPARSER_SHOULD:
@@ -112,3 +102,18 @@ ParserElem_negate(ParserElem *self) {
}
}
+bool_t
+ParserElem_optional(ParserElem *self) {
+ return self->occur == LUCY_QPARSER_SHOULD;
+}
+
+bool_t
+ParserElem_required(ParserElem *self) {
+ return self->occur == LUCY_QPARSER_MUST;
+}
+
+bool_t
+ParserElem_negated(ParserElem *self) {
+ return self->occur == LUCY_QPARSER_MUST_NOT;
+}
+
Modified: lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh
URL: http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh?rev=1361015&r1=1361014&r2=1361015&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh Fri Jul 13 00:31:12 2012
@@ -63,10 +63,19 @@ class Lucy::Search::QueryParser::ParserE
void
Unrequire(ParserElem *self);
- void
- Set_Occur(ParserElem *self, uint32_t occur);
+ /** Return true if the element MUST be present.
+ */
+ bool_t
+ Required(ParserElem *self);
+
+ /** Return true if the element SHOULD be present.
+ */
+ bool_t
+ Optional(ParserElem *self);
- uint32_t
- Get_Occur(ParserElem *self);
+ /** Return true if the element MUST NOT be present.
+ */
+ bool_t
+ Negated(ParserElem *self);
}