From 8965e981496587fd34e7ed37d658de1507f08130 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 3 Apr 2018 16:18:09 +0200 Subject: [PATCH] [#7376] Internal FieldMapsForInsert.empty behaves incorrectly --- .../org/jooq/impl/FieldMapsForInsert.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java index 557ca402d7..6badcf8513 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java @@ -77,14 +77,14 @@ final class FieldMapsForInsert extends AbstractQueryPart { private static final long serialVersionUID = -6227074228534414225L; final Table table; - final List> empty; + final Map, Field> empty; final Map, List>> values; int rows; FieldMapsForInsert(Table table) { this.table = table; this.values = new LinkedHashMap, List>>(); - this.empty = new ArrayList>(); + this.empty = new LinkedHashMap, Field>(); } // ------------------------------------------------------------------------- @@ -230,8 +230,12 @@ final class FieldMapsForInsert extends AbstractQueryPart { for (Object field : fields) { Field f = Tools.tableField(table, field); - Field e = DSL.val(null, f); - empty.add(e); + Field e = empty.get(f); + + if (e == null) { + e = DSL.val(null, f); + empty.put(f, e); + } if (!values.containsKey(f)) { values.put(f, rows > 0 @@ -269,10 +273,11 @@ final class FieldMapsForInsert extends AbstractQueryPart { } final void newRecord() { - int i = 0; + Iterator>> it1 = values.values().iterator(); + Iterator> it2 = empty.values().iterator(); - for (List> list : values.values()) - list.add(empty.get(i++)); + while (it1.hasNext() && it2.hasNext()) + it1.next().add(it2.next()); rows++; }