npgall/cqengine

SQL syntax error.

Opened this issue · 3 comments

siwee commented

Hi. @npgall

The value of the field name is a fuzzy pattern, such as John%; I use SQL: SELECT * FROM cars WHERE 'John Nash' like name, but it throws an exception. I need your help! Thanks a lot.

Code:

SQLParser<Person> parser = SQLParser.forPojoWithAttributes(Person.class, createAttributes(Person.class));
Query<Person> query = parser.query("SELECT * FROM cars WHERE 'John Nash' like name");
doQuery(query);

Exception:

com.googlecode.cqengine.query.parser.common.InvalidQueryException: Failed to parse query at line 1:46: mismatched input '<EOF>' expecting '||'

	at com.googlecode.cqengine.query.parser.common.QueryParser$1.syntaxError(QueryParser.java:54)
	at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
	at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:544)
	at org.antlr.v4.runtime.DefaultErrorStrategy.reportInputMismatch(DefaultErrorStrategy.java:327)
	at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:139)
	at com.googlecode.cqengine.query.parser.sql.grammar.SQLGrammarParser.isPrefixOfQuery(SQLGrammarParser.java:1794)
	at com.googlecode.cqengine.query.parser.sql.grammar.SQLGrammarParser.simpleQuery(SQLGrammarParser.java:943)
	at com.googlecode.cqengine.query.parser.sql.grammar.SQLGrammarParser.query(SQLGrammarParser.java:467)
	at com.googlecode.cqengine.query.parser.sql.grammar.SQLGrammarParser.whereClause(SQLGrammarParser.java:349)
	at com.googlecode.cqengine.query.parser.sql.grammar.SQLGrammarParser.start(SQLGrammarParser.java:245)
	at com.googlecode.cqengine.query.parser.sql.SQLParser.parse(SQLParser.java:62)
	at com.googlecode.cqengine.query.parser.common.QueryParser.query(QueryParser.java:161)

Best Regards.

siwee commented

It works fine in mysql.

The syntax is: <attribute> LIKE <pattern>

siwee commented

The syntax is: <attribute> LIKE <pattern>

Hi, @npgall

I don't know whether <pattern> LIKE <attribute> is supported in the standard sql syntax, but postgresql and mysql support it. This is very useful in some cases, so is it possible to provide support for this syntax in cqengine? Many thanks.

Best Regards.