diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java index c7ad20bf56..ac88ac3107 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractElementContainerDefinition.java @@ -46,7 +46,6 @@ import static org.jooq.util.AbstractDatabase.getDefinition; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -77,7 +76,12 @@ extends AbstractDefinition { @Override public final List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } protected final List getElements() { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java index 0ae21d250b..1c61a49e63 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractPackageDefinition.java @@ -42,7 +42,6 @@ package org.jooq.util; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.jooq.tools.JooqLogger; @@ -63,7 +62,12 @@ public abstract class AbstractPackageDefinition extends AbstractDefinition imple @Override public List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java index 13f5acaee8..37cc37b871 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractRoutineDefinition.java @@ -43,7 +43,6 @@ package org.jooq.util; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; @@ -84,12 +83,14 @@ public abstract class AbstractRoutineDefinition extends AbstractDefinition imple @Override public List getDefinitionPath() { - if (pkg != null) { - return Arrays.asList(getSchema(), pkg, this); - } - else { - return Arrays.asList(getSchema(), this); - } + List result = new ArrayList(); + result.addAll(getSchema().getDefinitionPath()); + + if (pkg != null) + result.add(pkg); + + result.add(this); + return result; } private void init() { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultArrayDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultArrayDefinition.java index f8d2a0d662..16dee299ab 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultArrayDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultArrayDefinition.java @@ -40,7 +40,7 @@ */ package org.jooq.util; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; public class DefaultArrayDefinition extends AbstractDefinition implements ArrayDefinition { @@ -56,7 +56,12 @@ public class DefaultArrayDefinition extends AbstractDefinition implements ArrayD @Override public List getDefinitionPath() { - return Arrays. asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultCheckConstraintDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultCheckConstraintDefinition.java index 7a179cfcdf..89e3b20a7d 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultCheckConstraintDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultCheckConstraintDefinition.java @@ -40,7 +40,7 @@ */ package org.jooq.util; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; public class DefaultCheckConstraintDefinition extends AbstractDefinition implements CheckConstraintDefinition { @@ -57,7 +57,12 @@ public class DefaultCheckConstraintDefinition extends AbstractDefinition impleme @Override public List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultDomainDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultDomainDefinition.java index 8dd7fc8b0a..d7d97e18e1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultDomainDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultDomainDefinition.java @@ -61,7 +61,12 @@ public class DefaultDomainDefinition extends AbstractDefinition implements Domai @Override public List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } public void addCheckClause(String checkClause) { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultEnumDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultEnumDefinition.java index d2fb971346..65fc90ca0f 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultEnumDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultEnumDefinition.java @@ -65,7 +65,12 @@ public class DefaultEnumDefinition extends AbstractDefinition implements EnumDef @Override public List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } public void addLiteral(String literal) { 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 282a52f5bc..874d0c22a1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultForeignKeyDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultForeignKeyDefinition.java @@ -41,7 +41,6 @@ package org.jooq.util; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -64,7 +63,12 @@ public class DefaultForeignKeyDefinition extends AbstractDefinition implements F @Override public List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } @Override diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultUniqueKeyDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultUniqueKeyDefinition.java index 2da979323d..749b01f75a 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultUniqueKeyDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultUniqueKeyDefinition.java @@ -41,7 +41,6 @@ package org.jooq.util; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class DefaultUniqueKeyDefinition extends AbstractDefinition implements UniqueKeyDefinition { @@ -67,7 +66,12 @@ public class DefaultUniqueKeyDefinition extends AbstractDefinition implements Un @Override public List getDefinitionPath() { - return Arrays.asList(getSchema(), this); + List result = new ArrayList(); + + result.addAll(getSchema().getDefinitionPath()); + result.add(this); + + return result; } @Override diff --git a/jOOQ/src/main/java/org/jooq/SchemaMapping.java b/jOOQ/src/main/java/org/jooq/SchemaMapping.java index 3577d42972..6826b51db6 100644 --- a/jOOQ/src/main/java/org/jooq/SchemaMapping.java +++ b/jOOQ/src/main/java/org/jooq/SchemaMapping.java @@ -110,6 +110,10 @@ public class SchemaMapping implements Serializable { return SettingsTools.getRenderMapping(configuration.settings()); } + private final boolean renderCatalog() { + return Boolean.TRUE.equals(configuration.settings().isRenderCatalog()); + } + private final boolean renderSchema() { return Boolean.TRUE.equals(configuration.settings().isRenderSchema()); } @@ -262,6 +266,26 @@ public class SchemaMapping implements Serializable { table.setOutput(outputTable); } + public Catalog map(Catalog catalog) { + + // [#1774] [#4795] The default Settings render schema flag takes + // precedence over the DefaultConfiguration's ignoreMapping flag! + if (!renderCatalog()) return null; + + Catalog result = catalog; + if (result != null) { + String catalogName = result.getName(); + + // [#2089] DefaultCatalog has an empty schema name + if (StringUtils.isEmpty(catalogName)) + return null; + + // [#4793] TODO implement runtime catalog mapping + } + + return result; + } + /** * Apply mapping to a given schema * diff --git a/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java b/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java index ed2bf4dff6..2196bec9b5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SchemaImpl.java @@ -102,11 +102,9 @@ public class SchemaImpl extends AbstractQueryPart implements Schema { @Override public final void accept(Context ctx) { - Catalog mappedCatalog = getCatalog(); - // [#4793] TODO: Support this - // Utils.getMappedCatalog(ctx.configuration(), getCatalog()); + Catalog mappedCatalog = Utils.getMappedCatalog(ctx.configuration(), getCatalog()); - if (ctx.qualifyCatalog() && mappedCatalog != null && !StringUtils.isBlank(mappedCatalog.getName())) { + if (ctx.qualifyCatalog() && mappedCatalog != null) { ctx.visit(mappedCatalog); ctx.sql('.'); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Utils.java b/jOOQ/src/main/java/org/jooq/impl/Utils.java index e229a421ae..ebab6dacac 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Utils.java +++ b/jOOQ/src/main/java/org/jooq/impl/Utils.java @@ -101,6 +101,7 @@ import javax.persistence.Id; import org.jooq.Attachable; import org.jooq.AttachableInternal; import org.jooq.BindContext; +import org.jooq.Catalog; import org.jooq.Clause; import org.jooq.Condition; import org.jooq.Configuration; @@ -1795,6 +1796,21 @@ final class Utils { target.changed.set(targetIndex, source.changed(sourceIndex)); } + /** + * Map a {@link Catalog} according to the configured {@link org.jooq.SchemaMapping} + */ + @SuppressWarnings("deprecation") + static final Catalog getMappedCatalog(Configuration configuration, Catalog catalog) { + org.jooq.SchemaMapping mapping = configuration.schemaMapping(); + + if (mapping != null) { + return mapping.map(catalog); + } + else { + return catalog; + } + } + /** * Map a {@link Schema} according to the configured {@link org.jooq.SchemaMapping} */ diff --git a/jOOQ/src/main/resources/xsd/jooq-runtime-3.8.0.xsd b/jOOQ/src/main/resources/xsd/jooq-runtime-3.8.0.xsd index 09f1810581..88672c064a 100644 --- a/jOOQ/src/main/resources/xsd/jooq-runtime-3.8.0.xsd +++ b/jOOQ/src/main/resources/xsd/jooq-runtime-3.8.0.xsd @@ -9,7 +9,15 @@ + + +