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