mirror of https://gitee.com/bigwinds/arangodb
Bug fix/vpack update (#8875)
This commit is contained in:
parent
d63b8706dd
commit
0cbdfe9289
|
@ -36,8 +36,8 @@ class Request;
|
|||
class Response;
|
||||
|
||||
using Error = std::uint32_t;
|
||||
using MessageID = uint64_t; // id that identifies a Request.
|
||||
using StatusCode = uint32_t;
|
||||
using MessageID = std::uint64_t; // id that identifies a Request.
|
||||
using StatusCode = std::uint32_t;
|
||||
|
||||
StatusCode constexpr StatusUndefined = 0;
|
||||
StatusCode constexpr StatusOK = 200;
|
||||
|
|
|
@ -56,7 +56,7 @@ class HttpConnection final : public fuerte::Connection {
|
|||
MessageID sendRequest(std::unique_ptr<Request>, RequestCallback) override;
|
||||
|
||||
// Return the number of unfinished requests.
|
||||
size_t requestsLeft() const override {
|
||||
std::size_t requestsLeft() const override {
|
||||
return _numQueued.load(std::memory_order_acquire);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ class VstConnection final : public Connection {
|
|||
MessageID sendRequest(std::unique_ptr<Request>, RequestCallback) override;
|
||||
|
||||
// Return the number of unfinished requests.
|
||||
size_t requestsLeft() const override {
|
||||
std::size_t requestsLeft() const override {
|
||||
return (_loopState.load(std::memory_order_acquire) & WRITE_LOOP_QUEUE_MASK) + _messageStore.size();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,66 +0,0 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Library to build up VPack documents.
|
||||
///
|
||||
/// DISCLAIMER
|
||||
///
|
||||
/// Copyright 2015 ArangoDB GmbH, Cologne, Germany
|
||||
///
|
||||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
/// you may not use this file except in compliance with the License.
|
||||
/// You may obtain a copy of the License at
|
||||
///
|
||||
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||
///
|
||||
/// Unless required by applicable law or agreed to in writing, software
|
||||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
/// See the License for the specific language governing permissions and
|
||||
/// limitations under the License.
|
||||
///
|
||||
/// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||
///
|
||||
/// @author Max Neunhoeffer
|
||||
/// @author Jan Steemann
|
||||
/// @author Copyright 2015, ArangoDB GmbH, Cologne, Germany
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef VELOCYPACK_HELPERS_H
|
||||
#define VELOCYPACK_HELPERS_H 1
|
||||
|
||||
#include <string>
|
||||
#include <cstdint>
|
||||
#include <unordered_set>
|
||||
|
||||
#include "velocypack/velocypack-common.h"
|
||||
#include "velocypack/Exception.h"
|
||||
#include "velocypack/Options.h"
|
||||
#include "velocypack/Slice.h"
|
||||
|
||||
namespace arangodb {
|
||||
namespace velocypack {
|
||||
|
||||
struct TopLevelAttributeExcludeHandler final : AttributeExcludeHandler {
|
||||
TopLevelAttributeExcludeHandler (std::unordered_set<std::string> const& attributes)
|
||||
: attributes(attributes) {
|
||||
}
|
||||
|
||||
bool shouldExclude(Slice const& key, int nesting) override final {
|
||||
return (nesting == 1 && attributes.find(key.copyString()) != attributes.end());
|
||||
}
|
||||
|
||||
std::unordered_set<std::string> attributes;
|
||||
};
|
||||
|
||||
static inline Slice buildNullValue(char* dst, size_t length) {
|
||||
if (length < 1) {
|
||||
throw Exception(Exception::InternalError, "supplied buffer is too small");
|
||||
}
|
||||
|
||||
*dst = 0x18;
|
||||
return Slice(dst);
|
||||
}
|
||||
|
||||
} // namespace arangodb::velocypack
|
||||
} // namespace arangodb
|
||||
|
||||
#endif
|
|
@ -72,9 +72,6 @@ struct Options {
|
|||
// has no JSON equivalent
|
||||
UnsupportedTypeBehavior unsupportedTypeBehavior = FailOnUnsupportedType;
|
||||
|
||||
// callback for excluding attributes from being built by the Parser
|
||||
AttributeExcludeHandler* attributeExcludeHandler = nullptr;
|
||||
|
||||
AttributeTranslator* attributeTranslator = nullptr;
|
||||
|
||||
// custom type handler used for processing custom types by Dumper and Slicer
|
||||
|
@ -119,7 +116,7 @@ struct Options {
|
|||
// values as a security precaution), validated when object-building via
|
||||
// Builder and VelocyPack validation using Validator objects
|
||||
bool disallowExternals = false;
|
||||
|
||||
|
||||
// disallow using type Custom (to prevent injection of arbitrary opaque
|
||||
// values as a security precaution)
|
||||
bool disallowCustom = false;
|
||||
|
|
|
@ -47,8 +47,6 @@
|
|||
namespace arangodb {
|
||||
namespace velocypack {
|
||||
|
||||
class SliceScope;
|
||||
|
||||
class Slice {
|
||||
// This class provides read only access to a VPack value, it is
|
||||
// intentionally light-weight (only one pointer value), such that
|
||||
|
@ -64,57 +62,61 @@ class Slice {
|
|||
|
||||
public:
|
||||
static constexpr uint64_t defaultSeed = 0xdeadbeef;
|
||||
|
||||
static uint8_t const noneSliceData[];
|
||||
static uint8_t const illegalSliceData[];
|
||||
static uint8_t const nullSliceData[];
|
||||
static uint8_t const falseSliceData[];
|
||||
static uint8_t const trueSliceData[];
|
||||
static uint8_t const zeroSliceData[];
|
||||
static uint8_t const emptyStringSliceData[];
|
||||
static uint8_t const emptyArraySliceData[];
|
||||
static uint8_t const emptyObjectSliceData[];
|
||||
static uint8_t const minKeySliceData[];
|
||||
static uint8_t const maxKeySliceData[];
|
||||
|
||||
// constructor for an empty Value of type None
|
||||
constexpr Slice() noexcept : Slice("\x00") {}
|
||||
constexpr Slice() noexcept : Slice(noneSliceData) {}
|
||||
|
||||
// creates a Slice from a pointer to a uint8_t array
|
||||
explicit constexpr Slice(uint8_t const* start) noexcept
|
||||
: _start(start) {}
|
||||
|
||||
// creates a Slice from a pointer to a char array
|
||||
explicit constexpr Slice(char const* start) noexcept
|
||||
: _start((uint8_t const*)(start)) {} // reinterpret_cast does not work C++ 11 5.19.2
|
||||
|
||||
// No destructor, does not take part in memory management
|
||||
|
||||
// creates a slice of type None
|
||||
static constexpr Slice noneSlice() noexcept { return Slice("\x00"); }
|
||||
static constexpr Slice noneSlice() noexcept { return Slice(noneSliceData); }
|
||||
|
||||
// creates a slice of type Illegal
|
||||
static constexpr Slice illegalSlice() noexcept { return Slice("\x17"); }
|
||||
static constexpr Slice illegalSlice() noexcept { return Slice(illegalSliceData); }
|
||||
|
||||
// creates a slice of type Null
|
||||
static constexpr Slice nullSlice() noexcept { return Slice("\x18"); }
|
||||
static constexpr Slice nullSlice() noexcept { return Slice(nullSliceData); }
|
||||
|
||||
// creates a slice of type Boolean with false value
|
||||
static constexpr Slice falseSlice() noexcept { return Slice("\x19"); }
|
||||
static constexpr Slice falseSlice() noexcept { return Slice(falseSliceData); }
|
||||
|
||||
// creates a slice of type Boolean with true value
|
||||
static constexpr Slice trueSlice() noexcept { return Slice("\x1a"); }
|
||||
static constexpr Slice trueSlice() noexcept { return Slice(trueSliceData); }
|
||||
|
||||
// creates a slice of type Smallint(0)
|
||||
static constexpr Slice zeroSlice() noexcept { return Slice("\x30"); }
|
||||
static constexpr Slice zeroSlice() noexcept { return Slice(zeroSliceData); }
|
||||
|
||||
// creates a slice of type String, empty
|
||||
static constexpr Slice emptyStringSlice() noexcept { return Slice("\x40"); }
|
||||
static constexpr Slice emptyStringSlice() noexcept { return Slice(emptyStringSliceData); }
|
||||
|
||||
// creates a slice of type Array, empty
|
||||
static constexpr Slice emptyArraySlice() noexcept { return Slice("\x01"); }
|
||||
static constexpr Slice emptyArraySlice() noexcept { return Slice(emptyArraySliceData); }
|
||||
|
||||
// creates a slice of type Object, empty
|
||||
static constexpr Slice emptyObjectSlice() noexcept { return Slice("\x0a"); }
|
||||
static constexpr Slice emptyObjectSlice() noexcept { return Slice(emptyObjectSliceData); }
|
||||
|
||||
// creates a slice of type MinKey
|
||||
static constexpr Slice minKeySlice() noexcept { return Slice("\x1e"); }
|
||||
static constexpr Slice minKeySlice() noexcept { return Slice(minKeySliceData); }
|
||||
|
||||
// creates a slice of type MaxKey
|
||||
static constexpr Slice maxKeySlice() noexcept { return Slice("\x1f"); }
|
||||
static constexpr Slice maxKeySlice() noexcept { return Slice(maxKeySliceData); }
|
||||
|
||||
// creates a Slice from Json and adds it to a scope
|
||||
static Slice fromJson(SliceScope& scope, std::string const& json,
|
||||
Options const* options = &Options::Defaults);
|
||||
|
||||
// pointer to the head byte
|
||||
constexpr uint8_t const* start() const noexcept { return _start; }
|
||||
|
||||
|
@ -516,7 +518,7 @@ class Slice {
|
|||
// an External
|
||||
Slice resolveExternal() const {
|
||||
if (*_start == 0x1d) {
|
||||
return Slice(extractPointer());
|
||||
return Slice(reinterpret_cast<uint8_t const*>(extractPointer()));
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
@ -524,9 +526,9 @@ class Slice {
|
|||
// returns the Slice managed by an External or the Slice itself if it's not
|
||||
// an External, recursive version
|
||||
Slice resolveExternals() const {
|
||||
char const* current = reinterpret_cast<char const*>(_start);
|
||||
uint8_t const* current = _start;
|
||||
while (*current == 0x1d) {
|
||||
current = Slice(current).extractPointer();
|
||||
current = reinterpret_cast<uint8_t const*>(Slice(current).extractPointer());
|
||||
}
|
||||
return Slice(current);
|
||||
}
|
||||
|
@ -1083,20 +1085,6 @@ class Slice {
|
|||
}
|
||||
};
|
||||
|
||||
// a class for keeping Slice allocations in scope
|
||||
class SliceScope {
|
||||
public:
|
||||
SliceScope(SliceScope const&) = delete;
|
||||
SliceScope& operator=(SliceScope const&) = delete;
|
||||
SliceScope();
|
||||
~SliceScope();
|
||||
|
||||
Slice add(uint8_t const* data, ValueLength size);
|
||||
|
||||
private:
|
||||
std::vector<uint8_t*> _allocations;
|
||||
};
|
||||
|
||||
} // namespace arangodb::velocypack
|
||||
} // namespace arangodb
|
||||
|
||||
|
|
|
@ -99,13 +99,6 @@ using VPackAttributeTranslator = arangodb::velocypack::AttributeTranslator;
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef VELOCYPACK_HELPERS_H
|
||||
#ifndef VELOCYPACK_ALIAS_HELPERS
|
||||
#define VELOCYPACK_ALIAS_HELPERS
|
||||
using VPackTopLevelAttributeExcludeHandler = arangodb::velocypack::TopLevelAttributeExcludeHandler;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef VELOCYPACK_DUMPER_H
|
||||
#ifndef VELOCYPACK_ALIAS_DUMPER
|
||||
#define VELOCYPACK_ALIAS_DUMPER
|
||||
|
|
|
@ -437,7 +437,7 @@ void Dumper::dumpValue(Slice const* slice, Slice const* base) {
|
|||
}
|
||||
|
||||
case ValueType::External: {
|
||||
Slice const external(slice->getExternal());
|
||||
Slice const external(reinterpret_cast<uint8_t const*>(slice->getExternal()));
|
||||
dumpValue(&external, base);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -482,19 +482,10 @@ void Parser::parseObject() {
|
|||
++_pos;
|
||||
|
||||
_builderPtr->reportAdd();
|
||||
bool excludeAttribute = false;
|
||||
auto const lastPos = _builderPtr->_pos;
|
||||
if (options->attributeExcludeHandler == nullptr) {
|
||||
parseString();
|
||||
} else {
|
||||
parseString();
|
||||
if (options->attributeExcludeHandler->shouldExclude(
|
||||
Slice(_builderPtr->_start + lastPos), _nesting)) {
|
||||
excludeAttribute = true;
|
||||
}
|
||||
}
|
||||
parseString();
|
||||
|
||||
if (!excludeAttribute && options->attributeTranslator != nullptr) {
|
||||
if (options->attributeTranslator != nullptr) {
|
||||
// check if a translation for the attribute name exists
|
||||
Slice key(_builderPtr->_start + lastPos);
|
||||
|
||||
|
@ -523,10 +514,6 @@ void Parser::parseObject() {
|
|||
|
||||
parseJson();
|
||||
|
||||
if (excludeAttribute) {
|
||||
_builderPtr->removeLast();
|
||||
}
|
||||
|
||||
i = skipWhiteSpace("Expecting ',' or '}'");
|
||||
if (i == '}') {
|
||||
// end of object
|
||||
|
|
|
@ -38,20 +38,26 @@
|
|||
|
||||
using namespace arangodb::velocypack;
|
||||
|
||||
namespace {
|
||||
|
||||
// maximum values for integers of different byte sizes
|
||||
static int64_t const maxValues[] = {
|
||||
int64_t const maxValues[] = {
|
||||
128, 32768, 8388608, 2147483648, 549755813888, 140737488355328, 36028797018963968
|
||||
};
|
||||
|
||||
// creates a Slice from Json and adds it to a scope
|
||||
Slice Slice::fromJson(SliceScope& scope, std::string const& json,
|
||||
Options const* options) {
|
||||
Parser parser(options);
|
||||
parser.parse(json);
|
||||
|
||||
Builder const& b = parser.builder(); // don't copy Builder contents here
|
||||
return scope.add(b.start(), b.size());
|
||||
}
|
||||
} // namespace
|
||||
|
||||
uint8_t const Slice::noneSliceData[] = { 0x00 };
|
||||
uint8_t const Slice::illegalSliceData[] = { 0x17 };
|
||||
uint8_t const Slice::nullSliceData[] = { 0x18 };
|
||||
uint8_t const Slice::falseSliceData[] = { 0x19 };
|
||||
uint8_t const Slice::trueSliceData[] = { 0x1a };
|
||||
uint8_t const Slice::zeroSliceData[] = { 0x30 };
|
||||
uint8_t const Slice::emptyStringSliceData[] = { 0x40 };
|
||||
uint8_t const Slice::emptyArraySliceData[] = { 0x01 };
|
||||
uint8_t const Slice::emptyObjectSliceData[] = { 0x0a };
|
||||
uint8_t const Slice::minKeySliceData[] = { 0x1e };
|
||||
uint8_t const Slice::maxKeySliceData[] = { 0x1f };
|
||||
|
||||
// translates an integer key into a string
|
||||
Slice Slice::translate() const {
|
||||
|
@ -267,7 +273,7 @@ int64_t Slice::getIntUnchecked() const noexcept {
|
|||
return toInt64(v);
|
||||
} else {
|
||||
int64_t vv = static_cast<int64_t>(v);
|
||||
int64_t shift = maxValues[h - 0x20];
|
||||
int64_t shift = ::maxValues[h - 0x20];
|
||||
return vv < shift ? vv : vv - (shift << 1);
|
||||
}
|
||||
}
|
||||
|
@ -288,7 +294,7 @@ int64_t Slice::getInt() const {
|
|||
return toInt64(v);
|
||||
} else {
|
||||
int64_t vv = static_cast<int64_t>(v);
|
||||
int64_t shift = maxValues[h - 0x20];
|
||||
int64_t shift = ::maxValues[h - 0x20];
|
||||
return vv < shift ? vv : vv - (shift << 1);
|
||||
}
|
||||
}
|
||||
|
@ -647,22 +653,6 @@ template Slice Slice::searchObjectKeyBinary<2>(StringRef const& attribute, Value
|
|||
template Slice Slice::searchObjectKeyBinary<4>(StringRef const& attribute, ValueLength ieBase, ValueLength n) const;
|
||||
template Slice Slice::searchObjectKeyBinary<8>(StringRef const& attribute, ValueLength ieBase, ValueLength n) const;
|
||||
|
||||
SliceScope::SliceScope() : _allocations() {}
|
||||
|
||||
SliceScope::~SliceScope() {
|
||||
for (auto& it : _allocations) {
|
||||
delete[] it;
|
||||
}
|
||||
}
|
||||
|
||||
Slice SliceScope::add(uint8_t const* data, ValueLength size) {
|
||||
size_t const s = checkOverflow(size);
|
||||
std::unique_ptr<uint8_t[]> copy(new uint8_t[s]);
|
||||
memcpy(copy.get(), data, s);
|
||||
_allocations.push_back(copy.get());
|
||||
return Slice(copy.release());
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& stream, Slice const* slice) {
|
||||
stream << "[Slice " << valueTypeName(slice->type()) << " ("
|
||||
<< slice->hexType() << "), byteSize: " << slice->byteSize() << "]";
|
||||
|
|
|
@ -626,12 +626,12 @@ struct AggregatorUnique : public Aggregator {
|
|||
}
|
||||
|
||||
char* pos = allocator.store(s.startAs<char>(), s.byteSize());
|
||||
seen.emplace(pos);
|
||||
seen.emplace(reinterpret_cast<uint8_t const*>(pos));
|
||||
|
||||
if (builder.isClosed()) {
|
||||
builder.openArray();
|
||||
}
|
||||
builder.add(VPackSlice(pos));
|
||||
builder.add(VPackSlice(reinterpret_cast<uint8_t const*>(pos)));
|
||||
}
|
||||
|
||||
AqlValue stealValue() override final {
|
||||
|
@ -673,12 +673,12 @@ struct AggregatorUniqueStep2 final : public AggregatorUnique {
|
|||
}
|
||||
|
||||
char* pos = allocator.store(it.startAs<char>(), it.byteSize());
|
||||
seen.emplace(pos);
|
||||
seen.emplace(reinterpret_cast<uint8_t const*>(pos));
|
||||
|
||||
if (builder.isClosed()) {
|
||||
builder.openArray();
|
||||
}
|
||||
builder.add(VPackSlice(pos));
|
||||
builder.add(VPackSlice(reinterpret_cast<uint8_t const*>(pos)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -709,7 +709,7 @@ struct AggregatorSortedUnique : public Aggregator {
|
|||
}
|
||||
|
||||
char* pos = allocator.store(s.startAs<char>(), s.byteSize());
|
||||
seen.emplace(pos);
|
||||
seen.emplace(reinterpret_cast<uint8_t const*>(pos));
|
||||
}
|
||||
|
||||
AqlValue stealValue() override final {
|
||||
|
@ -751,7 +751,7 @@ struct AggregatorSortedUniqueStep2 final : public AggregatorSortedUnique {
|
|||
}
|
||||
|
||||
char* pos = allocator.store(it.startAs<char>(), it.byteSize());
|
||||
seen.emplace(pos);
|
||||
seen.emplace(reinterpret_cast<uint8_t const*>(pos));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -783,7 +783,7 @@ struct AggregatorCountDistinct : public Aggregator {
|
|||
}
|
||||
|
||||
char* pos = allocator.store(s.startAs<char>(), s.byteSize());
|
||||
seen.emplace(pos);
|
||||
seen.emplace(reinterpret_cast<uint8_t const*>(pos));
|
||||
}
|
||||
|
||||
AqlValue stealValue() override final {
|
||||
|
@ -818,7 +818,7 @@ struct AggregatorCountDistinctStep2 final : public AggregatorCountDistinct {
|
|||
}
|
||||
|
||||
char* pos = allocator.store(it.startAs<char>(), it.byteSize());
|
||||
seen.emplace(pos);
|
||||
seen.emplace(reinterpret_cast<uint8_t const*>(pos));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -46,7 +46,6 @@
|
|||
|
||||
#include <velocypack/Buffer.h>
|
||||
#include <velocypack/Collection.h>
|
||||
#include <velocypack/Helpers.h>
|
||||
#include <velocypack/Iterator.h>
|
||||
#include <velocypack/Slice.h>
|
||||
#include <velocypack/velocypack-aliases.h>
|
||||
|
|
|
@ -74,7 +74,7 @@ void RestClusterHandler::handleAgencyDump() {
|
|||
|
||||
AuthenticationFeature* af = AuthenticationFeature::instance();
|
||||
if (af->isActive() && !_request->user().empty()) {
|
||||
auth::Level lvl = auth::Level::NONE;
|
||||
auth::Level lvl;
|
||||
if (af->userManager() != nullptr) {
|
||||
lvl = af->userManager()->databaseAuthLevel(_request->user(), "_system", true);
|
||||
} else {
|
||||
|
|
|
@ -63,7 +63,7 @@ inline void validateMessage(char const* vpStart, char const* vpEnd) {
|
|||
validator.validate(vpStart, std::distance(vpStart, vpEnd),
|
||||
/*isSubPart =*/true);
|
||||
|
||||
VPackSlice slice = VPackSlice(vpStart);
|
||||
VPackSlice slice = VPackSlice(reinterpret_cast<uint8_t const*>(vpStart));
|
||||
if (!slice.isArray() || slice.length() < 2) {
|
||||
throw std::runtime_error(
|
||||
"VST message does not contain a valid request header");
|
||||
|
|
|
@ -170,7 +170,7 @@ Result persistLocalDocumentIdIterator(MMFilesMarker const* marker, void* data,
|
|||
case TRI_DF_MARKER_VPACK_DOCUMENT: {
|
||||
auto transactionId = MMFilesDatafileHelper::TransactionId(marker);
|
||||
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(TRI_DF_MARKER_VPACK_DOCUMENT));
|
||||
uint8_t const* vpack = slice.begin();
|
||||
|
||||
|
@ -333,7 +333,7 @@ int MMFilesCollection::OpenIteratorHandleDocumentMarker(MMFilesMarker const* mar
|
|||
transaction::Methods* trx = state->_trx;
|
||||
TRI_ASSERT(trx != nullptr);
|
||||
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(TRI_DF_MARKER_VPACK_DOCUMENT));
|
||||
uint8_t const* vpack = slice.begin();
|
||||
|
||||
|
@ -452,7 +452,7 @@ int MMFilesCollection::OpenIteratorHandleDeletionMarker(MMFilesMarker const* mar
|
|||
TRI_ASSERT(physical != nullptr);
|
||||
transaction::Methods* trx = state->_trx;
|
||||
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(TRI_DF_MARKER_VPACK_REMOVE));
|
||||
|
||||
VPackSlice keySlice;
|
||||
|
|
|
@ -141,7 +141,7 @@ static bool ScanMarker(MMFilesMarker const* marker, void* data, MMFilesDatafile*
|
|||
break;
|
||||
}
|
||||
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
state->documentOperations[collectionId][transaction::helpers::extractKeyFromDocument(slice)
|
||||
.copyString()] = marker;
|
||||
|
@ -642,7 +642,7 @@ void MMFilesCollectorThread::processCollectionMarker(
|
|||
auto& dfi = cache->createDfi(fid);
|
||||
dfi.numberUncollected--;
|
||||
|
||||
VPackSlice slice(reinterpret_cast<char const*>(walMarker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(walMarker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
TRI_ASSERT(slice.isObject());
|
||||
|
||||
|
@ -683,7 +683,7 @@ void MMFilesCollectorThread::processCollectionMarker(
|
|||
dfi.numberUncollected--;
|
||||
dfi.numberDeletions++;
|
||||
|
||||
VPackSlice slice(reinterpret_cast<char const*>(walMarker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(walMarker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
TRI_ASSERT(slice.isObject());
|
||||
|
||||
|
|
|
@ -318,7 +318,7 @@ MMFilesCompactorThread::CompactionInitialContext MMFilesCompactorThread::getComp
|
|||
|
||||
// new or updated document
|
||||
if (type == TRI_DF_MARKER_VPACK_DOCUMENT) {
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
TRI_ASSERT(slice.isObject());
|
||||
|
||||
|
@ -415,7 +415,7 @@ void MMFilesCompactorThread::compactDatafiles(LogicalCollection* collection,
|
|||
|
||||
// new or updated document
|
||||
if (type == TRI_DF_MARKER_VPACK_DOCUMENT) {
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
TRI_ASSERT(slice.isObject());
|
||||
|
||||
|
|
|
@ -1718,7 +1718,7 @@ DatafileScan MMFilesDatafile::scanHelper() {
|
|||
|
||||
if (ok) {
|
||||
if (type == TRI_DF_MARKER_VPACK_DOCUMENT || type == TRI_DF_MARKER_VPACK_REMOVE) {
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
TRI_ASSERT(slice.isObject());
|
||||
try {
|
||||
|
|
|
@ -101,7 +101,7 @@ Result MMFilesExportCursor::dumpSync(VPackBuilder& builder) {
|
|||
break;
|
||||
}
|
||||
|
||||
VPackSlice const slice(reinterpret_cast<char const*>(_ex->_vpack.at(_position++)));
|
||||
VPackSlice const slice(reinterpret_cast<uint8_t const*>(_ex->_vpack.at(_position++)));
|
||||
|
||||
builder.openObject();
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ class MMFilesPersistentIndexKeyComparator final : public rocksdb::Comparator {
|
|||
~MMFilesPersistentIndexKeyComparator() = default;
|
||||
|
||||
static inline arangodb::velocypack::Slice extractKeySlice(rocksdb::Slice const& slice) {
|
||||
return arangodb::velocypack::Slice(slice.data() + MMFilesPersistentIndex::keyPrefixSize());
|
||||
return arangodb::velocypack::Slice(reinterpret_cast<uint8_t const*>(slice.data() + MMFilesPersistentIndex::keyPrefixSize()));
|
||||
}
|
||||
|
||||
int Compare(rocksdb::Slice const& lhs, rocksdb::Slice const& rhs) const override;
|
||||
|
|
|
@ -304,7 +304,7 @@ struct MMFilesWalAccessContext : WalAccessContext {
|
|||
}
|
||||
|
||||
if (type == TRI_DF_MARKER_VPACK_DROP_DATABASE) {
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
_builder.add("db", slice.get("name"));
|
||||
|
@ -316,7 +316,7 @@ struct MMFilesWalAccessContext : WalAccessContext {
|
|||
// ignore markers from dropped dbs
|
||||
return TRI_ERROR_NO_ERROR;
|
||||
}
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
_builder.add("db", VPackValue(vocbase->name()));
|
||||
_builder.add("cuid", slice.get("cuid"));
|
||||
|
@ -364,7 +364,7 @@ struct MMFilesWalAccessContext : WalAccessContext {
|
|||
case TRI_DF_MARKER_VPACK_CHANGE_COLLECTION:
|
||||
case TRI_DF_MARKER_VPACK_CHANGE_VIEW:
|
||||
case TRI_DF_MARKER_VPACK_DROP_INDEX: {
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
_builder.add("data", slice);
|
||||
break;
|
||||
|
|
|
@ -360,7 +360,7 @@ bool MMFilesWalRecoverState::InitialScanMarker(MMFilesMarker const* marker, void
|
|||
|
||||
switch (type) {
|
||||
case TRI_DF_MARKER_VPACK_DOCUMENT: {
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
if (payloadSlice.isObject()) {
|
||||
TRI_voc_rid_t revisionId =
|
||||
|
@ -648,7 +648,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_RENAME_COLLECTION: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const collectionId = MMFilesDatafileHelper::CollectionId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -730,7 +730,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_CHANGE_COLLECTION: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const collectionId = MMFilesDatafileHelper::CollectionId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -784,7 +784,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_CHANGE_VIEW: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const viewId = MMFilesDatafileHelper::ViewId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -866,7 +866,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_CREATE_INDEX: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const collectionId = MMFilesDatafileHelper::CollectionId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -948,7 +948,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_CREATE_COLLECTION: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const collectionId = MMFilesDatafileHelper::CollectionId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -1063,7 +1063,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_CREATE_VIEW: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const viewId = MMFilesDatafileHelper::ViewId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -1154,7 +1154,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
|
||||
case TRI_DF_MARKER_VPACK_CREATE_DATABASE: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
@ -1235,7 +1235,7 @@ bool MMFilesWalRecoverState::ReplayMarker(MMFilesMarker const* marker,
|
|||
case TRI_DF_MARKER_VPACK_DROP_INDEX: {
|
||||
TRI_voc_tick_t const databaseId = MMFilesDatafileHelper::DatabaseId(marker);
|
||||
TRI_voc_cid_t const collectionId = MMFilesDatafileHelper::CollectionId(marker);
|
||||
VPackSlice const payloadSlice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice const payloadSlice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
|
||||
if (!payloadSlice.isObject()) {
|
||||
|
|
|
@ -172,7 +172,7 @@ static int StringifyMarker(MMFilesReplicationDumpContext* dump, TRI_voc_tick_t d
|
|||
case TRI_DF_MARKER_VPACK_DROP_VIEW: {
|
||||
Append(dump, ",\"data\":");
|
||||
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
arangodb::basics::VPackStringBufferAdapter adapter(dump->_buffer);
|
||||
VPackDumper dumper(&adapter,
|
||||
|
@ -259,7 +259,7 @@ static int SliceifyMarker(MMFilesReplicationDumpContext* dump, TRI_voc_tick_t da
|
|||
case TRI_DF_MARKER_VPACK_DROP_COLLECTION:
|
||||
case TRI_DF_MARKER_VPACK_DROP_INDEX:
|
||||
case TRI_DF_MARKER_VPACK_DROP_VIEW: {
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
builder.add("data", slice);
|
||||
break;
|
||||
|
@ -557,7 +557,7 @@ int MMFilesDumpLogReplication(MMFilesReplicationDumpContext* dump,
|
|||
TRI_ASSERT(collectionId != 0);
|
||||
|
||||
if (dump->_vocbase->id() == databaseId) {
|
||||
VPackSlice slice(reinterpret_cast<char const*>(marker) +
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(marker) +
|
||||
MMFilesDatafileHelper::VPackOffset(type));
|
||||
VPackSlice name = slice.get("name");
|
||||
if (name.isString()) {
|
||||
|
|
|
@ -407,7 +407,7 @@ Result DatabaseInitialSyncer::parseCollectionDump(transaction::Methods& trx,
|
|||
// throws if the data is invalid
|
||||
validator.validate(p, remaining, /*isSubPart*/ true);
|
||||
|
||||
VPackSlice marker(p);
|
||||
VPackSlice marker(reinterpret_cast<uint8_t const*>(p));
|
||||
Result r = parseCollectionDumpMarker(trx, coll, marker);
|
||||
if (r.fail()) {
|
||||
r.reset(r.errorNumber(),
|
||||
|
|
|
@ -141,7 +141,7 @@ void RestAdminServerHandler::handleMode() {
|
|||
} else if (requestType == rest::RequestType::PUT) {
|
||||
AuthenticationFeature* af = AuthenticationFeature::instance();
|
||||
if (af->isActive() && !_request->user().empty()) {
|
||||
auth::Level lvl = auth::Level::NONE;
|
||||
auth::Level lvl;
|
||||
if (af->userManager() != nullptr) {
|
||||
lvl = af->userManager()->databaseAuthLevel(_request->user(), TRI_VOC_SYSTEM_DATABASE,
|
||||
/*configured*/ true);
|
||||
|
|
|
@ -53,7 +53,7 @@ RestStatus RestShutdownHandler::execute() {
|
|||
|
||||
AuthenticationFeature* af = AuthenticationFeature::instance();
|
||||
if (af->isActive() && !_request->user().empty()) {
|
||||
auth::Level lvl = auth::Level::NONE;
|
||||
auth::Level lvl;
|
||||
if (af->userManager() != nullptr) {
|
||||
lvl = af->userManager()->databaseAuthLevel(_request->user(), "_system",
|
||||
/*configured*/ true);
|
||||
|
|
|
@ -391,7 +391,7 @@ class RocksDBFlushMarker {
|
|||
|
||||
_databaseId = arangodb::rocksutils::uint64FromPersistent(ptr);
|
||||
ptr += sizeof(uint64_t);
|
||||
_slice = arangodb::velocypack::Slice(ptr);
|
||||
_slice = arangodb::velocypack::Slice(reinterpret_cast<uint8_t const*>(ptr));
|
||||
|
||||
if (_slice.byteSize() != size_t(end - ptr)) {
|
||||
THROW_ARANGO_EXCEPTION(arangodb::Result( // exception
|
||||
|
|
|
@ -228,7 +228,7 @@ static arangodb::Result fillIndex(RocksDBIndex& ridx, WriteBatchType& batch,
|
|||
}
|
||||
|
||||
res = ridx.insert(trx, &batched, RocksDBKey::documentId(it->key()),
|
||||
VPackSlice(it->value().data()), Index::OperationMode::normal);
|
||||
VPackSlice(reinterpret_cast<uint8_t const*>(it->value().data())), Index::OperationMode::normal);
|
||||
if (res.fail()) {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -398,7 +398,7 @@ std::shared_ptr<Index> RocksDBCollection::createIndex(VPackSlice const& info,
|
|||
|
||||
VPackBuilder builder;
|
||||
builder.openObject();
|
||||
for (auto const& pair : VPackObjectIterator(VPackSlice(ps.data()))) {
|
||||
for (auto const& pair : VPackObjectIterator(VPackSlice(reinterpret_cast<uint8_t const*>(ps.data())))) {
|
||||
if (pair.key.isEqualString("indexes")) { // append new index
|
||||
VPackArrayBuilder arrGuard(&builder, "indexes");
|
||||
builder.add(VPackArrayIterator(pair.value));
|
||||
|
@ -696,7 +696,7 @@ Result RocksDBCollection::truncate(transaction::Methods& trx, OperationOptions&
|
|||
|
||||
++found;
|
||||
TRI_ASSERT(_objectId == RocksDBKey::objectId(iter->key()));
|
||||
VPackSlice document(iter->value().data());
|
||||
VPackSlice document(reinterpret_cast<uint8_t const*>(iter->value().data()));
|
||||
TRI_ASSERT(document.isObject());
|
||||
|
||||
// tmp may contain a pointer into rocksdb::WriteBuffer::_rep. This is
|
||||
|
@ -950,7 +950,7 @@ Result RocksDBCollection::update(arangodb::transaction::Methods* trx,
|
|||
}
|
||||
|
||||
TRI_ASSERT(previousPS.size() > 0);
|
||||
VPackSlice const oldDoc(previousPS.data());
|
||||
VPackSlice const oldDoc(reinterpret_cast<uint8_t const*>(previousPS.data()));
|
||||
previousMdr.setRevisionId(transaction::helpers::extractRevFromDocument(oldDoc));
|
||||
TRI_ASSERT(previousMdr.revisionId() != 0);
|
||||
|
||||
|
@ -1060,7 +1060,7 @@ Result RocksDBCollection::replace(transaction::Methods* trx,
|
|||
}
|
||||
|
||||
TRI_ASSERT(previousPS.size() > 0);
|
||||
VPackSlice const oldDoc(previousPS.data());
|
||||
VPackSlice const oldDoc(reinterpret_cast<uint8_t const*>(previousPS.data()));
|
||||
previousMdr.setRevisionId(transaction::helpers::extractRevFromDocument(oldDoc));
|
||||
TRI_ASSERT(previousMdr.revisionId() != 0);
|
||||
|
||||
|
@ -1165,7 +1165,7 @@ Result RocksDBCollection::remove(transaction::Methods& trx, velocypack::Slice sl
|
|||
}
|
||||
|
||||
TRI_ASSERT(previousPS.size() > 0);
|
||||
VPackSlice const oldDoc(previousPS.data());
|
||||
VPackSlice const oldDoc(reinterpret_cast<uint8_t const*>(previousPS.data()));
|
||||
previousMdr.setRevisionId(transaction::helpers::extractRevFromDocument(oldDoc));
|
||||
TRI_ASSERT(previousMdr.revisionId() != 0);
|
||||
|
||||
|
@ -1471,7 +1471,7 @@ bool RocksDBCollection::lookupDocumentVPack(transaction::Methods* trx,
|
|||
auto f = _cache->find(key->string().data(),
|
||||
static_cast<uint32_t>(key->string().size()));
|
||||
if (f.found()) {
|
||||
cb(documentId, VPackSlice(reinterpret_cast<char const*>(f.value()->value())));
|
||||
cb(documentId, VPackSlice(reinterpret_cast<uint8_t const*>(f.value()->value())));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1481,7 +1481,7 @@ bool RocksDBCollection::lookupDocumentVPack(transaction::Methods* trx,
|
|||
Result res = lookupDocumentVPack(trx, documentId, ps, /*readCache*/false, withCache);
|
||||
if (res.ok()) {
|
||||
TRI_ASSERT(ps.size() > 0);
|
||||
cb(documentId, VPackSlice(ps.data()));
|
||||
cb(documentId, VPackSlice(reinterpret_cast<uint8_t const*>(ps.data())));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -83,8 +83,8 @@ int RocksDBVPackComparator::compareIndexValues(rocksdb::Slice const& lhs,
|
|||
TRI_ASSERT(lhs.size() > sizeof(uint64_t));
|
||||
TRI_ASSERT(rhs.size() > sizeof(uint64_t));
|
||||
|
||||
VPackSlice const lSlice = VPackSlice(lhs.data() + sizeof(uint64_t));
|
||||
VPackSlice const rSlice = VPackSlice(rhs.data() + sizeof(uint64_t));
|
||||
VPackSlice const lSlice = VPackSlice(reinterpret_cast<uint8_t const*>(lhs.data()) + sizeof(uint64_t));
|
||||
VPackSlice const rSlice = VPackSlice(reinterpret_cast<uint8_t const*>(rhs.data()) + sizeof(uint64_t));
|
||||
|
||||
r = ::compareIndexedValues(lSlice, rSlice);
|
||||
|
||||
|
|
|
@ -852,7 +852,7 @@ void RocksDBEngine::getDatabases(arangodb::velocypack::Builder& result) {
|
|||
result.openArray();
|
||||
auto rSlice = rocksDBSlice(RocksDBEntryType::Database);
|
||||
for (iter->Seek(rSlice); iter->Valid() && iter->key().starts_with(rSlice); iter->Next()) {
|
||||
auto slice = VPackSlice(iter->value().data());
|
||||
auto slice = VPackSlice(reinterpret_cast<uint8_t const*>(iter->value().data()));
|
||||
|
||||
//// check format id
|
||||
VPackSlice idSlice = slice.get("id");
|
||||
|
@ -954,7 +954,7 @@ int RocksDBEngine::getCollectionsAndIndexes(TRI_vocbase_t& vocbase,
|
|||
continue;
|
||||
}
|
||||
|
||||
auto slice = VPackSlice(iter->value().data());
|
||||
auto slice = VPackSlice(reinterpret_cast<uint8_t const*>(iter->value().data()));
|
||||
|
||||
if (arangodb::basics::VelocyPackHelper::readBooleanValue(slice, StaticStrings::DataSourceDeleted,
|
||||
false)) {
|
||||
|
@ -981,7 +981,7 @@ int RocksDBEngine::getViews(TRI_vocbase_t& vocbase, arangodb::velocypack::Builde
|
|||
result.openArray();
|
||||
for (iter->Seek(bounds.start()); iter->Valid(); iter->Next()) {
|
||||
TRI_ASSERT(iter->key().compare(bounds.end()) < 0);
|
||||
auto slice = VPackSlice(iter->value().data());
|
||||
auto slice = VPackSlice(reinterpret_cast<uint8_t const*>(iter->value().data()));
|
||||
|
||||
LOG_TOPIC("e3bcd", TRACE, Logger::VIEWS) << "got view slice: " << slice.toJson();
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ bool RocksDBAllIndexIterator::nextDocument(IndexIterator::DocumentCallback const
|
|||
}
|
||||
|
||||
while (limit > 0) {
|
||||
cb(RocksDBKey::documentId(_iterator->key()), VPackSlice(_iterator->value().data()));
|
||||
cb(RocksDBKey::documentId(_iterator->key()), VPackSlice(reinterpret_cast<uint8_t const*>(_iterator->value().data())));
|
||||
--limit;
|
||||
_iterator->Next();
|
||||
|
||||
|
@ -220,7 +220,7 @@ bool RocksDBAnyIndexIterator::nextDocument(IndexIterator::DocumentCallback const
|
|||
}
|
||||
|
||||
while (limit > 0) {
|
||||
cb(RocksDBKey::documentId(_iterator->key()), VPackSlice(_iterator->value().data()));
|
||||
cb(RocksDBKey::documentId(_iterator->key()), VPackSlice(reinterpret_cast<uint8_t const*>(_iterator->value().data())));
|
||||
--limit;
|
||||
_returned++;
|
||||
_iterator->Next();
|
||||
|
|
|
@ -446,7 +446,7 @@ arangodb::velocypack::StringRef RocksDBKey::vertexId(char const* data, size_t si
|
|||
VPackSlice RocksDBKey::indexedVPack(char const* data, size_t size) {
|
||||
TRI_ASSERT(data != nullptr);
|
||||
TRI_ASSERT(size > sizeof(uint64_t));
|
||||
return VPackSlice(data + sizeof(uint64_t));
|
||||
return VPackSlice(reinterpret_cast<uint8_t const*>(data) + sizeof(uint64_t));
|
||||
}
|
||||
|
||||
namespace arangodb {
|
||||
|
|
|
@ -309,8 +309,10 @@ RocksDBKeyBounds::RocksDBKeyBounds(RocksDBEntryType type, uint64_t first)
|
|||
// 7 + 8-byte object ID of index + VPack array with index value(s) ....
|
||||
// prefix is the same for non-unique indexes
|
||||
// static slices with an array with one entry
|
||||
VPackSlice min("\x02\x03\x1e"); // [minSlice]
|
||||
VPackSlice max("\x02\x03\x1f"); // [maxSlice]
|
||||
uint8_t const minSlice[] = { 0x02, 0x03, 0x1e }; // [minSlice]
|
||||
uint8_t const maxSlice[] = { 0x02, 0x03, 0x1f }; // [maxSlice]
|
||||
VPackSlice min(minSlice);
|
||||
VPackSlice max(maxSlice);
|
||||
_internals.reserve(2 * sizeof(uint64_t) + min.byteSize() + max.byteSize());
|
||||
|
||||
uint64ToPersistent(_internals.buffer(), first);
|
||||
|
|
|
@ -302,14 +302,14 @@ VPackSlice RocksDBLogValue::indexSlice(rocksdb::Slice const& slice) {
|
|||
TRI_ASSERT(slice.size() >= sizeof(RocksDBLogType) + sizeof(uint64_t) * 2);
|
||||
RocksDBLogType type = static_cast<RocksDBLogType>(slice.data()[0]);
|
||||
TRI_ASSERT(type == RocksDBLogType::IndexCreate);
|
||||
return VPackSlice(slice.data() + sizeof(RocksDBLogType) + sizeof(uint64_t) * 2);
|
||||
return VPackSlice(reinterpret_cast<uint8_t const*>(slice.data() + sizeof(RocksDBLogType) + sizeof(uint64_t) * 2));
|
||||
}
|
||||
|
||||
VPackSlice RocksDBLogValue::viewSlice(rocksdb::Slice const& slice) {
|
||||
TRI_ASSERT(slice.size() >= sizeof(RocksDBLogType) + sizeof(uint64_t) * 2);
|
||||
RocksDBLogType type = static_cast<RocksDBLogType>(slice.data()[0]);
|
||||
TRI_ASSERT(type == RocksDBLogType::ViewDrop);
|
||||
return VPackSlice(slice.data() + sizeof(RocksDBLogType) + sizeof(uint64_t) * 2);
|
||||
return VPackSlice(reinterpret_cast<uint8_t const*>(slice.data() + sizeof(RocksDBLogType) + sizeof(uint64_t) * 2));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -351,7 +351,7 @@ std::pair<LocalDocumentId, VPackSlice> RocksDBLogValue::trackedDocument(rocksdb:
|
|||
type == RocksDBLogType::TrackedDocumentRemove);
|
||||
|
||||
LocalDocumentId id(uintFromPersistentLittleEndian<LocalDocumentId::BaseType>(slice.data() + sizeof(RocksDBLogType)));
|
||||
VPackSlice data(slice.data() + sizeof(RocksDBLogType) + sizeof(LocalDocumentId::BaseType));
|
||||
VPackSlice data(reinterpret_cast<uint8_t const*>(slice.data() + sizeof(RocksDBLogType) + sizeof(LocalDocumentId::BaseType)));
|
||||
return std::make_pair(id, data);
|
||||
}
|
||||
|
||||
|
|
|
@ -269,7 +269,7 @@ RocksDBReplicationContext::DumpResult RocksDBReplicationContext::dumpJson(
|
|||
buff.appendInteger(REPLICATION_MARKER_DOCUMENT); // set type
|
||||
buff.appendText(",\"data\":");
|
||||
// printing the data, note: we need the CustomTypeHandler here
|
||||
dumper.dump(velocypack::Slice(cIter->iter->value().data()));
|
||||
dumper.dump(velocypack::Slice(reinterpret_cast<uint8_t const*>(cIter->iter->value().data())));
|
||||
buff.appendText("}\n");
|
||||
cIter->iter->Next();
|
||||
}
|
||||
|
@ -312,7 +312,7 @@ RocksDBReplicationContext::DumpResult RocksDBReplicationContext::dumpVPack(
|
|||
builder.openObject();
|
||||
builder.add("type", VPackValue(REPLICATION_MARKER_DOCUMENT));
|
||||
builder.add(VPackValue("data"));
|
||||
builder.add(velocypack::Slice(cIter->iter->value().data()));
|
||||
builder.add(velocypack::Slice(reinterpret_cast<uint8_t const*>(cIter->iter->value().data())));
|
||||
builder.close();
|
||||
cIter->iter->Next();
|
||||
}
|
||||
|
@ -390,7 +390,7 @@ arangodb::Result RocksDBReplicationContext::dumpKeyChunks(TRI_vocbase_t& vocbase
|
|||
docKey.string(), &ps);
|
||||
if (s.ok()) {
|
||||
TRI_ASSERT(ps.size() > 0);
|
||||
docRev = TRI_ExtractRevisionId(VPackSlice(ps.data()));
|
||||
docRev = TRI_ExtractRevisionId(VPackSlice(reinterpret_cast<uint8_t const*>(ps.data())));
|
||||
} else {
|
||||
LOG_TOPIC("32e3b", WARN, Logger::REPLICATION)
|
||||
<< "inconsistent primary index, "
|
||||
|
@ -536,7 +536,7 @@ arangodb::Result RocksDBReplicationContext::dumpKeys(TRI_vocbase_t& vocbase,
|
|||
tmpKey.string(), &ps);
|
||||
if (s.ok()) {
|
||||
TRI_ASSERT(ps.size() > 0);
|
||||
docRev = TRI_ExtractRevisionId(VPackSlice(ps.data()));
|
||||
docRev = TRI_ExtractRevisionId(VPackSlice(reinterpret_cast<uint8_t const*>(ps.data())));
|
||||
} else {
|
||||
arangodb::velocypack::StringRef key = RocksDBKey::primaryKey(cIter->iter->key());
|
||||
LOG_TOPIC("41803", WARN, Logger::REPLICATION)
|
||||
|
@ -674,8 +674,8 @@ arangodb::Result RocksDBReplicationContext::dumpDocuments(
|
|||
tmpKey.string(), &ps);
|
||||
if (s.ok()) {
|
||||
TRI_ASSERT(ps.size() > 0);
|
||||
TRI_ASSERT(VPackSlice(ps.data()).isObject());
|
||||
b.add(VPackSlice(ps.data()));
|
||||
TRI_ASSERT(VPackSlice(reinterpret_cast<uint8_t const*>(ps.data())).isObject());
|
||||
b.add(VPackSlice(reinterpret_cast<uint8_t const*>(ps.data())));
|
||||
} else {
|
||||
arangodb::velocypack::StringRef key = RocksDBKey::primaryKey(cIter->iter->key());
|
||||
LOG_TOPIC("d79df", WARN, Logger::REPLICATION)
|
||||
|
|
|
@ -237,7 +237,7 @@ void RocksDBSettingsManager::loadSettings() {
|
|||
key.string(), &result);
|
||||
if (status.ok()) {
|
||||
// key may not be there, so don't fail when not found
|
||||
VPackSlice slice = VPackSlice(result.data());
|
||||
VPackSlice slice = VPackSlice(reinterpret_cast<uint8_t const*>(result.data()));
|
||||
TRI_ASSERT(slice.isObject());
|
||||
LOG_TOPIC("7458b", TRACE, Logger::ENGINES) << "read initial settings: " << slice.toJson();
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ class RocksDBVPackIndexIterator final : public IndexIterator {
|
|||
if (reverse) {
|
||||
_rangeBound = _bounds.start();
|
||||
options.iterate_lower_bound = &_rangeBound;
|
||||
VPackSlice s = VPackSlice(_rangeBound.data() + sizeof(uint64_t));
|
||||
VPackSlice s = VPackSlice(reinterpret_cast<uint8_t const*>(_rangeBound.data() + sizeof(uint64_t)));
|
||||
if (s.isArray() && s.length() == 1 && s.at(0).isMinKey()) {
|
||||
// lower bound is the min key. that means we can get away with a
|
||||
// cheap outOfBounds comparator
|
||||
|
@ -200,7 +200,7 @@ class RocksDBVPackIndexIterator final : public IndexIterator {
|
|||
} else {
|
||||
_rangeBound = _bounds.end();
|
||||
options.iterate_upper_bound = &_rangeBound;
|
||||
VPackSlice s = VPackSlice(_rangeBound.data() + sizeof(uint64_t));
|
||||
VPackSlice s = VPackSlice(reinterpret_cast<uint8_t const*>(_rangeBound.data() + sizeof(uint64_t)));
|
||||
if (s.isArray() && s.length() == 1 && s.at(0).isMaxKey()) {
|
||||
// upper bound is the max key. that means we can get away with a
|
||||
// cheap outOfBounds comparator
|
||||
|
|
|
@ -224,13 +224,13 @@ arangodb::velocypack::StringRef RocksDBValue::vertexId(char const* data, size_t
|
|||
VPackSlice RocksDBValue::data(char const* data, size_t size) {
|
||||
TRI_ASSERT(data != nullptr);
|
||||
TRI_ASSERT(size >= sizeof(char));
|
||||
return VPackSlice(data);
|
||||
return VPackSlice(reinterpret_cast<uint8_t const*>(data));
|
||||
}
|
||||
|
||||
uint64_t RocksDBValue::keyValue(char const* data, size_t size) {
|
||||
TRI_ASSERT(data != nullptr);
|
||||
TRI_ASSERT(size >= sizeof(char));
|
||||
VPackSlice key = transaction::helpers::extractKeyFromDocument(VPackSlice(data));
|
||||
VPackSlice key = transaction::helpers::extractKeyFromDocument(VPackSlice(reinterpret_cast<uint8_t const*>(data)));
|
||||
if (key.isString()) {
|
||||
VPackValueLength l;
|
||||
char const* p = key.getStringUnchecked(l);
|
||||
|
|
|
@ -54,7 +54,7 @@ void ManagedDocumentResult::addToBuilder(velocypack::Builder& builder,
|
|||
TRI_ASSERT(!empty());
|
||||
if (_vpack == nullptr) { // managed
|
||||
TRI_ASSERT(!_string.empty());
|
||||
builder.add(VPackSlice(_string.data()));
|
||||
builder.add(VPackSlice(reinterpret_cast<uint8_t const*>(_string.data())));
|
||||
} else {
|
||||
if (allowExternals) {
|
||||
builder.addExternal(_vpack);
|
||||
|
|
|
@ -189,7 +189,7 @@ void VPackFeature::start() {
|
|||
return;
|
||||
}
|
||||
|
||||
slice = VPackSlice(s.data());
|
||||
slice = VPackSlice(reinterpret_cast<uint8_t const*>(s.data()));
|
||||
}
|
||||
|
||||
VPackBuffer<char> buffer(4096);
|
||||
|
|
|
@ -496,7 +496,7 @@ void VelocyPackDumper::dumpValue(VPackSlice const* slice, VPackSlice const* base
|
|||
}
|
||||
|
||||
case VPackValueType::External: {
|
||||
VPackSlice const external(slice->getExternal());
|
||||
VPackSlice const external(reinterpret_cast<uint8_t const*>(slice->getExternal()));
|
||||
dumpValue(&external, base);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -468,7 +468,7 @@ void VelocyPackHelper::ensureStringValue(VPackSlice const& slice, std::string co
|
|||
arangodb::velocypack::Slice slice, std::string const& key,
|
||||
arangodb::velocypack::StringRef const& defaultValue) noexcept {
|
||||
if (slice.isExternal()) {
|
||||
slice = arangodb::velocypack::Slice(slice.getExternal());
|
||||
slice = arangodb::velocypack::Slice(reinterpret_cast<uint8_t const*>(slice.getExternal()));
|
||||
}
|
||||
|
||||
if (!slice.isObject() || !slice.hasKey(key)) {
|
||||
|
@ -495,7 +495,7 @@ std::string VelocyPackHelper::getStringValue(VPackSlice const& slice,
|
|||
std::string VelocyPackHelper::getStringValue(VPackSlice slice, char const* name,
|
||||
std::string const& defaultValue) {
|
||||
if (slice.isExternal()) {
|
||||
slice = VPackSlice(slice.getExternal());
|
||||
slice = VPackSlice(reinterpret_cast<uint8_t const*>(slice.getExternal()));
|
||||
}
|
||||
TRI_ASSERT(slice.isObject());
|
||||
if (!slice.hasKey(name)) {
|
||||
|
@ -514,7 +514,7 @@ std::string VelocyPackHelper::getStringValue(VPackSlice slice, char const* name,
|
|||
std::string VelocyPackHelper::getStringValue(VPackSlice slice, std::string const& name,
|
||||
std::string const& defaultValue) {
|
||||
if (slice.isExternal()) {
|
||||
slice = VPackSlice(slice.getExternal());
|
||||
slice = VPackSlice(reinterpret_cast<uint8_t const*>(slice.getExternal()));
|
||||
}
|
||||
TRI_ASSERT(slice.isObject());
|
||||
if (!slice.hasKey(name)) {
|
||||
|
|
|
@ -213,7 +213,7 @@ void LogAppender::log(LogMessage* message) {
|
|||
|
||||
// otherwise use the general topic
|
||||
if (!shown) {
|
||||
shown = output(LogTopic::MAX_LOG_TOPICS);
|
||||
output(LogTopic::MAX_LOG_TOPICS);
|
||||
}
|
||||
|
||||
for (auto const& logger : _loggers) {
|
||||
|
|
|
@ -404,7 +404,7 @@ class RandomDeviceWin32 : public RandomDevice {
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t random() {
|
||||
uint32_t random() override {
|
||||
if (pos >= N) {
|
||||
fillBuffer();
|
||||
}
|
||||
|
|
|
@ -747,7 +747,7 @@ VPackSlice HttpRequest::payload(VPackOptions const* options) {
|
|||
validationOptions.disallowCustom = true;
|
||||
VPackValidator validator(&validationOptions);
|
||||
validator.validate(_body.c_str(), _body.length());
|
||||
return VPackSlice(_body.c_str());
|
||||
return VPackSlice(reinterpret_cast<uint8_t const*>(_body.c_str()));
|
||||
}
|
||||
return VPackSlice::noneSlice();
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ VPackSlice VstRequest::payload(VPackOptions const* options) {
|
|||
// will throw on error
|
||||
_validatedPayload = validator.validate(vpack.data(), vpack.length());
|
||||
}
|
||||
return VPackSlice(vpack.data());
|
||||
return VPackSlice(reinterpret_cast<uint8_t const*>(vpack.data()));
|
||||
}
|
||||
}
|
||||
return VPackSlice::noneSlice(); // no body
|
||||
|
|
|
@ -238,7 +238,7 @@ asio_ns::ssl::context SslServerFeature::createSslContext() const {
|
|||
LOG_TOPIC("cdaf2", TRACE, arangodb::Logger::SSL)
|
||||
<< "trying to load CA certificates from '" << _cafile << "'";
|
||||
|
||||
int res = SSL_CTX_load_verify_locations(nativeContext, _cafile.c_str(), nullptr);
|
||||
res = SSL_CTX_load_verify_locations(nativeContext, _cafile.c_str(), nullptr);
|
||||
|
||||
if (res == 0) {
|
||||
LOG_TOPIC("30289", ERR, arangodb::Logger::SSL)
|
||||
|
|
|
@ -107,10 +107,10 @@ std::string const& ScriptLoader::findScript(std::string const& name) {
|
|||
|
||||
MUTEX_LOCKER(mutexLocker, _lock);
|
||||
|
||||
std::map<std::string, std::string>::iterator i = _scripts.find(name);
|
||||
auto it = _scripts.find(name);
|
||||
|
||||
if (i != _scripts.end()) {
|
||||
return i->second;
|
||||
if (it != _scripts.end()) {
|
||||
return it->second;
|
||||
}
|
||||
|
||||
if (!_directory.empty()) {
|
||||
|
|
|
@ -1050,7 +1050,7 @@ void JS_Download(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
validationOptions.disallowCustom = true;
|
||||
VPackValidator validator(&validationOptions);
|
||||
validator.validate(sb.data(), sb.length()); // throws on error
|
||||
json.assign(VPackSlice(sb.data()).toJson());
|
||||
json.assign(VPackSlice(reinterpret_cast<uint8_t const*>(sb.data())).toJson());
|
||||
body = arangodb::velocypack::StringRef(json);
|
||||
}
|
||||
|
||||
|
@ -2650,7 +2650,7 @@ static void JS_CopyFile(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
if (destinationIsDirectory) {
|
||||
char const* file = strrchr(source.c_str(), TRI_DIR_SEPARATOR_CHAR);
|
||||
if (file == nullptr) {
|
||||
if (destination[destination.length()] == TRI_DIR_SEPARATOR_CHAR) {
|
||||
if (!destination.empty() && destination.back() != TRI_DIR_SEPARATOR_CHAR) {
|
||||
destination += TRI_DIR_SEPARATOR_CHAR;
|
||||
}
|
||||
destination += source;
|
||||
|
@ -4686,7 +4686,7 @@ static void JS_VPackToV8(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
|
||||
validator.validate(value.c_str(), value.size(), false);
|
||||
|
||||
VPackSlice slice(value.c_str());
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(value.data()));
|
||||
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, slice);
|
||||
TRI_V8_RETURN(result);
|
||||
} else if (args[0]->IsObject() && V8Buffer::hasInstance(isolate, args[0])) {
|
||||
|
@ -4696,7 +4696,7 @@ static void JS_VPackToV8(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
|
||||
validator.validate(data, size, false);
|
||||
|
||||
VPackSlice slice(data);
|
||||
VPackSlice slice(reinterpret_cast<uint8_t const*>(data));
|
||||
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, slice);
|
||||
TRI_V8_RETURN(result);
|
||||
} else {
|
||||
|
|
|
@ -232,7 +232,7 @@ v8::Handle<v8::Value> TRI_VPackToV8(v8::Isolate* isolate, VPackSlice const& slic
|
|||
}
|
||||
case VPackValueType::External: {
|
||||
// resolve external
|
||||
return TRI_VPackToV8(isolate, VPackSlice(slice.getExternal()), options, base);
|
||||
return TRI_VPackToV8(isolate, VPackSlice(reinterpret_cast<uint8_t const*>(slice.getExternal())), options, base);
|
||||
}
|
||||
case VPackValueType::Custom: {
|
||||
if (options == nullptr || options->customTypeHandler == nullptr || base == nullptr) {
|
||||
|
|
Loading…
Reference in New Issue