[jOOQ/jOOQ#12868] The DATA_RENDERING_DATA_CHANGE_DELTA_TABLE qualification omission doesn't work correctly in the presence of scalar subqueries
This commit is contained in:
parent
7aeed2e41f
commit
a39f95a117
@ -97,9 +97,11 @@ import static org.jooq.impl.Tools.EMPTY_STRING;
|
||||
import static org.jooq.impl.Tools.anyMatch;
|
||||
import static org.jooq.impl.Tools.autoAlias;
|
||||
import static org.jooq.impl.Tools.flattenCollection;
|
||||
import static org.jooq.impl.Tools.increment;
|
||||
import static org.jooq.impl.Tools.map;
|
||||
import static org.jooq.impl.Tools.BooleanDataKey.DATA_UNALIAS_ALIASED_EXPRESSIONS;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_DML_TARGET_TABLE;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_TOP_LEVEL_CTE;
|
||||
import static org.jooq.tools.StringUtils.defaultIfNull;
|
||||
import static org.jooq.util.sqlite.SQLiteDSL.rowid;
|
||||
@ -367,14 +369,14 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
|
||||
boolean previousDeclareFields = ctx.declareFields();
|
||||
|
||||
if (NATIVE_SUPPORT_DATA_CHANGE_DELTA_TABLE.contains(ctx.dialect())
|
||||
&& !returning.isEmpty()
|
||||
&& !TRUE.equals(ctx.data(BooleanDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE))) {
|
||||
ctx.data(BooleanDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE,
|
||||
true,
|
||||
c -> c.visit(select(returning).from(
|
||||
&& !returning.isEmpty()
|
||||
&& ctx.data(DATA_RENDERING_DATA_CHANGE_DELTA_TABLE) == null
|
||||
) {
|
||||
increment(ctx.data(), DATA_RENDERING_DATA_CHANGE_DELTA_TABLE, () -> {
|
||||
ctx.visit(select(returning).from(
|
||||
new DataChangeDeltaTable<>(this instanceof Delete ? ResultOption.OLD : ResultOption.FINAL, this).as(table().getUnqualifiedName())
|
||||
))
|
||||
);
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -52,19 +52,17 @@ import static org.jooq.impl.Keywords.K_OLD;
|
||||
import static org.jooq.impl.Keywords.K_RETURNING;
|
||||
import static org.jooq.impl.Keywords.K_TABLE;
|
||||
import static org.jooq.impl.Tools.abstractDMLQuery;
|
||||
import static org.jooq.impl.Tools.increment;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_TOP_LEVEL_CTE;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import org.jooq.Context;
|
||||
import org.jooq.DMLQuery;
|
||||
import org.jooq.Delete;
|
||||
import org.jooq.Function1;
|
||||
import org.jooq.Insert;
|
||||
import org.jooq.Merge;
|
||||
import org.jooq.Name;
|
||||
import org.jooq.QueryPart;
|
||||
import org.jooq.Record;
|
||||
@ -167,8 +165,7 @@ implements
|
||||
if (requiresWorkaroundFor12925(ctx))
|
||||
ctx.sql("/* [#12925] ").sql(UUID.randomUUID().toString()).sql(" */").formatSeparator();
|
||||
|
||||
ctx.visit(query)
|
||||
.sqlIndentEnd(')');
|
||||
increment(ctx.data(), DATA_RENDERING_DATA_CHANGE_DELTA_TABLE, () -> ctx.visit(query).sqlIndentEnd(')'));
|
||||
}
|
||||
|
||||
private final boolean requiresWorkaroundFor12925(Context<?> ctx) {
|
||||
|
||||
@ -169,7 +169,6 @@ import static org.jooq.impl.Keywords.K_MATERIALIZE;
|
||||
import static org.jooq.impl.Keywords.K_NOCYCLE;
|
||||
import static org.jooq.impl.Keywords.K_ORDER;
|
||||
import static org.jooq.impl.Keywords.K_ORDER_BY;
|
||||
import static org.jooq.impl.Keywords.K_PERCENT;
|
||||
import static org.jooq.impl.Keywords.K_QUALIFY;
|
||||
import static org.jooq.impl.Keywords.K_SELECT;
|
||||
import static org.jooq.impl.Keywords.K_SIBLINGS;
|
||||
@ -194,7 +193,6 @@ import static org.jooq.impl.Tools.autoAlias;
|
||||
import static org.jooq.impl.Tools.camelCase;
|
||||
import static org.jooq.impl.Tools.containsUnaliasedTable;
|
||||
import static org.jooq.impl.Tools.fieldArray;
|
||||
import static org.jooq.impl.Tools.filter;
|
||||
import static org.jooq.impl.Tools.hasAmbiguousNames;
|
||||
import static org.jooq.impl.Tools.isEmpty;
|
||||
import static org.jooq.impl.Tools.isNotEmpty;
|
||||
@ -219,6 +217,7 @@ import static org.jooq.impl.Tools.ExtendedDataKey.DATA_TRANSFORM_ROWNUM_TO_LIMIT
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_COLLECTED_SEMI_ANTI_JOIN;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_DML_TARGET_TABLE;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_OVERRIDE_ALIASES_IN_ORDER_BY;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_SELECT_ALIASES;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_SELECT_INTO_TABLE;
|
||||
import static org.jooq.impl.Tools.SimpleDataKey.DATA_TOP_LEVEL_CTE;
|
||||
@ -2212,7 +2211,7 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
|
||||
|
||||
|
||||
if (TRUE.equals(context.data(BooleanDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE)))
|
||||
if (Integer.valueOf(1).equals(context.data(DATA_RENDERING_DATA_CHANGE_DELTA_TABLE)))
|
||||
context.qualify(false);
|
||||
|
||||
context.declareFields(true);
|
||||
@ -2229,7 +2228,7 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
else
|
||||
context.visit(getSelectResolveUnsupportedAsterisks(context));
|
||||
|
||||
if (TRUE.equals(context.data(BooleanDataKey.DATA_RENDERING_DATA_CHANGE_DELTA_TABLE)))
|
||||
if (Integer.valueOf(1).equals(context.data(DATA_RENDERING_DATA_CHANGE_DELTA_TABLE)))
|
||||
context.qualify(qualify);
|
||||
|
||||
context.declareFields(false)
|
||||
|
||||
@ -505,14 +505,6 @@ final class Tools {
|
||||
*/
|
||||
DATA_ROW_VALUE_EXPRESSION_PREDICATE_SUBQUERY,
|
||||
|
||||
/**
|
||||
* [#2744] Currently rendering the data change delta table syntax.
|
||||
* <p>
|
||||
* In some dialects, a <code>FINAL TABLE (INSERT ...)</code> clause exists, which
|
||||
* corresponds to the PostgreSQL <code>INSERT .. RETURNING</code> clause.
|
||||
*/
|
||||
DATA_RENDERING_DATA_CHANGE_DELTA_TABLE,
|
||||
|
||||
|
||||
|
||||
|
||||
@ -679,6 +671,14 @@ final class Tools {
|
||||
*/
|
||||
DATA_BLOCK_NESTING,
|
||||
|
||||
/**
|
||||
* [#2744] Currently rendering the data change delta table syntax.
|
||||
* <p>
|
||||
* In some dialects, a <code>FINAL TABLE (INSERT ...)</code> clause exists, which
|
||||
* corresponds to the PostgreSQL <code>INSERT .. RETURNING</code> clause.
|
||||
*/
|
||||
DATA_RENDERING_DATA_CHANGE_DELTA_TABLE,
|
||||
|
||||
/**
|
||||
* [#531] The local window definitions.
|
||||
* <p>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user