OpenJPA
  1. OpenJPA
  2. OPENJPA-774

Executing native queries with Firebird

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.1.0, 1.2.0, 1.3.0, 2.0.0-M2
    • Fix Version/s: 1.3.0, 2.0.0-beta3
    • Component/s: sql
    • Labels:
      None
    • Environment:
      Tomcat 5.5, OpenJPA 1.1.0, Firebird 2.1

      Description

      Native queries cannot be executed with Firebird database. The following exception occur:
      DEBUG - Log4JLogFactory$LogAdapter.trace(72) | Executing query: [insert into ANAGRAFICHE (COD_TITOLARE, NOME, CODICE_FISCALE, DATA_NASCITA) values (?, ?, ?, ?)] with parameters:

      {2=xz0FEdrz92sd, 0=43, 3=Tue Aug 30 00:00:00 UTC 1644, 1=B95JHSkDV}

      WARN - GeronimoConnectionEventListener.connectionErrorOccurred(88) | connectionErrorOccurred called with null
      org.firebirdsql.jdbc.FBSQLException: You cannot set value of an non-existing parameter.
      at org.firebirdsql.jdbc.FBProcedureCall$NullParam.setValue(FBProcedureCall.java:424)
      at org.firebirdsql.jdbc.AbstractCallableStatement.setLong(AbstractCallableStatement.java:1094)
      at org.tranql.connector.jdbc.PreparedStatementHandle.setLong(PreparedStatementHandle.java:247)
      at org.apache.ode.utils.LoggingStatementWrapper.setLong(LoggingStatementWrapper.java:495)
      at org.apache.openjpa.lib.jdbc.DelegatingCallableStatement.setLong(DelegatingCallableStatement.java:299)
      at org.apache.openjpa.jdbc.sql.DBDictionary.setLong(DBDictionary.java:998)
      at org.apache.openjpa.jdbc.sql.DBDictionary.setUnknown(DBDictionary.java:1283)
      at org.apache.openjpa.jdbc.sql.SQLBuffer.setParameters(SQLBuffer.java:568)
      at org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.executeUpdate(SQLStoreQuery.java:231)
      at org.apache.openjpa.kernel.QueryImpl.update(QueryImpl.java:1038)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:808)
      at org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:883)
      at org.apache.openjpa.kernel.DelegatingQuery.updateAll(DelegatingQuery.java:573)
      at org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:319)

      Exception is thrown because for "insert" statement prepareCall is executed instead of prepareStatement. For other databases it is the same, but Firebird's FBProcedureCall is not the same as FBPreparedStatement. Patch for issue follows.

      1. OPENJPA-774.patch
        0.7 kB
        Alexey Ousov

        Issue Links

          Activity

          Hide
          Milosz Tylenda added a comment -

          Kevin, how about making this resolved?

          Show
          Milosz Tylenda added a comment - Kevin, how about making this resolved?
          Hide
          Alexey Ousov added a comment -

          patch for issue

          Show
          Alexey Ousov added a comment - patch for issue

            People

            • Assignee:
              Kevin Sutter
              Reporter:
              Alexey Ousov
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development