From 9fa681477939d633bde62daa79bba31b4bb88c1c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 8 Sep 2020 17:27:40 +0200 Subject: [PATCH] [jOOQ/jOOQ#10588] Apply synthetic keys to jOOQ-meta, use implicit joins (WIP) --- .../java/org/jooq/meta/h2/H2Database.java | 18 +++++++----------- .../jooq/meta/h2/information_schema/Keys.java | 11 ++++++++--- .../tables/Constraints.java | 17 ++++++++++++++++- .../tables/CrossReferences.java | 19 ++++++++++++++++++- .../h2/information_schema/tables/Domains.java | 17 ++++++++++++++++- .../information_schema/tables/Sequences.java | 11 +---------- .../h2/information_schema/tables/Views.java | 15 +-------------- 7 files changed, 67 insertions(+), 41 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java index 6b41268591..f1286611c6 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/H2Database.java @@ -277,18 +277,14 @@ public class H2Database extends AbstractDatabase { CROSS_REFERENCES.FKTABLE_SCHEMA, CROSS_REFERENCES.FKCOLUMN_NAME, CROSS_REFERENCES.PKCOLUMN_NAME, - CONSTRAINTS.CONSTRAINT_NAME, - CONSTRAINTS.TABLE_NAME, - CONSTRAINTS.CONSTRAINT_SCHEMA) + CROSS_REFERENCES.referencedConstraint().CONSTRAINT_NAME, + CROSS_REFERENCES.referencedConstraint().TABLE_NAME, + CROSS_REFERENCES.referencedConstraint().CONSTRAINT_SCHEMA) .from(CROSS_REFERENCES) - .join(CONSTRAINTS) - .on(CROSS_REFERENCES.PK_NAME.equal(CONSTRAINTS.UNIQUE_INDEX_NAME)) - .and(CROSS_REFERENCES.PKTABLE_NAME.equal(CONSTRAINTS.TABLE_NAME)) - .and(CROSS_REFERENCES.PKTABLE_SCHEMA.equal(CONSTRAINTS.TABLE_SCHEMA)) .where(CROSS_REFERENCES.FKTABLE_SCHEMA.in(getInputSchemata())) // Workaround for https://github.com/h2database/h2database/issues/1000 - .and(CONSTRAINTS.CONSTRAINT_TYPE.in("PRIMARY KEY", "PRIMARY_KEY", "UNIQUE")) + .and(CROSS_REFERENCES.referencedConstraint().CONSTRAINT_TYPE.in("PRIMARY KEY", "PRIMARY_KEY", "UNIQUE")) .orderBy( CROSS_REFERENCES.FKTABLE_SCHEMA.asc(), CROSS_REFERENCES.FK_NAME.asc(), @@ -296,14 +292,14 @@ public class H2Database extends AbstractDatabase { .fetch()) { SchemaDefinition foreignKeySchema = getSchema(record.get(CROSS_REFERENCES.FKTABLE_SCHEMA)); - SchemaDefinition uniqueKeySchema = getSchema(record.get(CONSTRAINTS.CONSTRAINT_SCHEMA)); + SchemaDefinition uniqueKeySchema = getSchema(record.get(CROSS_REFERENCES.referencedConstraint().CONSTRAINT_SCHEMA)); if (foreignKeySchema != null && uniqueKeySchema != null) { String foreignKey = record.get(CROSS_REFERENCES.FK_NAME); String foreignKeyTableName = record.get(CROSS_REFERENCES.FKTABLE_NAME); String foreignKeyColumn = record.get(CROSS_REFERENCES.FKCOLUMN_NAME); - String uniqueKey = record.get(CONSTRAINTS.CONSTRAINT_NAME); - String uniqueKeyTableName = record.get(CONSTRAINTS.TABLE_NAME); + String uniqueKey = record.get(CROSS_REFERENCES.referencedConstraint().CONSTRAINT_NAME); + String uniqueKeyTableName = record.get(CROSS_REFERENCES.referencedConstraint().TABLE_NAME); String uniqueKeyColumn = record.get(CROSS_REFERENCES.PKCOLUMN_NAME); TableDefinition foreignKeyTable = getTable(foreignKeySchema, foreignKeyTableName); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/Keys.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/Keys.java index c8cabcae60..e15d64ad51 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/Keys.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/Keys.java @@ -10,10 +10,12 @@ import org.jooq.TableField; import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.Internal; +import org.jooq.meta.h2.information_schema.tables.Constraints; +import org.jooq.meta.h2.information_schema.tables.CrossReferences; +import org.jooq.meta.h2.information_schema.tables.Domains; import org.jooq.meta.h2.information_schema.tables.Schemata; import org.jooq.meta.h2.information_schema.tables.Sequences; import org.jooq.meta.h2.information_schema.tables.Tables; -import org.jooq.meta.h2.information_schema.tables.Views; /** @@ -27,6 +29,9 @@ public class Keys { // UNIQUE and PRIMARY KEY definitions // ------------------------------------------------------------------------- + public static final UniqueKey SYNTHETIC_PK_CONSTRAINTS = Internal.createUniqueKey(Constraints.CONSTRAINTS, DSL.name("SYNTHETIC_PK_CONSTRAINTS"), new TableField[] { Constraints.CONSTRAINTS.CONSTRAINT_CATALOG, Constraints.CONSTRAINTS.CONSTRAINT_SCHEMA, Constraints.CONSTRAINTS.CONSTRAINT_NAME }, true); + public static final UniqueKey UNIQUE_INDEX_NAME = Internal.createUniqueKey(Constraints.CONSTRAINTS, DSL.name("UNIQUE_INDEX_NAME"), new TableField[] { Constraints.CONSTRAINTS.TABLE_CATALOG, Constraints.CONSTRAINTS.TABLE_SCHEMA, Constraints.CONSTRAINTS.UNIQUE_INDEX_NAME }, true); + public static final UniqueKey SYNTHETIC_PK_DOMAINS = Internal.createUniqueKey(Domains.DOMAINS, DSL.name("SYNTHETIC_PK_DOMAINS"), new TableField[] { Domains.DOMAINS.DOMAIN_CATALOG, Domains.DOMAINS.DOMAIN_SCHEMA, Domains.DOMAINS.DOMAIN_NAME }, true); public static final UniqueKey SYNTHETIC_PK_SCHEMATA = Internal.createUniqueKey(Schemata.SCHEMATA, DSL.name("SYNTHETIC_PK_SCHEMATA"), new TableField[] { Schemata.SCHEMATA.CATALOG_NAME, Schemata.SCHEMATA.SCHEMA_NAME }, true); public static final UniqueKey SYNTHETIC_PK_SEQUENCES = Internal.createUniqueKey(Sequences.SEQUENCES, DSL.name("SYNTHETIC_PK_SEQUENCES"), new TableField[] { Sequences.SEQUENCES.SEQUENCE_CATALOG, Sequences.SEQUENCES.SEQUENCE_SCHEMA, Sequences.SEQUENCES.SEQUENCE_NAME }, true); public static final UniqueKey SYNTHETIC_PK_TABLES = Internal.createUniqueKey(Tables.TABLES, DSL.name("SYNTHETIC_PK_TABLES"), new TableField[] { Tables.TABLES.TABLE_CATALOG, Tables.TABLES.TABLE_SCHEMA, Tables.TABLES.TABLE_NAME }, true); @@ -35,6 +40,6 @@ public class Keys { // FOREIGN KEY definitions // ------------------------------------------------------------------------- - public static final ForeignKey SYNTHETIC_FK_SEQUENCES__SYNTHETIC_PK_SCHEMATA = Internal.createForeignKey(Sequences.SEQUENCES, DSL.name("SYNTHETIC_FK_SEQUENCES__SYNTHETIC_PK_SCHEMATA"), new TableField[] { Sequences.SEQUENCES.SEQUENCE_CATALOG, Sequences.SEQUENCES.SEQUENCE_SCHEMA }, Keys.SYNTHETIC_PK_SCHEMATA, new TableField[] { Schemata.SCHEMATA.CATALOG_NAME, Schemata.SCHEMATA.SCHEMA_NAME }, true); - public static final ForeignKey SYNTHETIC_FK_VIEWS__SYNTHETIC_PK_TABLES = Internal.createForeignKey(Views.VIEWS, DSL.name("SYNTHETIC_FK_VIEWS__SYNTHETIC_PK_TABLES"), new TableField[] { Views.VIEWS.TABLE_CATALOG, Views.VIEWS.TABLE_SCHEMA, Views.VIEWS.TABLE_NAME }, Keys.SYNTHETIC_PK_TABLES, new TableField[] { Tables.TABLES.TABLE_CATALOG, Tables.TABLES.TABLE_SCHEMA, Tables.TABLES.TABLE_NAME }, true); + public static final ForeignKey REFERENCED_CONSTRAINT = Internal.createForeignKey(CrossReferences.CROSS_REFERENCES, DSL.name("REFERENCED_CONSTRAINT"), new TableField[] { CrossReferences.CROSS_REFERENCES.PKTABLE_CATALOG, CrossReferences.CROSS_REFERENCES.PKTABLE_SCHEMA, CrossReferences.CROSS_REFERENCES.PK_NAME }, Keys.UNIQUE_INDEX_NAME, new TableField[] { Constraints.CONSTRAINTS.TABLE_CATALOG, Constraints.CONSTRAINTS.TABLE_SCHEMA, Constraints.CONSTRAINTS.UNIQUE_INDEX_NAME }, true); + public static final ForeignKey REFERENCING_CONSTRAINT = Internal.createForeignKey(CrossReferences.CROSS_REFERENCES, DSL.name("REFERENCING_CONSTRAINT"), new TableField[] { CrossReferences.CROSS_REFERENCES.FKTABLE_CATALOG, CrossReferences.CROSS_REFERENCES.FKTABLE_SCHEMA, CrossReferences.CROSS_REFERENCES.FK_NAME }, Keys.SYNTHETIC_PK_CONSTRAINTS, new TableField[] { Constraints.CONSTRAINTS.CONSTRAINT_CATALOG, Constraints.CONSTRAINTS.CONSTRAINT_SCHEMA, Constraints.CONSTRAINTS.CONSTRAINT_NAME }, true); } diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Constraints.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Constraints.java index f710c03c10..6435675b30 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Constraints.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Constraints.java @@ -4,6 +4,9 @@ package org.jooq.meta.h2.information_schema.tables; +import java.util.Arrays; +import java.util.List; + import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.Name; @@ -12,10 +15,12 @@ import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; import org.jooq.TableOptions; +import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; import org.jooq.impl.TableImpl; import org.jooq.meta.h2.information_schema.InformationSchema; +import org.jooq.meta.h2.information_schema.Keys; /** @@ -24,7 +29,7 @@ import org.jooq.meta.h2.information_schema.InformationSchema; @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Constraints extends TableImpl { - private static final long serialVersionUID = -1874744305; + private static final long serialVersionUID = 1109555495; /** * The reference instance of INFORMATION_SCHEMA.CONSTRAINTS @@ -142,6 +147,16 @@ public class Constraints extends TableImpl { return InformationSchema.INFORMATION_SCHEMA; } + @Override + public UniqueKey getPrimaryKey() { + return Keys.SYNTHETIC_PK_CONSTRAINTS; + } + + @Override + public List> getKeys() { + return Arrays.>asList(Keys.SYNTHETIC_PK_CONSTRAINTS, Keys.UNIQUE_INDEX_NAME); + } + @Override public Constraints as(String alias) { return new Constraints(DSL.name(alias), this); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/CrossReferences.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/CrossReferences.java index e8b4994056..d9c0f47062 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/CrossReferences.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/CrossReferences.java @@ -4,6 +4,9 @@ package org.jooq.meta.h2.information_schema.tables; +import java.util.Arrays; +import java.util.List; + import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.Name; @@ -16,6 +19,7 @@ import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; import org.jooq.impl.TableImpl; import org.jooq.meta.h2.information_schema.InformationSchema; +import org.jooq.meta.h2.information_schema.Keys; /** @@ -24,7 +28,7 @@ import org.jooq.meta.h2.information_schema.InformationSchema; @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class CrossReferences extends TableImpl { - private static final long serialVersionUID = 1748978946; + private static final long serialVersionUID = 917541835; /** * The reference instance of INFORMATION_SCHEMA.CROSS_REFERENCES @@ -147,6 +151,19 @@ public class CrossReferences extends TableImpl { return InformationSchema.INFORMATION_SCHEMA; } + @Override + public List> getReferences() { + return Arrays.>asList(Keys.REFERENCED_CONSTRAINT, Keys.REFERENCING_CONSTRAINT); + } + + public Constraints referencedConstraint() { + return new Constraints(this, Keys.REFERENCED_CONSTRAINT); + } + + public Constraints referencingConstraint() { + return new Constraints(this, Keys.REFERENCING_CONSTRAINT); + } + @Override public CrossReferences as(String alias) { return new CrossReferences(DSL.name(alias), this); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Domains.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Domains.java index c16688c7f6..7a3502707c 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Domains.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Domains.java @@ -4,6 +4,9 @@ package org.jooq.meta.h2.information_schema.tables; +import java.util.Arrays; +import java.util.List; + import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.Name; @@ -12,10 +15,12 @@ import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableField; import org.jooq.TableOptions; +import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; import org.jooq.impl.TableImpl; import org.jooq.meta.h2.information_schema.InformationSchema; +import org.jooq.meta.h2.information_schema.Keys; /** @@ -24,7 +29,7 @@ import org.jooq.meta.h2.information_schema.InformationSchema; @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Domains extends TableImpl { - private static final long serialVersionUID = 942942537; + private static final long serialVersionUID = -280782399; /** * The reference instance of INFORMATION_SCHEMA.DOMAINS @@ -147,6 +152,16 @@ public class Domains extends TableImpl { return InformationSchema.INFORMATION_SCHEMA; } + @Override + public UniqueKey getPrimaryKey() { + return Keys.SYNTHETIC_PK_DOMAINS; + } + + @Override + public List> getKeys() { + return Arrays.>asList(Keys.SYNTHETIC_PK_DOMAINS); + } + @Override public Domains as(String alias) { return new Domains(DSL.name(alias), this); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Sequences.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Sequences.java index f3c6844666..e99abb78c2 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Sequences.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Sequences.java @@ -29,7 +29,7 @@ import org.jooq.meta.h2.information_schema.Keys; @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Sequences extends TableImpl { - private static final long serialVersionUID = 585173913; + private static final long serialVersionUID = 1626961889; /** * The reference instance of INFORMATION_SCHEMA.SEQUENCES @@ -152,15 +152,6 @@ public class Sequences extends TableImpl { return Arrays.>asList(Keys.SYNTHETIC_PK_SEQUENCES); } - @Override - public List> getReferences() { - return Arrays.>asList(Keys.SYNTHETIC_FK_SEQUENCES__SYNTHETIC_PK_SCHEMATA); - } - - public Schemata schemata() { - return new Schemata(this, Keys.SYNTHETIC_FK_SEQUENCES__SYNTHETIC_PK_SCHEMATA); - } - @Override public Sequences as(String alias) { return new Sequences(DSL.name(alias), this); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Views.java b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Views.java index 995e3b759d..b93f56adc9 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Views.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/h2/information_schema/tables/Views.java @@ -4,9 +4,6 @@ package org.jooq.meta.h2.information_schema.tables; -import java.util.Arrays; -import java.util.List; - import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.Name; @@ -19,7 +16,6 @@ import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; import org.jooq.impl.TableImpl; import org.jooq.meta.h2.information_schema.InformationSchema; -import org.jooq.meta.h2.information_schema.Keys; /** @@ -28,7 +24,7 @@ import org.jooq.meta.h2.information_schema.Keys; @SuppressWarnings({ "all", "unchecked", "rawtypes" }) public class Views extends TableImpl { - private static final long serialVersionUID = -517611495; + private static final long serialVersionUID = 870568262; /** * The reference instance of INFORMATION_SCHEMA.VIEWS @@ -126,15 +122,6 @@ public class Views extends TableImpl { return InformationSchema.INFORMATION_SCHEMA; } - @Override - public List> getReferences() { - return Arrays.>asList(Keys.SYNTHETIC_FK_VIEWS__SYNTHETIC_PK_TABLES); - } - - public Tables tables() { - return new Tables(this, Keys.SYNTHETIC_FK_VIEWS__SYNTHETIC_PK_TABLES); - } - @Override public Views as(String alias) { return new Views(DSL.name(alias), this);