From 496faf748919f8fbb6bcdf4107c08f5212e2a943 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 8 Feb 2022 13:48:13 +0100 Subject: [PATCH] [jOOQ/jOOQ#13013] Interpreter does not correctly interpret CREATE INDEX .. WHERE This includes: - [jOOQ/jOOQ#12428] DDL export no longer exports INDEX WHERE clause --- jOOQ/src/main/java/org/jooq/Replacers.java | 8 -------- jOOQ/src/main/java/org/jooq/impl/DDL.java | 20 +++++++++++-------- .../main/java/org/jooq/impl/IndexImpl.java | 7 +++---- .../main/java/org/jooq/impl/Interpreter.java | 10 ++++++---- .../src/main/java/org/jooq/impl/Snapshot.java | 6 ++++-- 5 files changed, 25 insertions(+), 26 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Replacers.java b/jOOQ/src/main/java/org/jooq/Replacers.java index 4a17787788..f7a797b956 100644 --- a/jOOQ/src/main/java/org/jooq/Replacers.java +++ b/jOOQ/src/main/java/org/jooq/Replacers.java @@ -81,14 +81,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 7840167e31..cfd34e34d7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDL.java @@ -66,6 +66,7 @@ import org.jooq.ConstraintEnforcementStep; import org.jooq.CreateDomainAsStep; import org.jooq.CreateDomainConstraintStep; import org.jooq.CreateDomainDefaultStep; +import org.jooq.CreateIndexIncludeStep; import org.jooq.CreateSequenceFlagsStep; import org.jooq.CreateTableOnCommitStep; import org.jooq.CreateViewAsStep; @@ -236,14 +237,17 @@ final class DDL { } 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()); + CreateIndexIncludeStep s1 = + (configuration.createIndexIfNotExists() + ? i.getUnique() + ? ctx.createUniqueIndexIfNotExists(i) + : ctx.createIndexIfNotExists(i) + : i.getUnique() + ? ctx.createUniqueIndex(i) + : ctx.createIndex(i)) + .on(i.getTable(), i.getFields()); + + return i.getWhere() != null ? s1.where(i.getWhere()) : s1; } final List alterTableAddConstraints(Table table) { diff --git a/jOOQ/src/main/java/org/jooq/impl/IndexImpl.java b/jOOQ/src/main/java/org/jooq/impl/IndexImpl.java index 476696690c..7b6c872299 100644 --- a/jOOQ/src/main/java/org/jooq/impl/IndexImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/IndexImpl.java @@ -66,8 +66,6 @@ import org.jooq.SortField; import org.jooq.Table; import org.jooq.impl.QOM.UNotYetImplemented; -import org.jetbrains.annotations.NotNull; - /** * @author Lukas Eder */ @@ -92,8 +90,9 @@ class IndexImpl extends AbstractNamed implements Index, UNotYetImplemented { this.unique = unique; } - final SortField[] $fields() { return fields; } - final boolean $unique() { return unique; } + final SortField[] $fields() { return fields; } + final boolean $unique() { return unique; } + final Condition $where() { return where; } @Override public final void accept(Context ctx) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Interpreter.java b/jOOQ/src/main/java/org/jooq/impl/Interpreter.java index 48cef8c816..55850327d4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Interpreter.java +++ b/jOOQ/src/main/java/org/jooq/impl/Interpreter.java @@ -335,7 +335,7 @@ final class Interpreter { for (Index index : query.$indexes()) { IndexImpl impl = (IndexImpl) index; - mt.indexes.add(new MutableIndex((UnqualifiedName) impl.getUnqualifiedName(), mt, mt.sortFields(asList(impl.$fields())), impl.$unique())); + mt.indexes.add(new MutableIndex((UnqualifiedName) impl.getUnqualifiedName(), mt, mt.sortFields(asList(impl.$fields())), impl.$unique(), impl.$where())); } } @@ -964,7 +964,7 @@ final class Interpreter { return; } - mt.indexes.add(new MutableIndex((UnqualifiedName) index.getUnqualifiedName(), mt, mtf, query.$unique())); + mt.indexes.add(new MutableIndex((UnqualifiedName) index.getUnqualifiedName(), mt, mtf, query.$unique(), query.$where())); } private final void accept0(AlterIndexImpl query) { @@ -2012,13 +2012,15 @@ final class Interpreter { MutableTable table; List fields; boolean unique; + Condition where; - MutableIndex(UnqualifiedName name, MutableTable table, List fields, boolean unique) { + MutableIndex(UnqualifiedName name, MutableTable table, List fields, boolean unique, Condition where) { super(name); this.table = table; this.fields = fields; this.unique = unique; + this.where = where; } @Override @@ -2046,7 +2048,7 @@ final class Interpreter { name(), t, map(fields, msf -> t.field(msf.name()).sort(msf.sort), SortField[]::new), - null, + where, unique )); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Snapshot.java b/jOOQ/src/main/java/org/jooq/impl/Snapshot.java index c5cca24e89..605926c1cf 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Snapshot.java +++ b/jOOQ/src/main/java/org/jooq/impl/Snapshot.java @@ -172,8 +172,9 @@ final class Snapshot extends AbstractMeta { for (Field field : table.fields()) createField(field.getUnqualifiedName(), field.getDataType(), this, field.getComment()); - indexes = map(table.getIndexes(), index -> Internal.createIndex( - index.getQualifiedName(), this, + indexes = map(table.getIndexes(), index -> new IndexImpl( + index.getQualifiedName(), + this, map(index.getFields(), field -> { // [#10804] Use this table's field reference if possible. @@ -183,6 +184,7 @@ final class Snapshot extends AbstractMeta { // [#9009] TODO NULLS FIRST / NULLS LAST }, SortField[]::new), + index.getWhere(), index.getUnique() ));