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++; }