diff --git a/jOOQ-test/src/org/jooq/test/ingres/create.sql b/jOOQ-test/src/org/jooq/test/ingres/create.sql index 0c0f5bbdb1..6dce4199de 100644 --- a/jOOQ-test/src/org/jooq/test/ingres/create.sql +++ b/jOOQ-test/src/org/jooq/test/ingres/create.sql @@ -1,6 +1,11 @@ +DROP PROCEDURE IF EXISTS p_triggers/ + DROP VIEW IF EXISTS v_author/ DROP VIEW IF EXISTS v_book/ DROP VIEW IF EXISTS v_library/ + +DROP RULE t_triggers_trigger/ + DROP TABLE IF EXISTS t_triggers/ DROP TABLE IF EXISTS t_book_to_book_store/ DROP TABLE IF EXISTS t_book_store/ @@ -24,13 +29,25 @@ DROP TABLE IF EXISTS t_725_lob_test/ DROP TABLE IF EXISTS t_785/ CREATE TABLE t_triggers ( - id int not null, + id INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY, counter int, CONSTRAINT pk_t_triggers PRIMARY KEY (ID) ) / +CREATE PROCEDURE p_triggers AS +BEGIN + UPDATE t_triggers + SET counter = id * 2; +END +/ + +CREATE RULE t_triggers_trigger +AFTER INSERT OF t_triggers +EXECUTE PROCEDURE p_triggers +/ + CREATE TABLE t_language ( cd CHAR(2) NOT NULL, description VARCHAR(50), diff --git a/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/Keys.java b/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/Keys.java index ab8ba48280..d91c463ea5 100644 --- a/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/Keys.java +++ b/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/Keys.java @@ -15,6 +15,7 @@ public class Keys extends org.jooq.impl.AbstractKeys { // IDENTITY definitions public static final org.jooq.Identity IDENTITY_t_book_store = createIdentity(org.jooq.test.ingres.generatedclasses.tables.TBookStore.T_BOOK_STORE, org.jooq.test.ingres.generatedclasses.tables.TBookStore.ID); + public static final org.jooq.Identity IDENTITY_t_triggers = createIdentity(org.jooq.test.ingres.generatedclasses.tables.TTriggers.T_TRIGGERS, org.jooq.test.ingres.generatedclasses.tables.TTriggers.ID); // UNIQUE and PRIMARY KEY definitions public static final org.jooq.UniqueKey pk_t_639_numbers_table = createUniqueKey(org.jooq.test.ingres.generatedclasses.tables.T_639NumbersTable.T_639_NUMBERS_TABLE, org.jooq.test.ingres.generatedclasses.tables.T_639NumbersTable.ID); diff --git a/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/tables/TTriggers.java b/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/tables/TTriggers.java index 7b3021da95..c44552aaad 100644 --- a/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/tables/TTriggers.java +++ b/jOOQ-test/src/org/jooq/test/ingres/generatedclasses/tables/TTriggers.java @@ -10,7 +10,7 @@ package org.jooq.test.ingres.generatedclasses.tables; comments = "This class is generated by jOOQ") public class TTriggers extends org.jooq.impl.UpdatableTableImpl { - private static final long serialVersionUID = 1977964248; + private static final long serialVersionUID = 301614065; /** * The singleton instance of t_triggers @@ -49,6 +49,11 @@ public class TTriggers extends org.jooq.impl.UpdatableTableImpl getIdentity() { + return org.jooq.test.ingres.generatedclasses.Keys.IDENTITY_t_triggers; + } + @Override public org.jooq.UniqueKey getMainKey() { return org.jooq.test.ingres.generatedclasses.Keys.pk_t_triggers; diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 9d9afc00e0..092d1cdf6e 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -266,9 +266,10 @@ public abstract class jOOQAbstractTest< } } - // There is no DROP SEQUENCE IF EXISTS statement in Ingres + // There are no DROP SEQUENCE IF EXISTS and + // DROP RULE IF EXISTS statements in Ingres else if (e instanceof SQLSyntaxErrorException) { - if (sql.contains("DROP SEQUENCE")) { + if (sql.contains("DROP SEQUENCE") || sql.contains("DROP RULE")) { continue; } } @@ -3657,12 +3658,6 @@ public abstract class jOOQAbstractTest< return; } - switch (getDialect()) { - case INGRES: // TODO [#808] - log.info("SKIPPING", "INSERT RETURNING tests - JDBC driver did not implement this yet"); - return; - } - // Non-DSL querying // ---------------- diff --git a/jOOQ-test/src/org/jooq/test/sybase/create.sql b/jOOQ-test/src/org/jooq/test/sybase/create.sql index f52b3fff72..4686adab0b 100644 --- a/jOOQ-test/src/org/jooq/test/sybase/create.sql +++ b/jOOQ-test/src/org/jooq/test/sybase/create.sql @@ -1,7 +1,9 @@ DROP VIEW IF EXISTS v_library/ DROP VIEW IF EXISTS v_author/ DROP VIEW IF EXISTS v_book/ + DROP TRIGGER IF EXISTS t_triggers_trigger/ + DROP TABLE IF EXISTS t_triggers/ DROP TABLE IF EXISTS t_book_to_book_store/ DROP TABLE IF EXISTS t_book_store/ diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index e5e752c794..7707505313 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -310,23 +310,19 @@ class InsertQueryImpl> extends AbstractStoreQuery im switch (configuration.getDialect()) { - // Some JDBC drivers do not support generated keys altogether - case INGRES: - case SQLITE: - - // Sybase will select @@identity after the INSERT - case SYBASE: { - return super.prepare(configuration, sql); - } - // Postgres uses the RETURNING clause in SQL case POSTGRES: + // SQLite will select last_insert_rowid() after the INSER + case SQLITE: + // Sybase will select @@identity after the INSERT + case SYBASE: return super.prepare(configuration, sql); // Some dialects can only return AUTO_INCREMENT values // Other values have to be fetched in a second step case DERBY: case H2: + case INGRES: case MYSQL: case SQLSERVER: return connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); @@ -356,11 +352,6 @@ class InsertQueryImpl> extends AbstractStoreQuery im switch (configuration.getDialect()) { - // Some JDBC drivers do not support generated keys altogether - case INGRES: { - return super.execute(configuration, statement); - } - // SQLite can select _rowid_ after the insert case SQLITE: { result = statement.executeUpdate(); @@ -393,6 +384,7 @@ class InsertQueryImpl> extends AbstractStoreQuery im // Additional values have to be fetched explicitly case DERBY: case H2: + case INGRES: case MYSQL: case SQLSERVER: { result = statement.executeUpdate();