From 7455ef20efaa7789b6e2a78b600b118b582d3c27 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Wed, 6 Jul 2016 07:38:44 +0200 Subject: [PATCH] don't update if there's nothing to do --- arangod/Aql/ModificationBlocks.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/arangod/Aql/ModificationBlocks.cpp b/arangod/Aql/ModificationBlocks.cpp index 1a47c6c4e5..d7e5a3b0b0 100644 --- a/arangod/Aql/ModificationBlocks.cpp +++ b/arangod/Aql/ModificationBlocks.cpp @@ -720,7 +720,7 @@ AqlItemBlock* UpsertBlock::work(std::vector& blocks) { updateBuilder.clear(); size_t const n = res->size(); - + bool const isMultiple = (n > 1); if (isMultiple) { insertBuilder.openArray(); @@ -750,20 +750,21 @@ AqlItemBlock* UpsertBlock::work(std::vector& blocks) { AqlValue const& updateDoc = res->getValueReference(i, updateRegisterId); if (updateDoc.isObject()) { - VPackSlice toUpdate = updateDoc.slice(); - - keyBuilder.clear(); - keyBuilder.openObject(); - keyBuilder.add(StaticStrings::KeyString, VPackValue(key)); - keyBuilder.close(); - if (isMultiple) { - VPackBuilder tmp = VPackCollection::merge(toUpdate, keyBuilder.slice(), false, false); - updateBuilder.add(tmp.slice()); - upRows.emplace_back(dstRow); - } else { - updateBuilder = VPackCollection::merge(toUpdate, keyBuilder.slice(), false, false); + if (updateDoc.length() > 0) { + VPackSlice toUpdate = updateDoc.slice(); + + keyBuilder.clear(); + keyBuilder.openObject(); + keyBuilder.add(StaticStrings::KeyString, VPackValue(key)); + keyBuilder.close(); + if (isMultiple) { + VPackBuilder tmp = VPackCollection::merge(toUpdate, keyBuilder.slice(), false, false); + updateBuilder.add(tmp.slice()); + upRows.emplace_back(dstRow); + } else { + updateBuilder = VPackCollection::merge(toUpdate, keyBuilder.slice(), false, false); + } } - } else { errorCode = TRI_ERROR_ARANGO_DOCUMENT_TYPE_INVALID; }