From dfb0bfda4c174efefcea77a5b76eeb490b8194bd Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 19 Aug 2012 17:39:40 +0200 Subject: [PATCH] [#430] Add support for the Firebird database - Fixed INSERT .. RETURNING --- .../src/org/jooq/test/_/testcases/InsertUpdateTests.java | 5 +++++ jOOQ/src/main/java/org/jooq/InsertQuery.java | 8 ++++---- jOOQ/src/main/java/org/jooq/InsertResultStep.java | 3 ++- jOOQ/src/main/java/org/jooq/InsertReturningStep.java | 3 ++- jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java | 9 +++++++-- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java index d17914c2f2..4a59285916 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java @@ -544,9 +544,14 @@ extends BaseTest extends StoreQuery, Insert *

* This implemented differently for every dialect: *

    - *
  • Postgres has native support for INSERT .. RETURNING - * clauses
  • + *
  • Firebird and Postgres have native support for + * INSERT .. RETURNING clauses
  • *
  • HSQLDB, Oracle, and DB2 JDBC drivers allow for retrieving any table * column as "generated key" in one statement
  • *
  • Derby, H2, Ingres, MySQL, SQL Server only allow for retrieving @@ -247,8 +247,8 @@ public interface InsertQuery extends StoreQuery, Insert *

    * This implemented differently for every dialect: *

      - *
    • Postgres has native support for INSERT .. RETURNING - * clauses
    • + *
    • Firebird and Postgres have native support for + * INSERT .. RETURNING clauses
    • *
    • HSQLDB, Oracle, and DB2 JDBC drivers allow for retrieving any table * column as "generated key" in one statement
    • *
    • Derby, H2, Ingres, MySQL, SQL Server only allow for retrieving diff --git a/jOOQ/src/main/java/org/jooq/InsertResultStep.java b/jOOQ/src/main/java/org/jooq/InsertResultStep.java index 0477ac1de2..70c99e1466 100644 --- a/jOOQ/src/main/java/org/jooq/InsertResultStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertResultStep.java @@ -52,7 +52,8 @@ import org.jooq.exception.DataAccessException; *

      * This implemented differently for every dialect: *

        - *
      • Postgres has native support for INSERT .. RETURNING clauses
      • + *
      • Firebird and Postgres have native support for + * INSERT .. RETURNING clauses
      • *
      • HSQLDB, Oracle, and DB2 JDBC drivers allow for retrieving any table * column as "generated key" in one statement
      • *
      • Derby, H2, Ingres, MySQL, SQL Server only allow for retrieving IDENTITY diff --git a/jOOQ/src/main/java/org/jooq/InsertReturningStep.java b/jOOQ/src/main/java/org/jooq/InsertReturningStep.java index 4392716529..e440c3eef6 100644 --- a/jOOQ/src/main/java/org/jooq/InsertReturningStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertReturningStep.java @@ -52,7 +52,8 @@ import java.util.Collection; *

        * This implemented differently for every dialect: *

          - *
        • Postgres has native support for INSERT .. RETURNING clauses
        • + *
        • Firebird and Postgres have native support for + * INSERT .. RETURNING clauses
        • *
        • HSQLDB, Oracle, and DB2 JDBC drivers allow for retrieving any table * column as "generated key" in one statement
        • *
        • Derby, H2, Ingres, MySQL, SQL Server only allow for retrieving IDENTITY diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index c4f64c3bcb..3cf1ea57be 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -342,6 +342,7 @@ class InsertQueryImpl extends AbstractStoreQuery implements if (!returning.isEmpty()) { switch (context.getDialect()) { + case FIREBIRD: case POSTGRES: context.formatSeparator() .keyword("returning ") @@ -361,6 +362,7 @@ class InsertQueryImpl extends AbstractStoreQuery implements .bind(updateMap); switch (context.getDialect()) { + case FIREBIRD: case POSTGRES: context.bind((QueryPart) returning); break; @@ -442,6 +444,7 @@ class InsertQueryImpl extends AbstractStoreQuery implements switch (ctx.getDialect()) { // Postgres uses the RETURNING clause in SQL + case FIREBIRD: case POSTGRES: // SQLite will select last_insert_rowid() after the INSER case SQLITE: @@ -547,8 +550,10 @@ class InsertQueryImpl extends AbstractStoreQuery implements } } - // Postgres can execute the INSERT .. RETURNING clause like - // a select clause. JDBC support is not implemented + // Firebird and Postgres can execute the INSERT .. RETURNING + // clause like a select clause. JDBC support is not implemented + // in the Postgres JDBC driver + case FIREBIRD: case POSTGRES: { listener.executeStart(ctx); rs = ctx.statement().executeQuery();