From d8e8f0e045e5dbb1e13bbe2b2cd5ccb4522f526f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 1 Sep 2020 21:05:10 +0200 Subject: [PATCH] [jOOQ/jOOQ#10499] Refactor INSERT .. VALUES flattening of embeddables --- .../org/jooq/impl/FieldMapsForInsert.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java index 292371f1e1..829776920a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java @@ -542,6 +542,14 @@ final class FieldMapsForInsert extends AbstractQueryPart { Set> overlapping = null; for (Entry, List>> entry : values.entrySet()) { + // [#2530] [#6124] [#10481] TODO: Refactor and optimise these flattening algorithms + if (entry.getKey().getDataType().isEmbeddable()) { + List>> value = new ArrayList<>(entry.getValue().size()); + + for (Field f : entry.getValue()) + value.add(flatten(f).iterator()); + + for (Field key : flatten(entry.getKey())) { @@ -551,23 +559,17 @@ final class FieldMapsForInsert extends AbstractQueryPart { + { + List> list = new ArrayList<>(entry.getValue().size()); + for (Iterator> v : value) + list.add(v.hasNext() ? v.next() : null); - - - - - - - - - - - - - - - + result.put(key, list); + } + } + } + else result.put(entry.getKey(), entry.getValue()); }