[#808] Add support for INSERT .. RETURNING for Ingres
This commit is contained in:
parent
bb72a3f4ee
commit
e14cec9b64
@ -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),
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
// ----------------
|
||||
|
||||
|
||||
@ -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/
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user