null+****@clear*****
null+****@clear*****
2012年 7月 27日 (金) 16:27:36 JST
Kouhei Sutou 2012-07-27 16:27:36 +0900 (Fri, 27 Jul 2012) New Revision: 85910e404523dcab6add6799854b592c46ab831d https://github.com/groonga/gcs/commit/85910e404523dcab6add6799854b592c46ab831d Log: BqTranslator: support field and value expression Modified files: lib/bq-translator.js test/bq-translator.test.js Modified: lib/bq-translator.js (+31 -9) =================================================================== --- lib/bq-translator.js 2012-07-27 16:18:51 +0900 (df33afd) +++ lib/bq-translator.js 2012-07-27 16:27:36 +0900 (b9a7ab5) @@ -18,21 +18,43 @@ BooleanQueryTranslator.prototype = { return this.translateTinia(query); }, translateExpression: function(query, context) { + var startOffset = context.offset; + var field; + if (/^[a-z0-9]$/.test(query[context.offset])) { + field = ""; + for (; context.offset < query.length; context.offset++) { + var character = query[context.offset]; + if (!/^[\-a-z0-9]$/.test(character)) { + break; + } + field += character; + } + if (query[context.offset] == ":") { + context.offset++; + } else { + var is_unsigned_integer_value = /^[0-9]+$/.test(field); + if (is_unsigned_integer_value) { + field = context.defaultField; + context.offset = startOffset; + } else { + // TODO: report error: field and value separator ":" is missing + return ""; + } + } + } else { + field = context.defaultField; + } + if (query[context.offset] == "'") { if (query[context.offset + 1] == "\"") { - return this.translateExpressionValuePhrase(query, - context.defaultField, - context); + return this.translateExpressionValuePhrase(query, field, context); } - return this.translateExpressionValueString(query, - context.defaultField, - context); + return this.translateExpressionValueString(query, field, context); } if (/^[0-9]/.test(query[context.offset])) { - return this.translateExpressionValueUnsignedInteger(query, - context.defaultField, - context); + return this.translateExpressionValueUnsignedInteger(query, field, context); } + // TODO: report error return ""; }, translateExpressionValuePhrase: function(query, field, context) { Modified: test/bq-translator.test.js (+5 -1) =================================================================== --- test/bq-translator.test.js 2012-07-27 16:18:51 +0900 (a8da45b) +++ test/bq-translator.test.js 2012-07-27 16:27:36 +0900 (e8037d7) @@ -57,4 +57,8 @@ suite('BoolanQueryTranslator', function() { "field == 29", "29".length, "29 75"); -}) + testExpression("field value: string", + "field1 @ \"keyword1\" && field1 @ \"keyword2\"", + "field1:'keyword1 keyword2'".length, + "field1:'keyword1 keyword2' field2:'other keyword'"); +}); -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Download