diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java index 4a95416471..beb750d8b4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java @@ -540,32 +540,35 @@ final class FieldMapsForInsert extends AbstractQueryPart { Map, List>> 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> overlapping = null; for (Entry, List>> entry : values.entrySet()) { - if (isEmbeddable(entry.getKey())) { - List>> 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> list = new ArrayList<>(entry.getValue().size()); - for (Iterator> v : value) - if (v.hasNext()) - list.add(v.next()); - result.put(key, list); - } - else - for (Iterator> v : value) - if (v.hasNext()) - v.next(); - } - } - else + + + + + + + + + + + + + + + + + + + + + + + result.put(entry.getKey(), entry.getValue()); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 6e347c9234..4a56c37bc7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -5417,23 +5417,28 @@ final class Tools { @Override public Iterator iterator() { return new FlatteningIterator(iterable.iterator()) { - Set> overlapping = null; + + + @SuppressWarnings("unchecked") @Override List flatten(E e) { if (e instanceof EmbeddableTableField) { - if (removeDuplicates) { - List result = new ArrayList<>(); - for (Field field : ((EmbeddableTableField) e).fields) - if ((overlapping = lazy(overlapping)).add(field)) - result.add((E) field); - return result; - } - else - return (List) Arrays.asList(((EmbeddableTableField) e).fields); + + + + + + + + + + + + return (List) Arrays.asList(((EmbeddableTableField) e).fields); } return null; @@ -5457,7 +5462,9 @@ final class Tools { @Override public Iterator iterator() { return new FlatteningIterator(iterable.iterator()) { - Set> 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>( keys[i], values[i] ));