1
0
Fork 0

Do not store ptr to local options (#8884)

This commit is contained in:
Simon 2019-05-02 09:42:47 +02:00 committed by Jan
parent 3d25e935aa
commit 5625b56edc
5 changed files with 20 additions and 10 deletions

View File

@ -58,6 +58,7 @@ static arangodb::velocypack::StringRef const cidRef("cid");
static std::unique_ptr<VPackAttributeTranslator> translator; static std::unique_ptr<VPackAttributeTranslator> translator;
static std::unique_ptr<VPackCustomTypeHandler>customTypeHandler; static std::unique_ptr<VPackCustomTypeHandler>customTypeHandler;
static VPackOptions optionsWithUniquenessCheck;
template<bool useUtf8, typename Comparator> template<bool useUtf8, typename Comparator>
int compareObjects(VPackSlice const& lhs, int compareObjects(VPackSlice const& lhs,
@ -197,6 +198,9 @@ void VelocyPackHelper::initialize() {
// allow dumping of Object attributes in "arbitrary" order (i.e. non-sorted // allow dumping of Object attributes in "arbitrary" order (i.e. non-sorted
// order) // order)
VPackOptions::Defaults.dumpAttributesInIndexOrder = false; VPackOptions::Defaults.dumpAttributesInIndexOrder = false;
::optionsWithUniquenessCheck = VPackOptions::Defaults;
::optionsWithUniquenessCheck.checkAttributeUniqueness = true;
// run quick selfs test with the attribute translator // run quick selfs test with the attribute translator
TRI_ASSERT(VPackSlice(::translator->translate(StaticStrings::KeyString)).getUInt() == TRI_ASSERT(VPackSlice(::translator->translate(StaticStrings::KeyString)).getUInt() ==
@ -232,6 +236,11 @@ arangodb::velocypack::AttributeTranslator* VelocyPackHelper::getTranslator() {
return ::translator.get(); return ::translator.get();
} }
/// @brief return the (global) attribute translator instance
arangodb::velocypack::Options* VelocyPackHelper::optionsWithUniquenessCheck() {
return &::optionsWithUniquenessCheck;
}
bool VelocyPackHelper::AttributeSorterUTF8::operator()(std::string const& l, bool VelocyPackHelper::AttributeSorterUTF8::operator()(std::string const& l,
std::string const& r) const { std::string const& r) const {
// use UTF-8-based comparison of attribute names // use UTF-8-based comparison of attribute names

View File

@ -82,6 +82,8 @@ class VelocyPackHelper {
static void disableAssemblerFunctions(); static void disableAssemblerFunctions();
static arangodb::velocypack::AttributeTranslator* getTranslator(); static arangodb::velocypack::AttributeTranslator* getTranslator();
static arangodb::velocypack::Options* optionsWithUniquenessCheck();
struct VPackHash { struct VPackHash {
size_t operator()(arangodb::velocypack::Slice const&) const; size_t operator()(arangodb::velocypack::Slice const&) const;

View File

@ -28,6 +28,7 @@
#include "Basics/StringBuffer.h" #include "Basics/StringBuffer.h"
#include "Basics/StringUtils.h" #include "Basics/StringUtils.h"
#include "Basics/Utf8Helper.h" #include "Basics/Utf8Helper.h"
#include "Basics/VelocyPackHelper.h"
#include "Logger/Logger.h" #include "Logger/Logger.h"
using namespace arangodb; using namespace arangodb;
@ -294,4 +295,9 @@ double GeneralRequest::parsedValue(std::string const& key, double valueNotFound)
} }
return valueNotFound; return valueNotFound;
} }
std::shared_ptr<VPackBuilder> GeneralRequest::toVelocyPackBuilderPtr() {
auto* opts = VelocyPackHelper::optionsWithUniquenessCheck();
return std::make_shared<VPackBuilder>(payload(opts), opts);
};
} // namespace arangodb } // namespace arangodb

View File

@ -196,13 +196,7 @@ class GeneralRequest {
/// @brief parsed request payload /// @brief parsed request payload
virtual VPackSlice payload(arangodb::velocypack::Options const* options = &VPackOptions::Defaults) = 0; virtual VPackSlice payload(arangodb::velocypack::Options const* options = &VPackOptions::Defaults) = 0;
TEST_VIRTUAL std::shared_ptr<VPackBuilder> toVelocyPackBuilderPtr() { TEST_VIRTUAL std::shared_ptr<VPackBuilder> toVelocyPackBuilderPtr();
VPackOptions optionsWithUniquenessCheck = VPackOptions::Defaults;
optionsWithUniquenessCheck.checkAttributeUniqueness = true;
return std::make_shared<VPackBuilder>(payload(&optionsWithUniquenessCheck),
&optionsWithUniquenessCheck);
};
std::shared_ptr<VPackBuilder> toVelocyPackBuilderPtrNoUniquenessChecks() { std::shared_ptr<VPackBuilder> toVelocyPackBuilderPtrNoUniquenessChecks() {
return std::make_shared<VPackBuilder>(payload()); return std::make_shared<VPackBuilder>(payload());
}; };

View File

@ -26,6 +26,7 @@
#include "Basics/NumberUtils.h" #include "Basics/NumberUtils.h"
#include "Basics/StaticStrings.h" #include "Basics/StaticStrings.h"
#include "Basics/StringUtils.h" #include "Basics/StringUtils.h"
#include "Basics/VelocyPackHelper.h"
#include <velocypack/Parser.h> #include <velocypack/Parser.h>
#include <velocypack/velocypack-aliases.h> #include <velocypack/velocypack-aliases.h>
@ -87,9 +88,7 @@ std::shared_ptr<VPackBuilder> SimpleHttpResult::getBodyVelocyPack(VPackOptions c
// Default case // Default case
std::shared_ptr<VPackBuilder> SimpleHttpResult::getBodyVelocyPack() const { std::shared_ptr<VPackBuilder> SimpleHttpResult::getBodyVelocyPack() const {
VPackOptions options; return getBodyVelocyPack(*VelocyPackHelper::optionsWithUniquenessCheck());
options.checkAttributeUniqueness = true;
return getBodyVelocyPack(options);
} }
std::string SimpleHttpResult::getResultTypeMessage() const { std::string SimpleHttpResult::getResultTypeMessage() const {