[Groonga-commit] groonga/gcs [master] BqTranslator: use the same function for "and" and "or"

Back to archive index

null+****@clear***** null+****@clear*****
2012年 7月 27日 (金) 17:09:34 JST


Kouhei Sutou	2012-07-27 17:09:34 +0900 (Fri, 27 Jul 2012)

  New Revision: 2aa193bd9fce9b3807d2ffaf59ccf2dc44b44ac8
  https://github.com/groonga/gcs/commit/2aa193bd9fce9b3807d2ffaf59ccf2dc44b44ac8

  Log:
    BqTranslator: use the same function for "and" and "or"

  Modified files:
    lib/bq-translator.js
    test/bq-translator.test.js

  Modified: lib/bq-translator.js (+4 -18)
===================================================================
--- lib/bq-translator.js    2012-07-27 17:07:40 +0900 (3c707fe)
+++ lib/bq-translator.js    2012-07-27 17:09:34 +0900 (9a69fa9)
@@ -41,10 +41,10 @@ BooleanQueryTranslator.prototype = {
         var expression;
         switch (operator) {
         case "and":
-          expression = this.translateGroupAnd(query, context);
+          expression = this.translateGroupSetOperation(query, context, "&&");
           break;
         case "or":
-          expression = this.translateGroupOr(query, context);
+          expression = this.translateGroupSetOperation(query, context, "||");
           break;
         default:
           // TODO: report error: unknown operator
@@ -70,26 +70,12 @@ BooleanQueryTranslator.prototype = {
     // TODO: report error: missing close paren <)>
     return "";
   },
-  translateGroupAnd: function(query, context) {
+  translateGroupSetOperation: function(query, context, setOperator) {
     var expressions = [];
     while (context.offset < query.length) {
       this.skipSpaces(query, context);
       if (query[context.offset] == ")") {
-        return expressions.join(" && ");
-      } else {
-        expressions.push(this.translateExpression(query, context));
-      }
-    }
-
-    // TODO: report error: missing close paren <)>
-    return "";
-  },
-  translateGroupOr: function(query, context) {
-    var expressions = [];
-    while (context.offset < query.length) {
-      this.skipSpaces(query, context);
-      if (query[context.offset] == ")") {
-        return "(" + expressions.join(" || ") + ")";
+        return "(" + expressions.join(" " + setOperator + " ") + ")";
       } else {
         expressions.push(this.translateExpression(query, context));
       }

  Modified: test/bq-translator.test.js (+1 -1)
===================================================================
--- test/bq-translator.test.js    2012-07-27 17:07:40 +0900 (7080c73)
+++ test/bq-translator.test.js    2012-07-27 17:09:34 +0900 (fcb022e)
@@ -66,7 +66,7 @@ suite('BoolanQueryTranslator', function() {
             "(and 'query query' type:'ModelName')");
 
   testGroup("and",
-            "field1 @ \"keyword1\" && field2 @ \"keyword2\"",
+            "(field1 @ \"keyword1\" && field2 @ \"keyword2\")",
             "(and field1:'keyword1' field2:'keyword2')".length,
             "(and field1:'keyword1' field2:'keyword2') (other group)");
   testGroup("or",
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
Download 



Groonga-commit メーリングリストの案内
Back to archive index