- word = matchSymbol("index or term");
- if (!isSymbolicRelation() && lexer.ttype != lexer.TT_WORD)
- break;
-
- index = word;
- String relstr = (lexer.ttype == lexer.TT_WORD ?
- lexer.sval : lexer.render(lexer.ttype, false));
+ first = matchSymbol("index or term");
+ all = new StringBuilder(first);
+ //match relation only on second postion
+ while (isWordOrString() && (all.length() > first.length() || !isRelation())) {
+ all.append(" ").append(lexer.value());
+ match(lexer.what());
+ }
+
+ if (!isRelation())
+ break; //we're done if no relation
+
+ //we have relation, but it only makes sense if preceded by a single term
+ if (all.length() > first.length()) {
+ throw new CQLParseException("unexpected relation '"+lexer.value()+"'"
+ , lexer.pos());
+ }
+ index = first;
+ String relstr = (lexer.what() == CQLTokenizer.TT_WORD ?
+ lexer.value() : lexer.render(lexer.what(), false));