From 4c5fe868a2d61379c250d1308574987fc4e9ac63 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 1 Apr 2015 15:08:50 +0200 Subject: [PATCH] [#4161] { INSERT | UPDATE | MERGE } .. SET [ Record ] doesn't take changed flags into account --- jOOQ/src/main/java/org/jooq/InsertSetStep.java | 4 +++- jOOQ/src/main/java/org/jooq/MergeMatchedSetStep.java | 4 +++- jOOQ/src/main/java/org/jooq/UpdateSetStep.java | 4 +++- jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java | 4 ++-- jOOQ/src/main/java/org/jooq/impl/InsertImpl.java | 2 +- jOOQ/src/main/java/org/jooq/impl/MergeImpl.java | 2 +- jOOQ/src/main/java/org/jooq/impl/UpdateImpl.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Utils.java | 8 ++++---- 8 files changed, 18 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/InsertSetStep.java b/jOOQ/src/main/java/org/jooq/InsertSetStep.java index dcd6b708f2..d69adab1cf 100644 --- a/jOOQ/src/main/java/org/jooq/InsertSetStep.java +++ b/jOOQ/src/main/java/org/jooq/InsertSetStep.java @@ -285,7 +285,9 @@ public interface InsertSetStep { * Set values in the INSERT statement. *

* This is the same as calling {@link #set(Map)} with the argument record - * treated as a Map<Field<?>, Object>. + * treated as a Map<Field<?>, Object>, except that the + * {@link Record#changed()} flags are taken into consideration in order to + * update only changed values. * * @see #set(Map) */ diff --git a/jOOQ/src/main/java/org/jooq/MergeMatchedSetStep.java b/jOOQ/src/main/java/org/jooq/MergeMatchedSetStep.java index 8b84737f05..cc176ef55a 100644 --- a/jOOQ/src/main/java/org/jooq/MergeMatchedSetStep.java +++ b/jOOQ/src/main/java/org/jooq/MergeMatchedSetStep.java @@ -107,7 +107,9 @@ public interface MergeMatchedSetStep { * statement's WHEN MATCHED clause. *

* This is the same as calling {@link #set(Map)} with the argument record - * treated as a Map<Field<?>, Object>. + * treated as a Map<Field<?>, Object>, except that the + * {@link Record#changed()} flags are taken into consideration in order to + * update only changed values. * * @see #set(Map) */ diff --git a/jOOQ/src/main/java/org/jooq/UpdateSetStep.java b/jOOQ/src/main/java/org/jooq/UpdateSetStep.java index 878db16586..84722f418b 100644 --- a/jOOQ/src/main/java/org/jooq/UpdateSetStep.java +++ b/jOOQ/src/main/java/org/jooq/UpdateSetStep.java @@ -91,7 +91,9 @@ public interface UpdateSetStep { * Set a value for a field in the UPDATE statement. *

* This is the same as calling {@link #set(Map)} with the argument record - * treated as a Map<Field<?>, Object>. + * treated as a Map<Field<?>, Object>, except that the + * {@link Record#changed()} flags are taken into consideration in order to + * update only changed values. * * @see #set(Map) */ diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java index d29677b988..f794e02244 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java @@ -483,8 +483,8 @@ abstract class AbstractQuery extends AbstractQueryPart implements Query, Attacha x x - xx xxxxxxxxxxxxxxxxxxxxxx x xxxxxxxxx x - xxxxx xxx xxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxxx x xxxxxx xxxxxxx xxxx xxx xxxx xxxxx xxxxxxxx xxxxxx xxxxxxxx xxxxxxxxx xx x xxxxxxxxxx xxxxxxx xx xxxxxxx xxxxxxxxxxxxxxxxxxxxxx xx xxx xxxx xx xxx xxxx xxxxxxx xxxx xxxx xxxx xxxxxxxxx + xx xxxxxxxxxxxxxxxxxxxxxx x xxxxxxxx x + xxxxx xxx xxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxxx x xxxxxxx xxxxxxx xxxx xxx xxxx xxxxx xxxxxxxx xxxxxx xxxxxxxx xxxxxxxxx xx x xxxxxxxxxx xxxxxxx xx xxxxxxx xxxxxxxxxxxxxxxxxxxxxx xx xxx xxxx xx xxx xxxx xxxxxxx xxxx xxxx xxxx xxxxxxxxx x xx xxxx x xxxxxxxxxxxxxxxxxxxxxxxxxxx x diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java index 951dd5fa1e..c0d44fcd1a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertImpl.java @@ -630,7 +630,7 @@ class InsertImpl @Override public final UpdateImpl set(Record record) { - return set(Utils.map(record)); + return set(Utils.mapOfChangedValues(record)); } // [jooq-tools] START [set] diff --git a/jOOQ/src/main/java/org/jooq/impl/Utils.java b/jOOQ/src/main/java/org/jooq/impl/Utils.java index 3d665b857e..18ee7d114c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Utils.java +++ b/jOOQ/src/main/java/org/jooq/impl/Utils.java @@ -1103,13 +1103,13 @@ final class Utils { /** * Turn a {@link Record} into a {@link Map} */ - static final Map, Object> map(Record record) { + static final Map, Object> mapOfChangedValues(Record record) { Map, Object> result = new LinkedHashMap, Object>(); int size = record.size(); - for (int i = 0; i < size; i++) { - result.put(record.field(i), record.getValue(i)); - } + for (int i = 0; i < size; i++) + if (record.changed(i)) + result.put(record.field(i), record.getValue(i)); return result; }