Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-2729

problem with ToUpperCase and ToLowerCase

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 2.4.2
    • Fix Version/s: None
    • Component/s: query
    • Labels:
      None
    • Environment:
      MySQL

      Description

      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.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              pduroux Patrice DUROUX
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: