From a0cd2916e2e2736f2475c755f540202227adcd8a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sat, 22 Dec 2012 17:56:17 +0100 Subject: [PATCH] [#2025] Correctly handle multiple foreign keys defined on the same column --- .../java/org/jooq/util/JavaGenerator.java | 11 +++---- .../java/org/jooq/util/ColumnDefinition.java | 5 ++- .../jooq/util/DefaultColumnDefinition.java | 20 ++++++------ .../util/DefaultForeignKeyDefinition.java | 10 ++---- .../java/org/jooq/util/DefaultRelations.java | 31 ++++++++----------- .../main/java/org/jooq/util/Relations.java | 7 +++-- jOOQ-test/src/org/jooq/test/ase/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/cubrid/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/db2/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/derby/create.sql | 11 +++++++ .../src/org/jooq/test/firebird/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/h2/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/hsqldb/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/ingres/create.sql | 11 +++++++ jOOQ-test/src/org/jooq/test/mysql/create.sql | 12 +++++++ jOOQ-test/src/org/jooq/test/oracle/create.sql | 10 ++++++ .../src/org/jooq/test/postgres/create.sql | 10 ++++++ jOOQ-test/src/org/jooq/test/sqlite/create.sql | 11 +++++++ .../src/org/jooq/test/sqlserver/create.sql | 10 ++++++ jOOQ-test/src/org/jooq/test/sybase/create.sql | 11 +++++++ 20 files changed, 189 insertions(+), 47 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index 48106a6935..76105eb477 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -523,9 +523,7 @@ public class JavaGenerator extends AbstractGenerator { out.tab(1).println("}"); if (generateRelations() && generateNavigationMethods()) { - ForeignKeyDefinition foreignKey = column.getForeignKey(); - - if (foreignKey != null) { + for (ForeignKeyDefinition foreignKey : column.getForeignKeys()) { printFKSetter(out, column, foreignKey); } } @@ -2107,9 +2105,10 @@ public class JavaGenerator extends AbstractGenerator { // Print references from this foreign key to its related primary key // E.g. in TBookRecord print getTAuthor() // ----------------------------------------------------------------- - ForeignKeyDefinition foreignKey = column.getForeignKey(); - if (foreignKey != null && out.printOnlyOnce(foreignKey)) { - printFetchFK(out, column, foreignKey); + for (ForeignKeyDefinition foreignKey : column.getForeignKeys()) { + if (out.printOnlyOnce(foreignKey)) { + printFetchFK(out, column, foreignKey); + } } } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/ColumnDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/ColumnDefinition.java index cef012292b..bb9d6198f1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/ColumnDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/ColumnDefinition.java @@ -62,10 +62,9 @@ public interface ColumnDefinition extends TypedElementDefinition getUniqueKeys(); /** - * A definition for the foreign key that this column is part of, or - * null if this column is not part of a foreign key. + * All definitions of foreign keys that this column is part of. */ - ForeignKeyDefinition getForeignKey(); + List getForeignKeys(); /** * Whether this column is the table's IDENTITY column. diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java index ff17e883c9..c7c1bf65c0 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java @@ -47,15 +47,15 @@ public class DefaultColumnDefinition extends AbstractTypedElementDefinition implements ColumnDefinition { - private final int position; - private final boolean isIdentity; - private final boolean nullable; + private final int position; + private final boolean isIdentity; + private final boolean nullable; - private boolean primaryKeyLoaded; - private UniqueKeyDefinition primaryKey; - private List uniqueKeys; - private boolean foreignKeyLoaded; - private ForeignKeyDefinition foreignKey; + private boolean primaryKeyLoaded; + private UniqueKeyDefinition primaryKey; + private List uniqueKeys; + private boolean foreignKeyLoaded; + private List foreignKey; public DefaultColumnDefinition(TableDefinition table, String name, int position, DataTypeDefinition type, boolean nullable, boolean isIdentity, String comment) { @@ -92,10 +92,10 @@ public class DefaultColumnDefinition } @Override - public final ForeignKeyDefinition getForeignKey() { + public final List getForeignKeys() { if (!foreignKeyLoaded) { foreignKeyLoaded = true; - foreignKey = getDatabase().getRelations().getForeignKey(this); + foreignKey = getDatabase().getRelations().getForeignKeys(this); } return foreignKey; diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultForeignKeyDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultForeignKeyDefinition.java index 375696eac2..fe8c52413a 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultForeignKeyDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultForeignKeyDefinition.java @@ -91,13 +91,9 @@ public class DefaultForeignKeyDefinition extends AbstractDefinition implements F public int countSimilarReferences() { Set keys = new HashSet(); - for (ColumnDefinition column : table.getColumns()) { - ForeignKeyDefinition key = getDatabase().getRelations().getForeignKey(column); - - if (key != null) { - if (key.getReferencedTable().equals(getReferencedTable())) { - keys.add(key.getName()); - } + for (ForeignKeyDefinition key : getDatabase().getRelations().getForeignKeys(table)) { + if (key.getReferencedTable().equals(getReferencedTable())) { + keys.add(key.getName()); } } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultRelations.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultRelations.java index f036168ae8..89c721e853 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultRelations.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultRelations.java @@ -46,17 +46,17 @@ import org.jooq.tools.JooqLogger; public class DefaultRelations implements Relations { - private static final JooqLogger log = JooqLogger.getLogger(DefaultRelations.class); + private static final JooqLogger log = JooqLogger.getLogger(DefaultRelations.class); - private Map foreignKeys = new LinkedHashMap(); - private Map primaryKeys = new LinkedHashMap(); - private Map uniqueKeys = new LinkedHashMap(); + private Map primaryKeys = new LinkedHashMap(); + private Map uniqueKeys = new LinkedHashMap(); + private Map foreignKeys = new LinkedHashMap(); - private Map foreignKeysByColumn = new LinkedHashMap(); - private Map primaryKeysByColumn = new LinkedHashMap(); - private Map> uniqueKeysByColumn = new LinkedHashMap>(); + private Map primaryKeysByColumn = new LinkedHashMap(); + private Map> uniqueKeysByColumn = new LinkedHashMap>(); + private Map> foreignKeysByColumn = new LinkedHashMap>(); - public void addPrimaryKey(String keyName, ColumnDefinition column) { + public void addPrimaryKey(String keyName, ColumnDefinition column) { if (log.isDebugEnabled()) { log.debug("Adding primary key", keyName + " (" + column + ")"); } @@ -170,18 +170,17 @@ public class DefaultRelations implements Relations { } @Override - public ForeignKeyDefinition getForeignKey(ColumnDefinition column) { + public List getForeignKeys(ColumnDefinition column) { if (!foreignKeysByColumn.containsKey(column)) { - ForeignKeyDefinition key = null; + List list = new ArrayList(); for (ForeignKeyDefinition foreignKey : foreignKeys.values()) { if (foreignKey.getKeyColumns().contains(column)) { - key = foreignKey; - break; + list.add(foreignKey); } } - foreignKeysByColumn.put(column, key); + foreignKeysByColumn.put(column, list); } return foreignKeysByColumn.get(column); @@ -192,11 +191,7 @@ public class DefaultRelations implements Relations { Set result = new LinkedHashSet(); for (ColumnDefinition column : table.getColumns()) { - ForeignKeyDefinition foreignKey = getForeignKey(column); - - if (foreignKey != null) { - result.add(foreignKey); - } + result.addAll(getForeignKeys(column)); } return new ArrayList(result); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/Relations.java b/jOOQ-meta/src/main/java/org/jooq/util/Relations.java index f217396cf0..86ae7c55d6 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Relations.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Relations.java @@ -65,10 +65,11 @@ public interface Relations { List getUniqueKeys(TableDefinition table); /** - * Get the foreign key for a given column, or null if that - * column is not part of a foreign key. + * Get a list of foreign keys for a given table, that the column + * participates in. Returns an empty list if the given column is not part of + * any foreign key. */ - ForeignKeyDefinition getForeignKey(ColumnDefinition column); + List getForeignKeys(ColumnDefinition column); /** * Get a list of foreign keys for a given table. Returns an empty list if diff --git a/jOOQ-test/src/org/jooq/test/ase/create.sql b/jOOQ-test/src/org/jooq/test/ase/create.sql index b3861b4f72..b844c8223f 100644 --- a/jOOQ-test/src/org/jooq/test/ase/create.sql +++ b/jOOQ-test/src/org/jooq/test/ase/create.sql @@ -22,6 +22,7 @@ DROP TABLE t_book/ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_85/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_64_69/ @@ -267,6 +268,16 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ + CREATE VIEW v_library (author, title) AS SELECT a.first_name || ' ' || a.last_name, b.title FROM t_author a JOIN t_book b ON b.author_id = a.id diff --git a/jOOQ-test/src/org/jooq/test/cubrid/create.sql b/jOOQ-test/src/org/jooq/test/cubrid/create.sql index 14d6b6a008..27e1866c17 100644 --- a/jOOQ-test/src/org/jooq/test/cubrid/create.sql +++ b/jOOQ-test/src/org/jooq/test/cubrid/create.sql @@ -13,6 +13,7 @@ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ DROP TABLE t_directory/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_85/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_64_69/ @@ -287,6 +288,16 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ + CREATE VIEW v_library (author, title) AS SELECT a.first_name || ' ' || a.last_name, b.title FROM t_author a JOIN t_book b ON b.author_id = a.id diff --git a/jOOQ-test/src/org/jooq/test/db2/create.sql b/jOOQ-test/src/org/jooq/test/db2/create.sql index fe57f67b44..842d227a6b 100644 --- a/jOOQ-test/src/org/jooq/test/db2/create.sql +++ b/jOOQ-test/src/org/jooq/test/db2/create.sql @@ -24,6 +24,7 @@ DROP TABLE t_book/ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_64_69/ DROP TABLE x_test_case_85/ @@ -289,6 +290,16 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ + CREATE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT T_AUTHOR.FIRST_NAME || ' ' || T_AUTHOR.LAST_NAME, T_BOOK.TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID diff --git a/jOOQ-test/src/org/jooq/test/derby/create.sql b/jOOQ-test/src/org/jooq/test/derby/create.sql index 8f1640c2fb..536f5e9808 100644 --- a/jOOQ-test/src/org/jooq/test/derby/create.sql +++ b/jOOQ-test/src/org/jooq/test/derby/create.sql @@ -12,6 +12,7 @@ DROP TABLE t_book/ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_64_69/ DROP TABLE x_test_case_85/ @@ -255,6 +256,16 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ + CREATE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT T_AUTHOR.FIRST_NAME || ' ' || T_AUTHOR.LAST_NAME, T_BOOK.TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID diff --git a/jOOQ-test/src/org/jooq/test/firebird/create.sql b/jOOQ-test/src/org/jooq/test/firebird/create.sql index 0a9689b342..51ed664429 100644 --- a/jOOQ-test/src/org/jooq/test/firebird/create.sql +++ b/jOOQ-test/src/org/jooq/test/firebird/create.sql @@ -14,6 +14,7 @@ DROP TABLE t_book/ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_85/ DROP TABLE x_test_case_64_69/ @@ -257,6 +258,16 @@ CREATE TABLE x_test_case_85 ( ); / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +); +/ + CREATE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT T_AUTHOR.FIRST_NAME || ' ' || T_AUTHOR.LAST_NAME, T_BOOK.TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID; diff --git a/jOOQ-test/src/org/jooq/test/h2/create.sql b/jOOQ-test/src/org/jooq/test/h2/create.sql index 958405a0d0..35fc0e24df 100644 --- a/jOOQ-test/src/org/jooq/test/h2/create.sql +++ b/jOOQ-test/src/org/jooq/test/h2/create.sql @@ -26,6 +26,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_64_69/ DROP TABLE IF EXISTS x_test_case_85/ @@ -311,6 +312,16 @@ CREATE TABLE x_test_case_85 ( ); / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +); +/ + CREATE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT CONCAT(T_AUTHOR.FIRST_NAME, ' ', T_AUTHOR.LAST_NAME), T_BOOK.TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID; diff --git a/jOOQ-test/src/org/jooq/test/hsqldb/create.sql b/jOOQ-test/src/org/jooq/test/hsqldb/create.sql index 97606f7c61..d8158ea9c4 100644 --- a/jOOQ-test/src/org/jooq/test/hsqldb/create.sql +++ b/jOOQ-test/src/org/jooq/test/hsqldb/create.sql @@ -33,6 +33,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_85/ DROP TABLE IF EXISTS x_test_case_64_69/ @@ -313,6 +314,16 @@ CREATE TABLE x_test_case_85 ( ); / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +); +/ + CREATE TABLE system (id int);/ CREATE TABLE class (class int);/ CREATE TABLE integer (id int);/ diff --git a/jOOQ-test/src/org/jooq/test/ingres/create.sql b/jOOQ-test/src/org/jooq/test/ingres/create.sql index cf297dc517..60c0964a99 100644 --- a/jOOQ-test/src/org/jooq/test/ingres/create.sql +++ b/jOOQ-test/src/org/jooq/test/ingres/create.sql @@ -13,6 +13,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_64_69/ DROP TABLE IF EXISTS x_test_case_85/ @@ -287,6 +288,16 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +); +/ + CREATE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT T_AUTHOR.FIRST_NAME || ' ' || T_AUTHOR.LAST_NAME, T_BOOK.TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID diff --git a/jOOQ-test/src/org/jooq/test/mysql/create.sql b/jOOQ-test/src/org/jooq/test/mysql/create.sql index f8f03ab9c5..cade1e733b 100644 --- a/jOOQ-test/src/org/jooq/test/mysql/create.sql +++ b/jOOQ-test/src/org/jooq/test/mysql/create.sql @@ -22,6 +22,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_64_69/ DROP TABLE IF EXISTS x_test_case_85/ @@ -292,6 +293,17 @@ CREATE TABLE x_test_case_85 ( COMMENT = 'An unused table in the same schema.'; / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) ENGINE = InnoDB + COMMENT = 'An unused table in the same schema.'; +/ + CREATE OR REPLACE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT CONCAT(A.FIRST_NAME, ' ', A.LAST_NAME), B.TITLE FROM T_AUTHOR A JOIN T_BOOK B ON B.AUTHOR_ID = A.ID; diff --git a/jOOQ-test/src/org/jooq/test/oracle/create.sql b/jOOQ-test/src/org/jooq/test/oracle/create.sql index c9bfe4d2d8..3da336dc59 100644 --- a/jOOQ-test/src/org/jooq/test/oracle/create.sql +++ b/jOOQ-test/src/org/jooq/test/oracle/create.sql @@ -26,6 +26,7 @@ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ DROP TABLE t_directory/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_64_69/ DROP TABLE x_test_case_85/ @@ -669,6 +670,15 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id NUMBER(7) NOT NULL, + ref_name VARCHAR2(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ CREATE OR REPLACE VIEW v_library (author, title) AS SELECT a.first_name || ' ' || a.last_name, b.title diff --git a/jOOQ-test/src/org/jooq/test/postgres/create.sql b/jOOQ-test/src/org/jooq/test/postgres/create.sql index b60507f697..73cde140c7 100644 --- a/jOOQ-test/src/org/jooq/test/postgres/create.sql +++ b/jOOQ-test/src/org/jooq/test/postgres/create.sql @@ -39,6 +39,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_64_69/ DROP TABLE IF EXISTS x_test_case_85/ @@ -416,6 +417,15 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id INTEGER NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ CREATE OR REPLACE VIEW v_library (author, title) AS SELECT a.first_name || ' ' || a.last_name, b.title diff --git a/jOOQ-test/src/org/jooq/test/sqlite/create.sql b/jOOQ-test/src/org/jooq/test/sqlite/create.sql index f5b00b7c02..d9002344a5 100644 --- a/jOOQ-test/src/org/jooq/test/sqlite/create.sql +++ b/jOOQ-test/src/org/jooq/test/sqlite/create.sql @@ -10,6 +10,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_64_69/ DROP TABLE IF EXISTS x_test_case_85/ @@ -251,6 +252,16 @@ CREATE TABLE x_test_case_85 ( ); / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +); +/ + CREATE VIEW V_LIBRARY AS SELECT T_AUTHOR.FIRST_NAME AUTHOR, T_BOOK.TITLE TITLE FROM T_AUTHOR JOIN T_BOOK ON T_BOOK.AUTHOR_ID = T_AUTHOR.ID; diff --git a/jOOQ-test/src/org/jooq/test/sqlserver/create.sql b/jOOQ-test/src/org/jooq/test/sqlserver/create.sql index e53ace6db6..b54436e79f 100644 --- a/jOOQ-test/src/org/jooq/test/sqlserver/create.sql +++ b/jOOQ-test/src/org/jooq/test/sqlserver/create.sql @@ -41,6 +41,7 @@ DROP TABLE t_book/ DROP TABLE t_book_details/ DROP TABLE t_author/ DROP TABLE t_language/ +DROP TABLE x_test_case_2025/ DROP TABLE x_test_case_71/ DROP TABLE x_test_case_64_69/ DROP TABLE x_test_case_85/ @@ -293,6 +294,15 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ CREATE VIEW v_library (author, title) AS SELECT a.first_name + ' ' + a.last_name, b.title diff --git a/jOOQ-test/src/org/jooq/test/sybase/create.sql b/jOOQ-test/src/org/jooq/test/sybase/create.sql index 983c0cfbc4..cf8e836c75 100644 --- a/jOOQ-test/src/org/jooq/test/sybase/create.sql +++ b/jOOQ-test/src/org/jooq/test/sybase/create.sql @@ -22,6 +22,7 @@ DROP TABLE IF EXISTS t_book/ DROP TABLE IF EXISTS t_book_details/ DROP TABLE IF EXISTS t_author/ DROP TABLE IF EXISTS t_language/ +DROP TABLE IF EXISTS x_test_case_2025/ DROP TABLE IF EXISTS x_test_case_85/ DROP TABLE IF EXISTS x_test_case_71/ DROP TABLE IF EXISTS x_test_case_64_69/ @@ -325,6 +326,16 @@ CREATE TABLE x_test_case_85 ( ) / +CREATE TABLE x_test_case_2025 ( + ref_id int NOT NULL, + ref_name VARCHAR(10) NOT NULL, + + CONSTRAINT fk_x_test_case_2025_1 FOREIGN KEY(ref_id) REFERENCES x_test_case_85(ID), + CONSTRAINT fk_x_test_case_2025_2 FOREIGN KEY(ref_id) REFERENCES x_test_case_71(ID), + CONSTRAINT fk_x_test_case_2025_3 FOREIGN KEY(ref_id, ref_name) REFERENCES X_UNUSED(id, name) +) +/ + CREATE OR REPLACE VIEW V_LIBRARY (AUTHOR, TITLE) AS SELECT A.FIRST_NAME || ' ' || A.LAST_NAME, B.TITLE FROM T_AUTHOR A JOIN T_BOOK B ON B.AUTHOR_ID = A.ID;