Hi, All
I am encountering an issue with below Expression method in Cayenne 3.0.1
stable version.
likeIgnoreCaseDbExp(String pathSpec, Object value, char escapeChar)
A convenience shortcut for building LIKE_IGNORE_CASE expression.
The error message is below.
SELECT * FROM TEST_TABLE t0 WHERE UPPER(t0.NAME) LIKE UPPER(? {escape '*'})
[bind: 1->NAME:'A*_1']
java.sql.SQLException: *Incorrect syntax near the keyword 'escape'.*
at
net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632)
at
net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
at
net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:776)
at
org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
at
org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:269)
at
org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:422)
at
org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:69)
at
org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:395)
at
org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
at
org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:392)
at
org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:121)
at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
at
org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
at
org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
at
org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
If I am not mistaken, the parenthesis position in the generated SQL query
is not right. It should be put near the question mark instead of the last
position like below:
SELECT * FROM TEST_TABLE t0 WHERE UPPER(t0.NAME) LIKE UPPER(?) {escape '*'}
The question mark binding value is 'A*_1'
Did any one encounter the same issue ?
Thanks,
Li