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

Executing native queries with Firebird

    Details

    • Type: Bug
    • Status: Closed
    • Priority: 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.

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: