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)