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,


Reply via email to