From c6aae375d7ba8f3e80474bf9cfd4dca4906657e4 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 24 Mar 2020 12:41:12 +0100 Subject: [PATCH] [jOOQ/jOOQ#9985] Improve formatting of MergeImpl::toSQLH2Merge --- .../main/java/org/jooq/impl/JoinTable.java | 12 ++++++++---- .../main/java/org/jooq/impl/MergeImpl.java | 19 +++++++++++-------- .../jooq/impl/QueryPartCollectionView.java | 13 +++++++++++++ .../java/org/jooq/impl/QueryPartListView.java | 5 +++++ 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index 2b398f03c1..4857f43f28 100755 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -97,7 +97,7 @@ import static org.jooq.impl.Keywords.K_ON; import static org.jooq.impl.Keywords.K_PARTITION_BY; import static org.jooq.impl.Keywords.K_USING; import static org.jooq.impl.Names.N_JOIN; -import static org.jooq.impl.Tools.renderUnqualifiedNames; +import static org.jooq.impl.QueryPartListView.wrap; import static org.jooq.impl.Tools.BooleanDataKey.DATA_COLLECT_SEMI_ANTI_JOIN; import static org.jooq.impl.Tools.DataKey.DATA_COLLECTED_SEMI_ANTI_JOIN; @@ -462,12 +462,16 @@ implements // Native supporters of JOIN .. USING else { + boolean qualify = context.qualify(); + context.formatSeparator() .start(TABLE_JOIN_USING) .visit(K_USING) - .sql(" ("); - renderUnqualifiedNames(context, using); - context.sql(')') + .sql(" (") + .qualify(false) + .visit(wrap(using).indentSize(0)) + .qualify(qualify) + .sql(')') .end(TABLE_JOIN_USING); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java index 45f8e5f4dd..1d2f2098bb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java @@ -76,6 +76,7 @@ import static org.jooq.impl.Keywords.K_VALUES; import static org.jooq.impl.Keywords.K_WHEN; import static org.jooq.impl.Keywords.K_WHERE; import static org.jooq.impl.Keywords.K_WITH_PRIMARY_KEY; +import static org.jooq.impl.QueryPartCollectionView.wrap; import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.renderUnqualifiedNames; import static org.jooq.impl.Tools.BooleanDataKey.DATA_WRAP_DERIVED_TABLES_IN_PARENTHESES; @@ -1375,22 +1376,24 @@ implements .visit(table) .formatSeparator(); - ctx.sql('('); - renderUnqualifiedNames(ctx, getUpsertFields()); - ctx.sql(')'); + ctx.sql('(') + .visit(wrap(getUpsertFields()).qualify(false)) + .sql(')'); if (!getUpsertKeys().isEmpty()) { - ctx.sql(' ').visit(K_KEY).sql(" ("); - renderUnqualifiedNames(ctx, getUpsertKeys()); - ctx.sql(')'); + ctx.formatSeparator() + .visit(K_KEY).sql(" (") + .visit(wrap(getUpsertKeys()).qualify(false)) + .sql(')'); } if (upsertSelect != null) { - ctx.sql(' ') + ctx.formatSeparator() .visit(upsertSelect); } else { - ctx.sql(' ').visit(K_VALUES).sql(" (") + ctx.formatSeparator() + .visit(K_VALUES).sql(" (") .visit(getUpsertValues()) .sql(')'); } diff --git a/jOOQ/src/main/java/org/jooq/impl/QueryPartCollectionView.java b/jOOQ/src/main/java/org/jooq/impl/QueryPartCollectionView.java index 9a6aa21bbd..2f3d8a27f2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QueryPartCollectionView.java +++ b/jOOQ/src/main/java/org/jooq/impl/QueryPartCollectionView.java @@ -61,6 +61,7 @@ class QueryPartCollectionView extends AbstractQueryPart imp private static final long serialVersionUID = -2936922742534009564L; final Collection wrapped; int indentSize; + Boolean qualify; static QueryPartCollectionView wrap(Collection wrapped) { return new QueryPartCollectionView<>(wrapped); @@ -79,6 +80,11 @@ class QueryPartCollectionView extends AbstractQueryPart imp return this; } + QueryPartCollectionView qualify(boolean newQualify) { + this.qualify = newQualify; + return this; + } + Collection wrapped() { return wrapped; } @@ -87,6 +93,10 @@ class QueryPartCollectionView extends AbstractQueryPart imp public /* non-final */ void accept(Context ctx) { int size = size(); boolean format = size >= indentSize; + boolean previousQualify = ctx.qualify(); + + if (qualify != null) + ctx.qualify(qualify); if (ctx.separatorRequired()) if (format) @@ -127,6 +137,9 @@ class QueryPartCollectionView extends AbstractQueryPart imp if (indent) ctx.formatIndentEnd().formatNewLine(); } + + if (qualify != null) + ctx.qualify(previousQualify); } /** diff --git a/jOOQ/src/main/java/org/jooq/impl/QueryPartListView.java b/jOOQ/src/main/java/org/jooq/impl/QueryPartListView.java index 21f857fe36..709b13c6e9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QueryPartListView.java +++ b/jOOQ/src/main/java/org/jooq/impl/QueryPartListView.java @@ -78,6 +78,11 @@ class QueryPartListView extends QueryPartCollectionView return (QueryPartListView) super.indentSize(newIndentSize); } + @Override + QueryPartListView qualify(boolean newQualify) { + return (QueryPartListView) super.qualify(newQualify); + } + @Override List wrapped() { return (List) super.wrapped();