[jOOQ/jOOQ#9879] Support SET ROW = (SELECT ..) for single selects
This commit is contained in:
parent
1e1723a06b
commit
ca0427d10d
@ -78,7 +78,6 @@ import static org.jooq.impl.DSL.row;
|
||||
import static org.jooq.impl.DSL.select;
|
||||
import static org.jooq.impl.DSL.table;
|
||||
import static org.jooq.impl.DSL.when;
|
||||
import static org.jooq.impl.FieldMapsForInsert.keysAndComputedOnClient;
|
||||
import static org.jooq.impl.Keywords.K_ROW;
|
||||
import static org.jooq.impl.Tools.anyMatch;
|
||||
import static org.jooq.impl.Tools.collect;
|
||||
@ -91,6 +90,8 @@ import static org.jooq.impl.Tools.unqualified;
|
||||
import static org.jooq.impl.Tools.visitSubquery;
|
||||
import static org.jooq.impl.Tools.DataKey.DATA_ON_DUPLICATE_KEY_WHERE;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
@ -416,6 +417,9 @@ final class FieldMapForUpdate extends AbstractQueryPartMap<FieldOrRow, FieldOrRo
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -53,10 +53,10 @@ import static org.jooq.impl.DSL.select;
|
||||
import static org.jooq.impl.Keywords.K_DEFAULT_VALUES;
|
||||
import static org.jooq.impl.Keywords.K_VALUES;
|
||||
import static org.jooq.impl.QueryPartCollectionView.wrap;
|
||||
import static org.jooq.impl.Tools.EMPTY_FIELD;
|
||||
import static org.jooq.impl.Tools.anyMatch;
|
||||
import static org.jooq.impl.Tools.filter;
|
||||
import static org.jooq.impl.Tools.flatten;
|
||||
import static org.jooq.impl.Tools.flattenFieldOrRows;
|
||||
import static org.jooq.impl.Tools.lazy;
|
||||
import static org.jooq.impl.Tools.BooleanDataKey.DATA_EMULATE_BULK_INSERT_RETURNING;
|
||||
|
||||
@ -213,7 +213,6 @@ final class FieldMapsForInsert extends AbstractQueryPart implements UNotYetImple
|
||||
.end(INSERT_SELECT);
|
||||
}
|
||||
|
||||
static final <K extends FieldOrRow> Set<K> keysAndComputedOnClient(Set<K> keys, Table<?> table) {
|
||||
|
||||
|
||||
|
||||
@ -222,8 +221,8 @@ final class FieldMapsForInsert extends AbstractQueryPart implements UNotYetImple
|
||||
|
||||
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -577,7 +576,12 @@ final class FieldMapsForInsert extends AbstractQueryPart implements UNotYetImple
|
||||
}
|
||||
|
||||
// [#989] Avoid qualifying fields in INSERT field declaration
|
||||
Set<Field<?>> fields = keysAndComputedOnClient(keysFlattened(ctx), table);
|
||||
Set<Field<?>> fields = keysFlattened(ctx);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (!fields.isEmpty())
|
||||
ctx.sql(" (").visit(wrap(fields).qualify(false)).sql(')');
|
||||
|
||||
@ -66,7 +66,6 @@ import static org.jooq.impl.DSL.row;
|
||||
import static org.jooq.impl.DSL.select;
|
||||
import static org.jooq.impl.DSL.selectFrom;
|
||||
import static org.jooq.impl.DSL.selectOne;
|
||||
import static org.jooq.impl.FieldMapsForInsert.keysAndComputedOnClient;
|
||||
import static org.jooq.impl.FieldMapsForInsert.toSQLInsertSelect;
|
||||
import static org.jooq.impl.Keywords.K_DEFAULT;
|
||||
import static org.jooq.impl.Keywords.K_DEFAULT_VALUES;
|
||||
@ -82,7 +81,6 @@ import static org.jooq.impl.Keywords.K_SET;
|
||||
import static org.jooq.impl.Keywords.K_VALUES;
|
||||
import static org.jooq.impl.Keywords.K_WHERE;
|
||||
import static org.jooq.impl.QueryPartListView.wrap;
|
||||
import static org.jooq.impl.Tools.EMPTY_FIELD;
|
||||
import static org.jooq.impl.Tools.aliasedFields;
|
||||
import static org.jooq.impl.Tools.anyMatch;
|
||||
import static org.jooq.impl.Tools.collect;
|
||||
|
||||
@ -5683,13 +5683,6 @@ final class Tools {
|
||||
return map(orderFields, (OrderField<?> f) -> field(f));
|
||||
}
|
||||
|
||||
static final List<Field<?>> fields(FieldOrRow fr) {
|
||||
if (fr instanceof Field)
|
||||
return singletonList((Field<?>) fr);
|
||||
else
|
||||
return asList(((Row) fr).fields());
|
||||
}
|
||||
|
||||
static final <T> Field<T> unalias(Field<T> field) {
|
||||
Field<T> result = aliased(field);
|
||||
return result != null ? result : field;
|
||||
@ -6050,6 +6043,20 @@ final class Tools {
|
||||
return filter(asList(array), predicate);
|
||||
}
|
||||
|
||||
static final List<Field<?>> flattenFieldOrRow(FieldOrRow fr) {
|
||||
if (fr instanceof Field)
|
||||
return singletonList((Field<?>) fr);
|
||||
else
|
||||
return asList(((Row) fr).fields());
|
||||
}
|
||||
|
||||
static final <C extends Collection<Field<?>>> C flattenFieldOrRows(Collection<? extends FieldOrRow> frs, C c) {
|
||||
for (FieldOrRow fr : frs)
|
||||
c.addAll(flattenFieldOrRow(fr));
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flatten out an {@link EmbeddableTableField}.
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user