[Groonga-commit] groonga/gcs [master] bq: support and by "+"

Back to archive index

null+****@clear***** null+****@clear*****
2012年 8月 6日 (月) 11:50:44 JST


Kouhei Sutou	2012-08-06 11:50:44 +0900 (Mon, 06 Aug 2012)

  New Revision: 3f6a46981ec00649c969d3f9cb1229f790cd29af
  https://github.com/groonga/gcs/commit/3f6a46981ec00649c969d3f9cb1229f790cd29af

  Log:
    bq: support and by "+"

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

  Modified: lib/bq-translator.js (+9 -8)
===================================================================
--- lib/bq-translator.js    2012-08-06 11:23:52 +0900 (4cf3daf)
+++ lib/bq-translator.js    2012-08-06 11:50:44 +0900 (2dff377)
@@ -224,22 +224,20 @@ BooleanQueryTranslator.prototype = {
     }
 
     this.offset++;
-    var values = [];
+    var tokens = [];
     var value = "";
     for (; this.offset < this.query.length; this.offset++) {
       var character = this.query[this.offset];
       if (character == "'") {
         this.offset++;
-        values.push("\"" + value + "\"");
-        var expressions = values.map(function (value) {
-          return field + " @ " + value;
-        });
-        return expressions.join(" && ");
+        tokens.push(this.translateExpressionValueStringKeyword(field, value));
+        return tokens.join(" ");
       }
 
-      if (character == " ") {
+      if (character == " " || character == "+") {
         if (value.length > 0) {
-          values.push("\"" + value + "\"");
+          tokens.push(this.translateExpressionValueStringKeyword(field, value));
+          tokens.push("&&");
           value = "";
         }
       } else if (character == "\\") {
@@ -256,6 +254,9 @@ BooleanQueryTranslator.prototype = {
     // TODO: report error: missing close quote <'>
     return "";
   },
+  translateExpressionValueStringKeyword: function(field, value) {
+    return field + " @ " + "\"" + value + "\"";
+  },
   translateExpressionValuePhrase: function(field) {
     if (!(this.query[this.offset] == "'" &&
           this.query[this.offset + 1] == "\"")) {

  Modified: test/bq-translator.test.js (+4 -0)
===================================================================
--- test/bq-translator.test.js    2012-08-06 11:23:52 +0900 (a9615ad)
+++ test/bq-translator.test.js    2012-08-06 11:50:44 +0900 (0a5ab37)
@@ -109,6 +109,10 @@ suite('BoolanQueryTranslator', function() {
                  "'keyword1 keyword2' 'other keyword'",
                  "'keyword1 keyword2'".length,
                  "field @ \"keyword1\" && field @ \"keyword2\"");
+  testExpression("value only: stirng: and: +",
+                 "'keyword1+keyword2' 'other keyword'",
+                 "'keyword1+keyword2'".length,
+                 "field @ \"keyword1\" && field @ \"keyword2\"");
   testExpression("value only: stirng: phrase",
                  "'\"keyword1 keyword2\"' 'other keyword'",
                  "'\"keyword1 keyword2\"'".length,
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
Download 



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