Author: bpoussin Date: 2012-01-24 13:02:00 +0100 (Tue, 24 Jan 2012) New Revision: 1356 Url: http://nuiton.org/repositories/revision/wikitty/1356 Log: Anomalie #1914: Query parser can't parse quey using id - change string value pattern in parser Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-24 11:11:47 UTC (rev 1355) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2012-01-24 12:02:00 UTC (rev 1356) @@ -40,7 +40,6 @@ import org.nuiton.wikitty.query.conditions.ContainsAll; import org.nuiton.wikitty.query.conditions.ContainsOne; import org.nuiton.wikitty.entities.Element; -import org.nuiton.wikitty.entities.ElementField; import org.nuiton.wikitty.query.conditions.Equals; import org.nuiton.wikitty.query.conditions.False; import org.nuiton.wikitty.query.conditions.Greater; @@ -287,10 +286,12 @@ } Rule condition() { + // ATTENTION l'ordre est important par exemple le '>' doit etre apres le '>=' return FirstOf( not(), isNull(), isNotNull(), select(), - eq(), neq(), less(), lesseq(), greater(), greatereq(), like(), notlike(), + greatereq(), lesseq(), between(), containsAll(), containsOne(), + eq(), neq(), less(), greater(), like(), notlike(), rTrue(), rFalse(), keyword() ); } @@ -430,10 +431,27 @@ } Rule valueText() { - return Sequence(FirstOf(field(), StringLiteral()), + return Sequence(FirstOf(StringLiteral(), SimpleString()), push(new ConditionValueString(removeQuote(match())))); } + /** + * Une chaine simple sans espace, parenthese, retour chariot, tabulation, + * accolade, crochet + * @return + */ + Rule SimpleString() { + return OneOrMore(FirstOf( + Escape(), + Sequence(TestNot(AnyOf(" \t\r\n\\" + +COMMA + +LITERAL_OPEN+LITERAL_CLOSE + +BRACKET_OPEN+BRACKET_CLOSE + +CURLY_BRACKET_OPEN+CURLY_BRACKET_CLOSE + +SQUARE_BRACKET_OPEN+SQUARE_BRACKET_CLOSE)), ANY) + )).suppressSubnodes(); + } + Rule StringLiteral() { return Sequence( LITERAL_OPEN,