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);
 }