[#808] Add support for INSERT .. RETURNING for Ingres

This commit is contained in:
Lukas Eder 2011-09-03 11:44:17 +00:00
parent bb72a3f4ee
commit e14cec9b64
6 changed files with 36 additions and 24 deletions

View File

@ -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),

View File

@ -15,6 +15,7 @@ public class Keys extends org.jooq.impl.AbstractKeys {
// IDENTITY definitions
public static final org.jooq.Identity<org.jooq.test.ingres.generatedclasses.tables.records.TBookStoreRecord, java.lang.Integer> 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<org.jooq.test.ingres.generatedclasses.tables.records.TTriggersRecord, java.lang.Integer> 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<org.jooq.test.ingres.generatedclasses.tables.records.T_639NumbersTableRecord> 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);

View File

@ -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<org.jooq.test.ingres.generatedclasses.tables.records.TTriggersRecord> {
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<org.jooq.test.in
super("t_triggers", org.jooq.test.ingres.generatedclasses.Test.TEST);
}
@Override
public org.jooq.Identity<org.jooq.test.ingres.generatedclasses.tables.records.TTriggersRecord, java.lang.Integer> getIdentity() {
return org.jooq.test.ingres.generatedclasses.Keys.IDENTITY_t_triggers;
}
@Override
public org.jooq.UniqueKey<org.jooq.test.ingres.generatedclasses.tables.records.TTriggersRecord> getMainKey() {
return org.jooq.test.ingres.generatedclasses.Keys.pk_t_triggers;

View File

@ -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
// ----------------

View File

@ -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/

View File

@ -310,23 +310,19 @@ class InsertQueryImpl<R extends TableRecord<R>> extends AbstractStoreQuery<R> 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<R extends TableRecord<R>> extends AbstractStoreQuery<R> 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<R extends TableRecord<R>> extends AbstractStoreQuery<R> im
// Additional values have to be fetched explicitly
case DERBY:
case H2:
case INGRES:
case MYSQL:
case SQLSERVER: {
result = statement.executeUpdate();