if (tokens.canConsume('@')) {
NameTest attributeName = parseQName(tokens);
Order order = Order.ASCENDING;
if (tokens.canConsume("ascending")) order = Order.ASCENDING;
else if (tokens.canConsume("descending")) order = Order.DESCENDING;
return new OrderBySpec(order, attributeName);
}
if (tokens.matches("jcr", ":", "score", "(")) {
FunctionCall scoreFunction = parseFunctionCall(tokens);
Order order = Order.ASCENDING;
if (tokens.canConsume("ascending")) order = Order.ASCENDING;
else if (tokens.canConsume("descending")) order = Order.DESCENDING;
return new OrderBySpec(order, scoreFunction);
}
throw new ParsingException(tokens.nextPosition(),
"Expected either 'jcr:score(tableName)' or '@<propertyName>' but found " + tokens.consume());
}