Patrice DUROUX created OPENJPA-2729:
---------------------------------------
Summary: problem with ToUperCase and ToLowerCase
Key: OPENJPA-2729
URL: https://issues.apache.org/jira/browse/OPENJPA-2729
Project: OpenJPA
Issue Type: Bug
Components: query
Affects Versions: 2.4.2
Environment: MySQL
Reporter: Patrice DUROUX
Hi,
An exception is thrown in the following method (here the one of ToLowerCase):
when the getValue() is a PCPath and ((PCPath)
getValue()).getFieldMapping(state).getColumns()[0])
throws:
{{java.lang.ArrayIndexOutOfBoundsException: 0}}{{
org.apache.openjpa.jdbc.kernel.exps.ToLowerCase.appendTo(ToLowerCase.java:47)
org.apache.openjpa.jdbc.kernel.exps.MatchesExpression.appendTo(MatchesExpression.java:97)
org.apache.openjpa.jdbc.kernel.exps.AndExpression.appendTo(AndExpression.java:59)}}
{{ public void appendTo(Select sel, ExpContext ctx, ExpState state, }}
{{ SQLBuffer buf, int index) {}}
{{ DBDictionary dict = ctx.store.getDBDictionary();}}
{{ String func = dict.toLowerCaseFunction;}}
{{ dict.assertSupport(func != null, "ToLowerCaseFunction");}}
{{ if (getValue() instanceof PCPath) {}}
{{ func = dict.getCastFunction(getValue(), func, ((PCPath)
getValue()).getFieldMapping(state).getColumns()[0]);}}
{{ } else {}}
{{ func = dict.getCastFunction(getValue(), func);}}
{{ }}}
{{ int idx = func.indexOf("\{0}");}}
{{ buf.append(func.substring(0, idx));}}
{{ getValue().appendTo(sel, ctx, state, buf, index);}}
{{ buf.append(func.substring(idx + 3));}}
{{ }}}
The part of code that generate the exception is:
Path<String> authorPath = from.join("references").join("authors");
predicateList.add(cb.like(cb.lower(authorPath), cb.literal('%' + value
+ '%')));
If I change this code to use another string function like trim(), it works (ie.
the SQL query is correctly generated).
Regards,
Patrice
ps: remark that the only uses of DBDictionary.getCastFunction(Val val, String
func, Column col) are for those classes.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)