From 643b6a5f079a7db45e00ca67d011eba911ea1653 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 1 Jun 2018 10:37:28 +0200 Subject: [PATCH] [#7322] Trailing newRecord() results in NULL insert statement --- .../org/jooq/impl/FieldMapsForInsert.java | 29 ++++++++++++++----- 1 file changed, 22 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 6b9d11b413..d5b7de515e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java @@ -84,6 +84,7 @@ final class FieldMapsForInsert extends AbstractQueryPart { final Map, Field> empty; final Map, List>> values; int rows; + int nextRow = -1; FieldMapsForInsert(Table table) { this.table = table; @@ -277,6 +278,7 @@ final class FieldMapsForInsert extends AbstractQueryPart { if (rows == 0) newRecord(); + initNextRow(); for (Object field : fields) { Field f = Tools.tableField(table, field); Field e = empty.get(f); @@ -296,6 +298,8 @@ final class FieldMapsForInsert extends AbstractQueryPart { } final void set(Collection> fields) { + initNextRow(); + Iterator> it1 = fields.iterator(); Iterator>> it2 = values.values().iterator(); @@ -321,14 +325,21 @@ final class FieldMapsForInsert extends AbstractQueryPart { } } + private final void initNextRow() { + if (rows == nextRow) { + Iterator>> v = values.values().iterator(); + Iterator> e = empty.values().iterator(); + + while (v.hasNext() && e.hasNext()) + v.next().add(e.next()); + + rows++; + } + } + final void newRecord() { - Iterator>> it1 = values.values().iterator(); - Iterator> it2 = empty.values().iterator(); - - while (it1.hasNext() && it2.hasNext()) - it1.next().add(it2.next()); - - rows++; + if (nextRow < rows) + nextRow++; } final Collection> fields() { @@ -336,6 +347,8 @@ final class FieldMapsForInsert extends AbstractQueryPart { } final List, Field>> maps() { + initNextRow(); + return new AbstractList, Field>>() { @Override public Map, Field> get(int index) { @@ -350,6 +363,8 @@ final class FieldMapsForInsert extends AbstractQueryPart { } final Map, Field> map(final int index) { + initNextRow(); + return new AbstractMap, Field>() { transient Set, Field>> entrySet;