npgall / cqengine

Ultra-fast SQL-like queries on Java collections
Apache License 2.0
1.72k stars 253 forks source link

SQL syntax error. #288

Open siwee opened 3 years ago

siwee commented 3 years ago

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 3 years ago

It works fine in mysql.

npgall commented 3 years ago

The syntax is: <attribute> LIKE <pattern>

siwee commented 1 year ago

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.