diff --git a/arangod/RestHandler/RestDocumentHandler.cpp b/arangod/RestHandler/RestDocumentHandler.cpp index 26b12a886b..0cfda26ef7 100644 --- a/arangod/RestHandler/RestDocumentHandler.cpp +++ b/arangod/RestHandler/RestDocumentHandler.cpp @@ -558,6 +558,7 @@ bool RestDocumentHandler::removeDocument() { return false; } + bool const isMultiple = search.isArray(); OperationResult result = trx->remove(collectionName, search, opOptions); res = trx->finish(result.result); @@ -574,7 +575,8 @@ bool RestDocumentHandler::removeDocument() { generateDeleted(result, collectionName, TRI_col_type_e(trx->getCollectionType(collectionName)), - trx->transactionContextPtr()->getVPackOptionsForDump()); + trx->transactionContextPtr()->getVPackOptionsForDump(), + isMultiple); return true; } diff --git a/arangod/RestHandler/RestVocbaseBaseHandler.cpp b/arangod/RestHandler/RestVocbaseBaseHandler.cpp index 7f48b1ab10..0b2a1dbb59 100644 --- a/arangod/RestHandler/RestVocbaseBaseHandler.cpp +++ b/arangod/RestHandler/RestVocbaseBaseHandler.cpp @@ -31,6 +31,7 @@ #include "Basics/tri-strings.h" #include "Cluster/ServerState.h" #include "Meta/conversion.h" +#include "Rest/CommonDefines.h" #include "Rest/HttpRequest.h" #include "Transaction/Methods.h" #include "Transaction/StandaloneContext.h" @@ -258,12 +259,35 @@ std::string RestVocbaseBaseHandler::assembleDocumentId( void RestVocbaseBaseHandler::generateSaved( arangodb::OperationResult const& result, std::string const& collectionName, TRI_col_type_e type, VPackOptions const* options, bool isMultiple) { + generate20x(result, collectionName, type, options, isMultiple, rest::ResponseCode::CREATED); +} + +//////////////////////////////////////////////////////////////////////////////// +/// @brief Generate a result for successful delete +//////////////////////////////////////////////////////////////////////////////// + +void RestVocbaseBaseHandler::generateDeleted( + arangodb::OperationResult const& result, std::string const& collectionName, + TRI_col_type_e type, VPackOptions const* options, bool isMultiple) { + generate20x(result, collectionName, type, options, isMultiple, rest::ResponseCode::OK); +} + +//////////////////////////////////////////////////////////////////////////////// +/// @brief generates a HTTP 20x response +//////////////////////////////////////////////////////////////////////////////// + +void RestVocbaseBaseHandler::generate20x( + arangodb::OperationResult const& result, std::string const& collectionName, + TRI_col_type_e type, VPackOptions const* options, bool isMultiple, + rest::ResponseCode waitForSyncResponseCode) { + if (result._options.waitForSync) { - resetResponse(rest::ResponseCode::CREATED); + resetResponse(waitForSyncResponseCode); } else { resetResponse(rest::ResponseCode::ACCEPTED); } + if (isMultiple && !result.countErrorCodes.empty()) { VPackBuilder errorBuilder; errorBuilder.openObject(); @@ -275,31 +299,6 @@ void RestVocbaseBaseHandler::generateSaved( _response->setHeaderNC(StaticStrings::ErrorCodes, errorBuilder.toJson()); } - generate20x(result, collectionName, type, options); -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief Generate a result for successful delete -//////////////////////////////////////////////////////////////////////////////// - -void RestVocbaseBaseHandler::generateDeleted( - arangodb::OperationResult const& result, std::string const& collectionName, - TRI_col_type_e type, VPackOptions const* options) { - if (result._options.waitForSync) { - resetResponse(rest::ResponseCode::OK); - } else { - resetResponse(rest::ResponseCode::ACCEPTED); - } - generate20x(result, collectionName, type, options); -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief generates a HTTP 20x response -//////////////////////////////////////////////////////////////////////////////// - -void RestVocbaseBaseHandler::generate20x( - arangodb::OperationResult const& result, std::string const& collectionName, - TRI_col_type_e type, VPackOptions const* options) { VPackSlice slice = result.slice(); if (slice.isNone()) { // will happen if silent == true diff --git a/arangod/RestHandler/RestVocbaseBaseHandler.h b/arangod/RestHandler/RestVocbaseBaseHandler.h index 7132199041..c0272d1d44 100644 --- a/arangod/RestHandler/RestVocbaseBaseHandler.h +++ b/arangod/RestHandler/RestVocbaseBaseHandler.h @@ -232,7 +232,8 @@ class RestVocbaseBaseHandler : public RestBaseHandler { ////////////////////////////////////////////////////////////////////////////// void generate20x(arangodb::OperationResult const&, std::string const&, - TRI_col_type_e, arangodb::velocypack::Options const*); + TRI_col_type_e, arangodb::velocypack::Options const*, + bool isMultiple, rest::ResponseCode waitForSyncResponseCode); ////////////////////////////////////////////////////////////////////////////// /// @brief generates message for a saved document @@ -248,7 +249,7 @@ class RestVocbaseBaseHandler : public RestBaseHandler { void generateDeleted(arangodb::OperationResult const& result, std::string const& collectionName, TRI_col_type_e type, - arangodb::velocypack::Options const*); + arangodb::velocypack::Options const*, bool isMultiple); ////////////////////////////////////////////////////////////////////////////// /// @brief generates document not found error message, no transaction info