From fc964fe9b35b31d4109370d7b7fdcc10ebb6feef Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 6 May 2021 16:54:16 +0200 Subject: [PATCH] [jOOQ/jOOQ#11850] Get SQLDialect.TERADATA up to date - Avoid using TITLE without quoting in Teradata - Fix NotField - MERGE does not support AND in MATCHED clauses - Fix WIDTH_BUCKET - Regenerate test schema - Support generating identity information ([jOOQ/jOOQ#11854]) - More XML function fixes - Fix TOP 100 PERCENT hack in the presence of UNIONs --- .../main/java/org/jooq/meta/AbstractDatabase.java | 9 ++++++++- jOOQ/src/main/java/org/jooq/XMLAggOrderByStep.java | 6 +++--- .../main/java/org/jooq/XMLExistsPassingStep.java | 6 +++--- .../main/java/org/jooq/XMLQueryPassingStep.java | 6 +++--- .../org/jooq/XMLTableColumnForOrdinalityStep.java | 1 + .../main/java/org/jooq/XMLTableColumnPathStep.java | 1 + .../java/org/jooq/XMLTableColumnsFirstStep.java | 1 + .../main/java/org/jooq/XMLTablePassingStep.java | 1 + jOOQ/src/main/java/org/jooq/impl/Keywords.java | 2 ++ jOOQ/src/main/java/org/jooq/impl/MergeImpl.java | 3 +++ jOOQ/src/main/java/org/jooq/impl/NotField.java | 1 - .../main/java/org/jooq/impl/SelectQueryImpl.java | 6 ++---- jOOQ/src/main/java/org/jooq/impl/Tools.java | 1 + jOOQ/src/main/java/org/jooq/impl/WidthBucket.java | 5 ----- jOOQ/src/main/java/org/jooq/impl/XMLParse.java | 14 ++++++++++++-- 15 files changed, 41 insertions(+), 22 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index 1eb9b83393..b093728dd3 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -351,7 +351,7 @@ public abstract class AbstractDatabase implements Database { // cases where quoting would have been necessary were found in // integration tests, or when looking for identifiers matching // [A-Za-z_$#][A-Za-z0-9_$#]+ in generated jOOQ-meta code. - configuration.settings().setRenderQuotedNames(RenderQuotedNames.NEVER); + configuration.settings().setRenderQuotedNames(getRenderQuotedNames()); if (muteExceptions) { return DSL.using(configuration); @@ -464,6 +464,13 @@ public abstract class AbstractDatabase implements Database { } } + /** + * Subclasses may override this. + */ + protected RenderQuotedNames getRenderQuotedNames() { + return RenderQuotedNames.NEVER; + } + /** * Check if the configured dialect is versioned explicitly and supports a * given dialect. diff --git a/jOOQ/src/main/java/org/jooq/XMLAggOrderByStep.java b/jOOQ/src/main/java/org/jooq/XMLAggOrderByStep.java index 67d61ff6ea..1fe7043601 100644 --- a/jOOQ/src/main/java/org/jooq/XMLAggOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLAggOrderByStep.java @@ -37,16 +37,16 @@ */ package org.jooq; -import org.jetbrains.annotations.*; - - // ... import static org.jooq.SQLDialect.POSTGRES; +// ... import java.util.Collection; import org.jooq.impl.DSL; +import org.jetbrains.annotations.NotNull; + /** * The SQL standard ARRAY_AGG() function. * diff --git a/jOOQ/src/main/java/org/jooq/XMLExistsPassingStep.java b/jOOQ/src/main/java/org/jooq/XMLExistsPassingStep.java index bab58278b8..c0e0fcb743 100644 --- a/jOOQ/src/main/java/org/jooq/XMLExistsPassingStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLExistsPassingStep.java @@ -37,12 +37,12 @@ */ package org.jooq; -import org.jetbrains.annotations.*; - - // ... // ... import static org.jooq.SQLDialect.POSTGRES; +// ... + +import org.jetbrains.annotations.NotNull; /** * A step in the construction of an XMLEXISTS predicate. diff --git a/jOOQ/src/main/java/org/jooq/XMLQueryPassingStep.java b/jOOQ/src/main/java/org/jooq/XMLQueryPassingStep.java index 4e05158056..59eb03fc68 100644 --- a/jOOQ/src/main/java/org/jooq/XMLQueryPassingStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLQueryPassingStep.java @@ -37,12 +37,12 @@ */ package org.jooq; -import org.jetbrains.annotations.*; - - // ... // ... import static org.jooq.SQLDialect.POSTGRES; +// ... + +import org.jetbrains.annotations.NotNull; /** * A step in the construction of an XMLQUERY expression. diff --git a/jOOQ/src/main/java/org/jooq/XMLTableColumnForOrdinalityStep.java b/jOOQ/src/main/java/org/jooq/XMLTableColumnForOrdinalityStep.java index 69c1fdf75a..1788475fdf 100644 --- a/jOOQ/src/main/java/org/jooq/XMLTableColumnForOrdinalityStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLTableColumnForOrdinalityStep.java @@ -42,6 +42,7 @@ package org.jooq; // ... import static org.jooq.SQLDialect.POSTGRES; // ... +// ... import org.jetbrains.annotations.NotNull; diff --git a/jOOQ/src/main/java/org/jooq/XMLTableColumnPathStep.java b/jOOQ/src/main/java/org/jooq/XMLTableColumnPathStep.java index dc91c30ba7..bb68f1b512 100644 --- a/jOOQ/src/main/java/org/jooq/XMLTableColumnPathStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLTableColumnPathStep.java @@ -42,6 +42,7 @@ package org.jooq; // ... import static org.jooq.SQLDialect.POSTGRES; // ... +// ... import org.jetbrains.annotations.NotNull; diff --git a/jOOQ/src/main/java/org/jooq/XMLTableColumnsFirstStep.java b/jOOQ/src/main/java/org/jooq/XMLTableColumnsFirstStep.java index a9a105338e..573ba6973e 100644 --- a/jOOQ/src/main/java/org/jooq/XMLTableColumnsFirstStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLTableColumnsFirstStep.java @@ -42,6 +42,7 @@ package org.jooq; // ... import static org.jooq.SQLDialect.POSTGRES; // ... +// ... import org.jetbrains.annotations.NotNull; diff --git a/jOOQ/src/main/java/org/jooq/XMLTablePassingStep.java b/jOOQ/src/main/java/org/jooq/XMLTablePassingStep.java index 7c6a31dd3b..965ed489b1 100644 --- a/jOOQ/src/main/java/org/jooq/XMLTablePassingStep.java +++ b/jOOQ/src/main/java/org/jooq/XMLTablePassingStep.java @@ -42,6 +42,7 @@ package org.jooq; // ... import static org.jooq.SQLDialect.POSTGRES; // ... +// ... import org.jetbrains.annotations.NotNull; diff --git a/jOOQ/src/main/java/org/jooq/impl/Keywords.java b/jOOQ/src/main/java/org/jooq/impl/Keywords.java index 4f5fdc5ff6..c722e7f81f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Keywords.java +++ b/jOOQ/src/main/java/org/jooq/impl/Keywords.java @@ -320,6 +320,7 @@ final class Keywords { static final Keyword K_PLACING = keyword("placing"); static final Keyword K_POSITION = keyword("position"); static final Keyword K_PRECEDING = keyword("preceding"); + static final Keyword K_PRESERVE = keyword("preserve"); static final Keyword K_PREVIOUS_VALUE_FOR = keyword("previous value for"); static final Keyword K_PRIMARY_KEY = keyword("primary key"); static final Keyword K_PRIOR = keyword("prior"); @@ -431,6 +432,7 @@ final class Keywords { static final Keyword K_WHEN = keyword("when"); static final Keyword K_WHERE = keyword("where"); static final Keyword K_WHILE = keyword("while"); + static final Keyword K_WHITESPACE = keyword("whitespace"); static final Keyword K_WINDOW = keyword("window"); static final Keyword K_WITH = keyword("with"); static final Keyword K_WITHIN_GROUP = keyword("within group"); diff --git a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java index 09e5a09bfc..4dba16b47e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java @@ -57,6 +57,7 @@ import static org.jooq.SQLDialect.HSQLDB; // ... // ... // ... +import static org.jooq.conf.ParamType.INLINED; import static org.jooq.impl.DSL.condition; import static org.jooq.impl.DSL.exists; import static org.jooq.impl.DSL.insertInto; @@ -169,6 +170,7 @@ import org.jooq.Select; import org.jooq.Table; import org.jooq.TableLike; import org.jooq.UniqueKey; +import org.jooq.conf.ParamType; import org.jooq.impl.Tools.DataExtendedKey; import org.jooq.tools.StringUtils; @@ -1458,6 +1460,7 @@ implements if (usingDual) { switch (c2.family()) { case DERBY: + c2.visit(new Dual()); break; default: diff --git a/jOOQ/src/main/java/org/jooq/impl/NotField.java b/jOOQ/src/main/java/org/jooq/impl/NotField.java index 6bcc880f27..fdc232057d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NotField.java +++ b/jOOQ/src/main/java/org/jooq/impl/NotField.java @@ -64,7 +64,6 @@ final class NotField extends AbstractField { public final void accept(Context ctx) { switch (ctx.family()) { - // [#2485] Some of these don't work nicely, yet diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index d8d883161c..691b543d9d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -1555,10 +1555,11 @@ final class SelectQueryImpl extends AbstractResultQuery imp + else - ctx.data(DATA_TRANSFORM_ROWNUM_TO_LIMIT, null, c -> accept0(c)); + accept0(ctx); } final void accept0(Context context) { @@ -3097,9 +3098,6 @@ final class SelectQueryImpl extends AbstractResultQuery imp - - - diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 879854bdc3..35a9d5a711 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -4847,6 +4847,7 @@ final class Tools { // [#5062] H2's (and others') AUTO_INCREMENT flag is syntactically located *after* NULL flags. switch (ctx.family()) { + case H2: ctx.sql(' ').visit(K_GENERATED_BY_DEFAULT_AS_IDENTITY); break; diff --git a/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java b/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java index 3e2c50cb5c..46b3d6b51d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java +++ b/jOOQ/src/main/java/org/jooq/impl/WidthBucket.java @@ -102,11 +102,6 @@ extends - - - - - case POSTGRES: ctx.visit(keyword("width_bucket")).sql('(').visit(field).sql(", ").visit(low).sql(", ").visit(high).sql(", ").visit(buckets).sql(')'); break; diff --git a/jOOQ/src/main/java/org/jooq/impl/XMLParse.java b/jOOQ/src/main/java/org/jooq/impl/XMLParse.java index 65177516cf..48156efa0d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/XMLParse.java +++ b/jOOQ/src/main/java/org/jooq/impl/XMLParse.java @@ -37,11 +37,14 @@ */ package org.jooq.impl; +// ... import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.xmlparseDocument; import static org.jooq.impl.DSL.xmlquery; import static org.jooq.impl.Keywords.K_CONTENT; import static org.jooq.impl.Keywords.K_DOCUMENT; +import static org.jooq.impl.Keywords.K_PRESERVE; +import static org.jooq.impl.Keywords.K_WHITESPACE; import static org.jooq.impl.Names.N_XMLPARSE; import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.XMLParse.DocumentOrContent.DOCUMENT; @@ -86,6 +89,7 @@ final class XMLParse extends AbstractField { + case POSTGRES: default: @@ -101,8 +105,14 @@ final class XMLParse extends AbstractField { ) { ctx.visit(N_XMLPARSE).sql('(') .visit(documentOrContent == DOCUMENT ? K_DOCUMENT : K_CONTENT).sql(' ') - .visit(content) - .sql(')'); + .visit(content); + + + + + + + ctx.sql(')'); } enum DocumentOrContent { DOCUMENT, CONTENT }