null+****@clear*****
null+****@clear*****
2012年 7月 27日 (金) 17:58:37 JST
Kouhei Sutou 2012-07-27 17:58:37 +0900 (Fri, 27 Jul 2012) New Revision: f14db1c297529f763ad95516061eddd5d9382958 https://github.com/groonga/gcs/commit/f14db1c297529f763ad95516061eddd5d9382958 Log: BqTranslator: support (filter ...) Modified files: lib/bq-translator.js test/bq-translator.test.js Modified: lib/bq-translator.js (+32 -1) =================================================================== --- lib/bq-translator.js 2012-07-27 17:49:10 +0900 (8b70261) +++ lib/bq-translator.js 2012-07-27 17:58:37 +0900 (ed4d960) @@ -11,7 +11,6 @@ Unsupported syntaxes of Boolean Queries: * range in field value - * (filter ...) * (not ...) FIXME: Returns null if the given query is not supported. @@ -66,6 +65,9 @@ BooleanQueryTranslator.prototype = { case "field": expression = this.translateGroupField(query, context); break; + case "filter": + expression = this.translateGroupFilter(query, context); + break; case "and": expression = this.translateGroupSetOperation(query, "&&", context); break; @@ -125,6 +127,35 @@ BooleanQueryTranslator.prototype = { // TODO: report error: missing close paren <)> return ""; }, + translateGroupFilter: function(query, context) { + var field = ""; + for (; context.offset < query.length; context.offset++) { + var character = query[context.offset]; + if (/^[\-a-z0-9]$/.test(character)) { + field += character; + } else if (character == " ") { + this.skipSpaces(query, context); + var expression = this.translateExpressionValueUnsignedInteger(query, + field, + context); + this.skipSpaces(query, context); + if (query[context.offset] != ")") { + // TODO: report error: have garbage + return ""; + } + return expression; + } else if (character == ")") { + // TODO: report error: field and value is missing + return ""; + } else { + // TODO: report error: invalid field character + return ""; + } + } + + // TODO: report error: missing close paren <)> + return ""; + }, translateGroupSetOperation: function(query, setOperator, context) { var expressions = []; while (context.offset < query.length) { Modified: test/bq-translator.test.js (+4 -0) =================================================================== --- test/bq-translator.test.js 2012-07-27 17:49:10 +0900 (fba15b2) +++ test/bq-translator.test.js 2012-07-27 17:58:37 +0900 (aefffe7) @@ -70,6 +70,10 @@ suite('BoolanQueryTranslator', function() { "field1 @ \"keyword1\"", "(field field1 'keyword1')".length, "(field field1 'keyword1') (other group)"); + testGroup("filter", + "field1 == 29", + "(filter field1 29)".length, + "(filter field1 29) (other group)"); testGroup("and", "(field1 @ \"keyword1\" && field2 @ \"keyword2\")", "(and field1:'keyword1' field2:'keyword2')".length, -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Descargar