From 16ca895637d4eca2ca2e1654a805460deb1ad971 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 8 Feb 2022 10:57:03 +0100 Subject: [PATCH] [jOOQ/jOOQ#9768] Support MySQL inline INDEX specifications in DDLDatabase --- jOOQ/src/main/java/org/jooq/Replacers.java | 77 ----------- jOOQ/src/main/java/org/jooq/impl/DDL.java | 42 +++--- .../src/main/java/org/jooq/impl/Internal.java | 121 ++++++++++++++++-- 3 files changed, 134 insertions(+), 106 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Replacers.java b/jOOQ/src/main/java/org/jooq/Replacers.java index a8c9b79a6c..4a17787788 100644 --- a/jOOQ/src/main/java/org/jooq/Replacers.java +++ b/jOOQ/src/main/java/org/jooq/Replacers.java @@ -78,83 +78,6 @@ package org.jooq; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jOOQ/src/main/java/org/jooq/impl/DDL.java b/jOOQ/src/main/java/org/jooq/impl/DDL.java index ddcd2f3593..7840167e31 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDL.java @@ -103,7 +103,7 @@ final class DDL { this.configuration = configuration; } - private final List createTableOrView(Table table, Collection constraints) { + final List createTableOrView(Table table, Collection constraints) { boolean temporary = table.getType() == TableType.TEMPORARY; boolean view = table.getType().isView(); OnCommit onCommit = table.getOptions().onCommit(); @@ -225,34 +225,36 @@ final class DDL { return createTableOrView(table, constraints(table)); } - private final List createIndex(Table table) { + final List createIndex(Table table) { List result = new ArrayList<>(); if (configuration.flags().contains(DDLFlag.INDEX)) for (Index i : sortIf(table.getIndexes(), !configuration.respectIndexOrder())) - result.add( - (configuration.createIndexIfNotExists() - ? i.getUnique() - ? ctx.createUniqueIndexIfNotExists(i) - : ctx.createIndexIfNotExists(i) - : i.getUnique() - ? ctx.createUniqueIndex(i) - : ctx.createIndex(i)) - .on(i.getTable(), i.getFields()) - ); + result.add(createIndex(i)); return result; } - private final List alterTableAddConstraints(Table table) { + final Query createIndex(Index i) { + return (configuration.createIndexIfNotExists() + ? i.getUnique() + ? ctx.createUniqueIndexIfNotExists(i) + : ctx.createIndexIfNotExists(i) + : i.getUnique() + ? ctx.createUniqueIndex(i) + : ctx.createIndex(i)) + .on(i.getTable(), i.getFields()); + } + + final List alterTableAddConstraints(Table table) { return alterTableAddConstraints(table, constraints(table)); } - private final List alterTableAddConstraints(Table table, List constraints) { + final List alterTableAddConstraints(Table table, List constraints) { return map(constraints, c -> ctx.alterTable(table).add(c)); } - private final List constraints(Table table) { + final List constraints(Table table) { List result = new ArrayList<>(); result.addAll(primaryKeys(table)); @@ -263,7 +265,7 @@ final class DDL { return result; } - private final List primaryKeys(Table table) { + final List primaryKeys(Table table) { List result = new ArrayList<>(); if (configuration.flags().contains(PRIMARY_KEY) && (table.getType() != VIEW || configuration.includeConstraintsOnViews())) @@ -274,7 +276,7 @@ final class DDL { return result; } - private final List uniqueKeys(Table table) { + final List uniqueKeys(Table table) { List result = new ArrayList<>(); if (configuration.flags().contains(UNIQUE) && (table.getType() != VIEW || configuration.includeConstraintsOnViews())) @@ -285,7 +287,7 @@ final class DDL { return result; } - private final List foreignKeys(Table table) { + final List foreignKeys(Table table) { List result = new ArrayList<>(); if (configuration.flags().contains(FOREIGN_KEY) && (table.getType() != VIEW || configuration.includeConstraintsOnViews())) @@ -295,7 +297,7 @@ final class DDL { return result; } - private final List checks(Table table) { + final List checks(Table table) { List result = new ArrayList<>(); if (configuration.flags().contains(CHECK) && (table.getType() != VIEW || configuration.includeConstraintsOnViews())) @@ -321,7 +323,7 @@ final class DDL { return ctx.queries(queries); } - private final List commentOn(Table table) { + final List commentOn(Table table) { List result = new ArrayList<>(); if (configuration.flags().contains(COMMENT)) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Internal.java b/jOOQ/src/main/java/org/jooq/impl/Internal.java index 0cbd078a97..a88b890a49 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Internal.java +++ b/jOOQ/src/main/java/org/jooq/impl/Internal.java @@ -38,17 +38,21 @@ package org.jooq.impl; import static org.jooq.impl.Tools.CTX; +import static org.jooq.impl.Tools.configuration; import static org.jooq.impl.Tools.nullSafe; +import static org.jooq.tools.StringUtils.isBlank; import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; import java.util.function.Consumer; import java.util.function.Supplier; -import org.jooq.Attachable; import org.jooq.Binding; import org.jooq.Check; -import org.jooq.Configuration; +import org.jooq.Comment; import org.jooq.Converter; +import org.jooq.DDLExportConfiguration; import org.jooq.DataType; import org.jooq.Domain; import org.jooq.EmbeddableRecord; @@ -61,18 +65,25 @@ import org.jooq.OrderField; import org.jooq.ParamMode; import org.jooq.Parameter; // ... +import org.jooq.Queries; +import org.jooq.Query; import org.jooq.Record; +// ... +// ... import org.jooq.Result; import org.jooq.Row; import org.jooq.Schema; import org.jooq.Sequence; +import org.jooq.Statement; import org.jooq.Support; import org.jooq.Table; +import org.jooq.TableElement; import org.jooq.TableField; import org.jooq.UDT; import org.jooq.UDTRecord; import org.jooq.UniqueKey; import org.jooq.exception.DataAccessException; +import org.jooq.impl.QOM.CreateTable; // ... // ... @@ -497,11 +508,103 @@ public final class Internal { CTX.configuration().requireCommercial(logMessage); } - /** - * Retrieve a {@link Configuration} from an attachable, or the default - * {@link Configuration} if the attachable is detached. - */ - public static final Configuration configuration(Attachable attachable) { - return Tools.configuration(attachable); - } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + }