[jOOQ/jOOQ#9985] Improve formatting of MergeImpl::toSQLH2Merge

This commit is contained in:
Lukas Eder 2020-03-24 12:41:12 +01:00
parent eb1e7dc6f3
commit c6aae375d7
4 changed files with 37 additions and 12 deletions

View File

@ -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);
}
}

View File

@ -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(')');
}

View File

@ -61,6 +61,7 @@ class QueryPartCollectionView<T extends QueryPart> extends AbstractQueryPart imp
private static final long serialVersionUID = -2936922742534009564L;
final Collection<T> wrapped;
int indentSize;
Boolean qualify;
static <T extends QueryPart> QueryPartCollectionView<T> wrap(Collection<T> wrapped) {
return new QueryPartCollectionView<>(wrapped);
@ -79,6 +80,11 @@ class QueryPartCollectionView<T extends QueryPart> extends AbstractQueryPart imp
return this;
}
QueryPartCollectionView<T> qualify(boolean newQualify) {
this.qualify = newQualify;
return this;
}
Collection<T> wrapped() {
return wrapped;
}
@ -87,6 +93,10 @@ class QueryPartCollectionView<T extends QueryPart> 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<T extends QueryPart> extends AbstractQueryPart imp
if (indent)
ctx.formatIndentEnd().formatNewLine();
}
if (qualify != null)
ctx.qualify(previousQualify);
}
/**

View File

@ -78,6 +78,11 @@ class QueryPartListView<T extends QueryPart> extends QueryPartCollectionView<T>
return (QueryPartListView<T>) super.indentSize(newIndentSize);
}
@Override
QueryPartListView<T> qualify(boolean newQualify) {
return (QueryPartListView<T>) super.qualify(newQualify);
}
@Override
List<T> wrapped() {
return (List<T>) super.wrapped();