[Groonga-commit] groonga/gcs [master] BqTranslator: support (or ...)

Back to archive index

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


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

  New Revision: 4a281a33a4e5641221c9235ae32320f31bbb21d2
  https://github.com/groonga/gcs/commit/4a281a33a4e5641221c9235ae32320f31bbb21d2

  Log:
    BqTranslator: support (or ...)

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

  Modified: lib/bq-translator.js (+27 -1)
===================================================================
--- lib/bq-translator.js    2012-07-27 17:05:10 +0900 (ce81495)
+++ lib/bq-translator.js    2012-07-27 17:07:40 +0900 (3c707fe)
@@ -38,7 +38,19 @@ BooleanQueryTranslator.prototype = {
         operator += character;
       } else if (character == " ") {
         this.skipSpaces(query, context);
-        var expression = this.translateGroupAnd(query, context);
+        var expression;
+        switch (operator) {
+        case "and":
+          expression = this.translateGroupAnd(query, context);
+          break;
+        case "or":
+          expression = this.translateGroupOr(query, context);
+          break;
+        default:
+          // TODO: report error: unknown operator
+          return "";
+          break;
+        }
         this.skipSpaces(query, context);
         if (query[context.offset] != ")") {
           // TODO: report error: have garbage
@@ -72,6 +84,20 @@ BooleanQueryTranslator.prototype = {
     // 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(" || ") + ")";
+      } else {
+        expressions.push(this.translateExpression(query, context));
+      }
+    }
+
+    // TODO: report error: missing close paren <)>
+    return "";
+  },
   translateExpression: function(query, context) {
     var startOffset = context.offset;
     var field;

  Modified: test/bq-translator.test.js (+4 -0)
===================================================================
--- test/bq-translator.test.js    2012-07-27 17:05:10 +0900 (f333a63)
+++ test/bq-translator.test.js    2012-07-27 17:07:40 +0900 (7080c73)
@@ -69,6 +69,10 @@ suite('BoolanQueryTranslator', function() {
             "field1 @ \"keyword1\" && field2 @ \"keyword2\"",
             "(and field1:'keyword1' field2:'keyword2')".length,
             "(and field1:'keyword1' field2:'keyword2') (other group)");
+  testGroup("or",
+            "(field1 @ \"keyword1\" || field2 @ \"keyword2\")",
+            "(or field1:'keyword1' field2:'keyword2')".length,
+            "(or field1:'keyword1' field2:'keyword2') (other group)");
 
   testExpression("value only: stirng: keywords",
                  "field @ \"keyword1\" && field @ \"keyword2\"",
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
Download 



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