From 366561ddeb726ac854b4532ab9b7fa3cedbb9cf9 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 16 Jan 2023 11:32:19 +0100 Subject: [PATCH] [jOOQ/jOOQ#13640] Add mutators for () --- jOOQ/src/main/java/org/jooq/Select.java | 26 +++++++++++++ jOOQ/src/main/java/org/jooq/impl/QOM.java | 12 ++++-- .../main/java/org/jooq/impl/SelectImpl.java | 7 ++++ .../java/org/jooq/impl/SelectQueryImpl.java | 12 +++++- .../src/main/java/org/jooq/impl/WithImpl.java | 38 ++++++++++--------- 5 files changed, 74 insertions(+), 21 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Select.java b/jOOQ/src/main/java/org/jooq/Select.java index 7bf274626d..52a6eacf2d 100644 --- a/jOOQ/src/main/java/org/jooq/Select.java +++ b/jOOQ/src/main/java/org/jooq/Select.java @@ -202,6 +202,14 @@ extends @Experimental @Nullable With $with(); + /** + * Experimental query object model accessor method, see also {@link QOM}. + * Subject to change in future jOOQ versions, use at your own risk. + */ + @Experimental + @CheckReturnValue + @Nullable Select $with(With newWith); + /** * Experimental query object model accessor method, see also {@link QOM}. * Subject to change in future jOOQ versions, use at your own risk. @@ -214,6 +222,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $select(Collection newSelect); /** @@ -228,6 +237,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $distinct(boolean newDistinct); /** @@ -242,6 +252,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $distinctOn(Collection newDistinctOn); /** @@ -256,6 +267,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $from(Collection> newFrom); /** @@ -270,6 +282,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $where(Condition newWhere); /** @@ -284,6 +297,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $groupBy(Collection newGroupBy); /** @@ -298,6 +312,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $groupByDistinct(boolean newGroupByDistinct); /** @@ -312,6 +327,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $having(Condition newHaving); /** @@ -326,6 +342,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $window(Collection newWindow); /** @@ -340,6 +357,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $qualify(Condition newQualify); /** @@ -354,6 +372,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $orderBy(Collection> newOrderBy); /** @@ -368,6 +387,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $limit(Field newLimit); /** @@ -382,6 +402,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $limitPercent(boolean newLimitPercent); /** @@ -396,6 +417,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $limitWithTies(boolean newLimitWithTies); /** @@ -410,6 +432,7 @@ extends * Subject to change in future jOOQ versions, use at your own risk. */ @Experimental + @CheckReturnValue @NotNull Select $offset(Field newOffset); @@ -453,6 +476,9 @@ extends + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index cc9a6d6eff..395279459c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -432,14 +432,20 @@ public final class QOM { * A WITH clause of a {@link Select}, {@link Insert}, * {@link Update}, or {@link Delete} statement. */ - public /*sealed*/ interface With + public sealed interface With extends org.jooq.QueryPart - /*permits - WithImpl*/ + permits + WithImpl { @NotNull UnmodifiableList> $commonTableExpressions(); + @CheckReturnValue + @NotNull + With $commonTableExpressions(UnmodifiableList> commonTableExpressions); boolean $recursive(); + @CheckReturnValue + @NotNull + With $recursive(boolean recursive); } /** diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index 9913b85d37..053a7a46e6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -134,6 +134,8 @@ import org.jooq.WindowDefinition; import org.jooq.impl.QOM.UnmodifiableList; import org.jooq.impl.QOM.With; +import org.jetbrains.annotations.Nullable; + /** * A wrapper for a {@link SelectQuery} * @@ -3403,6 +3405,11 @@ implements return getDelegate().$with(); } + @Override + public final Select $with(With newWith) { + return getDelegate().$with(newWith); + } + @Override public final UnmodifiableList $select() { return getDelegate().$select(); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 5a9f0ae62d..5af901d71e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -306,6 +306,7 @@ import org.jooq.impl.ForLock.ForLockWaitMode; import org.jooq.impl.QOM.CompareCondition; import org.jooq.impl.QOM.Materialized; import org.jooq.impl.QOM.UnmodifiableList; +import org.jooq.impl.QOM.With; import org.jooq.impl.Tools.BooleanDataKey; import org.jooq.impl.Tools.ExtendedDataKey; import org.jooq.impl.Tools.SimpleDataKey; @@ -600,7 +601,11 @@ final class SelectQueryImpl extends AbstractResultQuery imp } private final SelectQueryImpl copy(Consumer> finisher) { - SelectQueryImpl result = copyTo(CopyClause.END, false, new SelectQueryImpl<>(configuration(), with)); + return copy(finisher, with); + } + + private final SelectQueryImpl copy(Consumer> finisher, WithImpl newWith) { + SelectQueryImpl result = copyTo(CopyClause.END, false, new SelectQueryImpl<>(configuration(), newWith)); finisher.accept(result); return result; } @@ -4674,6 +4679,11 @@ final class SelectQueryImpl extends AbstractResultQuery imp return with; } + @Override + public final SelectQueryImpl $with(With newWith) { + return copy(s -> {}, (WithImpl) newWith); + } + @Override public final UnmodifiableList $select() { return QOM.unmodifiable(select); diff --git a/jOOQ/src/main/java/org/jooq/impl/WithImpl.java b/jOOQ/src/main/java/org/jooq/impl/WithImpl.java index 7e57b859bd..2d36411cf5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/WithImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/WithImpl.java @@ -41,13 +41,6 @@ import static org.jooq.Clause.WITH; // ... // ... // ... -import static org.jooq.SQLDialect.CUBRID; -// ... -import static org.jooq.SQLDialect.DERBY; -// ... -// ... -// ... -// ... // ... // ... // ... @@ -60,7 +53,6 @@ import static org.jooq.impl.Keywords.K_WITH; import static org.jooq.impl.Tools.EMPTY_NAME; import static org.jooq.impl.Tools.BooleanDataKey.DATA_LIST_ALREADY_INDENTED; import static org.jooq.impl.Tools.SimpleDataKey.DATA_TOP_LEVEL_CTE; -import static org.jooq.impl.Transformations.NO_SUPPORT_CTE; import static org.jooq.impl.Transformations.transformInlineCTE; import java.util.Arrays; @@ -141,6 +133,8 @@ import org.jooq.WithStep; import org.jooq.impl.QOM.UnmodifiableList; import org.jooq.impl.QOM.With; +import org.jetbrains.annotations.NotNull; + /** * This type models an intermediary DSL construction step, which leads towards * creating any of the other 5 DML statement types. @@ -181,7 +175,7 @@ implements WithStep, With { - private static final Clause[] CLAUSES = { WITH }; + private static final Clause[] CLAUSES = { WITH }; @@ -189,15 +183,15 @@ implements - final CommonTableExpressionList ctes; - final boolean recursive; - private Configuration configuration; + final CommonTableExpressionList ctes; + final boolean recursive; + private Configuration configuration; // Intermediary properties for CTE construction - private Name alias; - private Name[] fieldAliases; - private BiFunction, ? super Integer, ? extends String> fieldNameFunction; + private transient Name alias; + private transient Name[] fieldAliases; + private transient BiFunction, ? super Integer, ? extends String> fieldNameFunction; WithImpl(Configuration configuration, boolean recursive) { this.configuration = configuration; @@ -587,12 +581,12 @@ implements @Override - public final WithStep with(CommonTableExpression... tables) { + public final WithImpl with(CommonTableExpression... tables) { return with(Arrays.asList(tables)); } @Override - public final WithStep with(Collection> tables) { + public final WithImpl with(Collection> tables) { for (CommonTableExpression table : tables) ctes.add(table); @@ -1191,11 +1185,21 @@ implements return QOM.unmodifiable(ctes); } + @Override + public final WithImpl $commonTableExpressions(UnmodifiableList> c) { + return new WithImpl(configuration, recursive).with(c); + } + @Override public final boolean $recursive() { return recursive; } + @Override + public final WithImpl $recursive(boolean r) { + return new WithImpl(configuration, r).with(ctes); + } +