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)

Reply via email to