[jOOQ/jOOQ#2530] [jOOQ/jOOQ#6124] [jOOQ/jOOQ#10481] Updated OSS edition
This commit is contained in:
parent
985bda87df
commit
a3779fae88
@ -540,32 +540,35 @@ final class FieldMapsForInsert extends AbstractQueryPart {
|
||||
Map<Field<?>, List<Field<?>>> result = new LinkedHashMap<>();
|
||||
|
||||
// [#2530] [#6124] [#10481] TODO: Shortcut for performance, when there are no embeddables
|
||||
// [#2530] [#6124] [#10481] TODO: Refactor and optimise these flattening algorithms
|
||||
Set<Field<?>> overlapping = null;
|
||||
for (Entry<Field<?>, List<Field<?>>> entry : values.entrySet()) {
|
||||
if (isEmbeddable(entry.getKey())) {
|
||||
List<Iterator<? extends Field<?>>> value = new ArrayList<>(entry.getValue().size());
|
||||
|
||||
for (Field<?> f : entry.getValue())
|
||||
value.add(flatten(f).iterator());
|
||||
|
||||
for (Field<?> key : flatten(entry.getKey())) {
|
||||
if ((overlapping = lazy(overlapping)).add(key)) {
|
||||
List<Field<?>> list = new ArrayList<>(entry.getValue().size());
|
||||
|
||||
for (Iterator<? extends Field<?>> v : value)
|
||||
if (v.hasNext())
|
||||
list.add(v.next());
|
||||
|
||||
result.put(key, list);
|
||||
}
|
||||
else
|
||||
for (Iterator<? extends Field<?>> v : value)
|
||||
if (v.hasNext())
|
||||
v.next();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
|
||||
@ -5417,23 +5417,28 @@ final class Tools {
|
||||
@Override
|
||||
public Iterator<E> iterator() {
|
||||
return new FlatteningIterator<E>(iterable.iterator()) {
|
||||
Set<Field<?>> overlapping = null;
|
||||
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
List<E> flatten(E e) {
|
||||
if (e instanceof EmbeddableTableField) {
|
||||
if (removeDuplicates) {
|
||||
List<E> result = new ArrayList<>();
|
||||
|
||||
for (Field<?> field : ((EmbeddableTableField<?, ?>) e).fields)
|
||||
if ((overlapping = lazy(overlapping)).add(field))
|
||||
result.add((E) field);
|
||||
|
||||
return result;
|
||||
}
|
||||
else
|
||||
return (List<E>) Arrays.asList(((EmbeddableTableField<?, ?>) e).fields);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return (List<E>) Arrays.asList(((EmbeddableTableField<?, ?>) e).fields);
|
||||
}
|
||||
|
||||
return null;
|
||||
@ -5457,7 +5462,9 @@ final class Tools {
|
||||
@Override
|
||||
public Iterator<E> iterator() {
|
||||
return new FlatteningIterator<E>(iterable.iterator()) {
|
||||
Set<Field<?>> overlapping = null;
|
||||
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
@ -5468,7 +5475,9 @@ final class Tools {
|
||||
Field<?>[] values = embeddedFields(e.getValue());
|
||||
|
||||
for (int i = 0; i < keys.length; i++)
|
||||
if (!removeDuplicates || (overlapping = lazy(overlapping)).add(keys[i]))
|
||||
|
||||
|
||||
|
||||
result.add((E) new SimpleImmutableEntry<Field<?>, Field<?>>(
|
||||
keys[i], values[i]
|
||||
));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user