1
0
Fork 0

moved functionality

This commit is contained in:
jsteemann 2016-08-05 16:23:22 +02:00
parent 6b9a4a2e7f
commit 3733d64dda
9 changed files with 92 additions and 190 deletions

View File

@ -42,6 +42,7 @@
#include "Indexes/RocksDBIndex.h" #include "Indexes/RocksDBIndex.h"
#endif #endif
#include <velocypack/Collection.h>
#include <velocypack/Iterator.h> #include <velocypack/Iterator.h>
#include <velocypack/velocypack-aliases.h> #include <velocypack/velocypack-aliases.h>
@ -49,6 +50,8 @@ using namespace arangodb;
using namespace arangodb::basics; using namespace arangodb::basics;
namespace { namespace {
/// @brief collection meta info filename
static constexpr char const* parametersFilename() { return "parameter.json"; }
/// @brief extract the numeric part from a filename /// @brief extract the numeric part from a filename
/// the filename must look like this: /.*type-abc\.ending$/, where abc is /// the filename must look like this: /.*type-abc\.ending$/, where abc is
@ -329,6 +332,61 @@ void MMFilesEngine::getDatabases(arangodb::velocypack::Builder& result) {
result.close(); result.close();
} }
// fills the provided builder with information about the collection
void MMFilesEngine::getCollectionInfo(TRI_vocbase_t* vocbase, TRI_voc_cid_t id,
arangodb::velocypack::Builder& builder,
bool includeIndexes, TRI_voc_tick_t maxTick) {
std::string const path = collectionDirectory(vocbase->id(), id);
std::shared_ptr<VPackBuilder> fileInfoBuilder =
arangodb::basics::VelocyPackHelper::velocyPackFromFile(basics::FileUtils::buildFilename(path, parametersFilename()));
builder.add("parameters", fileInfoBuilder->slice());
if (includeIndexes) {
builder.add("indexes", VPackValue(VPackValueType::Array));
std::vector<std::string> files = TRI_FilesDirectory(path.c_str());
// sort by index id
std::sort(files.begin(), files.end(), DatafileIdStringComparator());
for (auto const& file : files) {
if (StringUtils::isPrefix(file, "index-") &&
StringUtils::isSuffix(file, ".json")) {
std::string const filename = basics::FileUtils::buildFilename(path, file);
std::shared_ptr<VPackBuilder> indexVPack =
arangodb::basics::VelocyPackHelper::velocyPackFromFile(filename);
VPackSlice const indexSlice = indexVPack->slice();
VPackSlice const id = indexSlice.get("id");
if (id.isNumber()) {
uint64_t iid = id.getNumericValue<uint64_t>();
if (iid <= static_cast<uint64_t>(maxTick)) {
// convert "id" to string
VPackBuilder toMerge;
{
VPackObjectBuilder b(&toMerge);
toMerge.add("id", VPackValue(std::to_string(iid)));
}
VPackBuilder mergedBuilder =
VPackCollection::merge(indexSlice, toMerge.slice(), false);
builder.add(mergedBuilder.slice());
}
} else if (id.isString()) {
std::string data = id.copyString();
uint64_t iid = StringUtils::uint64(data);
if (iid <= static_cast<uint64_t>(maxTick)) {
builder.add(indexSlice);
}
}
}
}
builder.close();
}
}
// fill the Builder object with an array of collections (and their corresponding // fill the Builder object with an array of collections (and their corresponding
// indexes) that were detected by the storage engine. called at server start only // indexes) that were detected by the storage engine. called at server start only
int MMFilesEngine::getCollectionsAndIndexes(TRI_vocbase_t* vocbase, int MMFilesEngine::getCollectionsAndIndexes(TRI_vocbase_t* vocbase,
@ -1004,7 +1062,7 @@ std::string MMFilesEngine::databaseDirectory(TRI_voc_tick_t id) const {
} }
std::string MMFilesEngine::databaseParametersFilename(TRI_voc_tick_t id) const { std::string MMFilesEngine::databaseParametersFilename(TRI_voc_tick_t id) const {
return basics::FileUtils::buildFilename(databaseDirectory(id), TRI_VOC_PARAMETER_FILE); return basics::FileUtils::buildFilename(databaseDirectory(id), parametersFilename());
} }
std::string MMFilesEngine::collectionDirectory(TRI_voc_tick_t databaseId, TRI_voc_cid_t id) const { std::string MMFilesEngine::collectionDirectory(TRI_voc_tick_t databaseId, TRI_voc_cid_t id) const {
@ -1022,6 +1080,10 @@ std::string MMFilesEngine::collectionDirectory(TRI_voc_tick_t databaseId, TRI_vo
return (*it2).second; return (*it2).second;
} }
std::string MMFilesEngine::collectionParametersFilename(TRI_voc_tick_t databaseId, TRI_voc_cid_t id) const {
return basics::FileUtils::buildFilename(collectionDirectory(databaseId, id), parametersFilename());
}
/// @brief open an existing database. internal function /// @brief open an existing database. internal function
TRI_vocbase_t* MMFilesEngine::openExistingDatabase(TRI_voc_tick_t id, std::string const& name, TRI_vocbase_t* MMFilesEngine::openExistingDatabase(TRI_voc_tick_t id, std::string const& name,
bool wasCleanShutdown, bool isUpgrade) { bool wasCleanShutdown, bool isUpgrade) {

View File

@ -75,6 +75,11 @@ class MMFilesEngine final : public StorageEngine {
// fully created (see "createDatabase" below). called at server start only // fully created (see "createDatabase" below). called at server start only
void getDatabases(arangodb::velocypack::Builder& result) override; void getDatabases(arangodb::velocypack::Builder& result) override;
// fills the provided builder with information about the collection
void getCollectionInfo(TRI_vocbase_t* vocbase, TRI_voc_cid_t cid,
arangodb::velocypack::Builder& result,
bool includeIndexes, TRI_voc_tick_t maxTick) override;
// fill the Builder object with an array of collections (and their corresponding // fill the Builder object with an array of collections (and their corresponding
// indexes) that were detected by the storage engine. called at server start separately // indexes) that were detected by the storage engine. called at server start separately
// for each database // for each database
@ -228,6 +233,7 @@ class MMFilesEngine final : public StorageEngine {
std::string databaseDirectory(TRI_voc_tick_t id) const; std::string databaseDirectory(TRI_voc_tick_t id) const;
std::string databaseParametersFilename(TRI_voc_tick_t id) const; std::string databaseParametersFilename(TRI_voc_tick_t id) const;
std::string collectionDirectory(TRI_voc_tick_t id, TRI_voc_cid_t cid) const; std::string collectionDirectory(TRI_voc_tick_t id, TRI_voc_cid_t cid) const;
std::string collectionParametersFilename(TRI_voc_tick_t id, TRI_voc_cid_t cid) const;
int openDatabases(); int openDatabases();

View File

@ -56,6 +56,12 @@ void OtherEngine::prepare() {
void OtherEngine::getDatabases(arangodb::velocypack::Builder& result) { void OtherEngine::getDatabases(arangodb::velocypack::Builder& result) {
} }
// fills the provided builder with information about the collection
void OtherEngine::getCollectionInfo(TRI_vocbase_t* vocbase, TRI_voc_cid_t cid,
arangodb::velocypack::Builder& result,
bool includeIndexes, TRI_voc_tick_t maxTick) {
}
// fill the Builder object with an array of collections (and their corresponding // fill the Builder object with an array of collections (and their corresponding
// indexes) that were detected by the storage engine. called at server start only // indexes) that were detected by the storage engine. called at server start only
int OtherEngine::getCollectionsAndIndexes(TRI_vocbase_t* vocbase, arangodb::velocypack::Builder& result, bool, bool) { int OtherEngine::getCollectionsAndIndexes(TRI_vocbase_t* vocbase, arangodb::velocypack::Builder& result, bool, bool) {

View File

@ -58,6 +58,11 @@ class OtherEngine final : public StorageEngine {
// fully created (see "createDatabase" below). called at server start only // fully created (see "createDatabase" below). called at server start only
void getDatabases(arangodb::velocypack::Builder& result) override; void getDatabases(arangodb::velocypack::Builder& result) override;
// fills the provided builder with information about the collection
void getCollectionInfo(TRI_vocbase_t* vocbase, TRI_voc_cid_t cid,
arangodb::velocypack::Builder& result,
bool includeIndexes, TRI_voc_tick_t maxTick) override;
// fill the Builder object with an array of collections (and their corresponding // fill the Builder object with an array of collections (and their corresponding
// indexes) that were detected by the storage engine. called at server start only // indexes) that were detected by the storage engine. called at server start only
int getCollectionsAndIndexes(TRI_vocbase_t* vocbase, arangodb::velocypack::Builder& result, bool, bool) override; int getCollectionsAndIndexes(TRI_vocbase_t* vocbase, arangodb::velocypack::Builder& result, bool, bool) override;

View File

@ -72,6 +72,11 @@ class StorageEngine : public application_features::ApplicationFeature {
// fully created (see "createDatabase" below). called at server start only // fully created (see "createDatabase" below). called at server start only
virtual void getDatabases(arangodb::velocypack::Builder& result) = 0; virtual void getDatabases(arangodb::velocypack::Builder& result) = 0;
// fills the provided builder with information about the collection
virtual void getCollectionInfo(TRI_vocbase_t* vocbase, TRI_voc_cid_t cid,
arangodb::velocypack::Builder& result,
bool includeIndexes, TRI_voc_tick_t maxTick) = 0;
// fill the Builder object with an array of collections (and their corresponding // fill the Builder object with an array of collections (and their corresponding
// indexes) that were detected by the storage engine. called at server start separately // indexes) that were detected by the storage engine. called at server start separately
// for each database // for each database

View File

@ -79,6 +79,9 @@
#include <velocypack/Value.h> #include <velocypack/Value.h>
#include <velocypack/velocypack-aliases.h> #include <velocypack/velocypack-aliases.h>
// TODO: remove this
#define TRI_VOC_PARAMETER_FILE "parameter.json"
using namespace arangodb; using namespace arangodb;
using namespace arangodb::basics; using namespace arangodb::basics;

View File

@ -29,118 +29,58 @@
#include <velocypack/Slice.h> #include <velocypack/Slice.h>
#include <velocypack/velocypack-aliases.h> #include <velocypack/velocypack-aliases.h>
////////////////////////////////////////////////////////////////////////////////
/// @brief forward declarations /// @brief forward declarations
////////////////////////////////////////////////////////////////////////////////
struct TRI_doc_mptr_t; struct TRI_doc_mptr_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief collection meta info filename
////////////////////////////////////////////////////////////////////////////////
#define TRI_VOC_PARAMETER_FILE "parameter.json"
////////////////////////////////////////////////////////////////////////////////
/// @brief tick type (56bit) /// @brief tick type (56bit)
////////////////////////////////////////////////////////////////////////////////
typedef uint64_t TRI_voc_tick_t; typedef uint64_t TRI_voc_tick_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief collection identifier type /// @brief collection identifier type
////////////////////////////////////////////////////////////////////////////////
typedef uint64_t TRI_voc_cid_t; typedef uint64_t TRI_voc_cid_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief datafile identifier type /// @brief datafile identifier type
////////////////////////////////////////////////////////////////////////////////
typedef uint64_t TRI_voc_fid_t; typedef uint64_t TRI_voc_fid_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief revision identifier type /// @brief revision identifier type
////////////////////////////////////////////////////////////////////////////////
typedef uint64_t TRI_voc_rid_t; typedef uint64_t TRI_voc_rid_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief transaction identifier type /// @brief transaction identifier type
////////////////////////////////////////////////////////////////////////////////
typedef uint64_t TRI_voc_tid_t; typedef uint64_t TRI_voc_tid_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief size type /// @brief size type
////////////////////////////////////////////////////////////////////////////////
typedef uint32_t TRI_voc_size_t; typedef uint32_t TRI_voc_size_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief signed size type /// @brief signed size type
////////////////////////////////////////////////////////////////////////////////
typedef int32_t TRI_voc_ssize_t; typedef int32_t TRI_voc_ssize_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief index identifier /// @brief index identifier
////////////////////////////////////////////////////////////////////////////////
typedef TRI_voc_tick_t TRI_idx_iid_t; typedef TRI_voc_tick_t TRI_idx_iid_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief crc type /// @brief crc type
////////////////////////////////////////////////////////////////////////////////
typedef uint32_t TRI_voc_crc_t; typedef uint32_t TRI_voc_crc_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief collection storage type /// @brief collection storage type
////////////////////////////////////////////////////////////////////////////////
typedef uint32_t TRI_col_type_t; typedef uint32_t TRI_col_type_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief server id type /// @brief server id type
////////////////////////////////////////////////////////////////////////////////
typedef uint64_t TRI_server_id_t; typedef uint64_t TRI_server_id_t;
////////////////////////////////////////////////////////////////////////////////
/// @brief Convert a revision ID to a string /// @brief Convert a revision ID to a string
////////////////////////////////////////////////////////////////////////////////
std::string TRI_RidToString(TRI_voc_rid_t rid); std::string TRI_RidToString(TRI_voc_rid_t rid);
////////////////////////////////////////////////////////////////////////////////
/// @brief Convert a string into a revision ID, no check variant /// @brief Convert a string into a revision ID, no check variant
////////////////////////////////////////////////////////////////////////////////
TRI_voc_rid_t TRI_StringToRid(std::string const& ridStr, bool& isOld); TRI_voc_rid_t TRI_StringToRid(std::string const& ridStr, bool& isOld);
////////////////////////////////////////////////////////////////////////////////
/// @brief Convert a string into a revision ID, no check variant /// @brief Convert a string into a revision ID, no check variant
////////////////////////////////////////////////////////////////////////////////
TRI_voc_rid_t TRI_StringToRid(char const* p, size_t len, bool& isOld); TRI_voc_rid_t TRI_StringToRid(char const* p, size_t len, bool& isOld);
////////////////////////////////////////////////////////////////////////////////
/// @brief Convert a string into a revision ID, returns 0 if format invalid /// @brief Convert a string into a revision ID, returns 0 if format invalid
////////////////////////////////////////////////////////////////////////////////
TRI_voc_rid_t TRI_StringToRidWithCheck(std::string const& ridStr, bool& isOld); TRI_voc_rid_t TRI_StringToRidWithCheck(std::string const& ridStr, bool& isOld);
////////////////////////////////////////////////////////////////////////////////
/// @brief Convert a string into a revision ID, returns 0 if format invalid /// @brief Convert a string into a revision ID, returns 0 if format invalid
////////////////////////////////////////////////////////////////////////////////
TRI_voc_rid_t TRI_StringToRidWithCheck(char const* p, size_t len, bool& isOld); TRI_voc_rid_t TRI_StringToRidWithCheck(char const* p, size_t len, bool& isOld);
////////////////////////////////////////////////////////////////////////////////
/// @brief enum for write operations /// @brief enum for write operations
////////////////////////////////////////////////////////////////////////////////
enum TRI_voc_document_operation_e : uint8_t { enum TRI_voc_document_operation_e : uint8_t {
TRI_VOC_DOCUMENT_OPERATION_UNKNOWN = 0, TRI_VOC_DOCUMENT_OPERATION_UNKNOWN = 0,
TRI_VOC_DOCUMENT_OPERATION_INSERT, TRI_VOC_DOCUMENT_OPERATION_INSERT,
@ -149,32 +89,23 @@ enum TRI_voc_document_operation_e : uint8_t {
TRI_VOC_DOCUMENT_OPERATION_REMOVE TRI_VOC_DOCUMENT_OPERATION_REMOVE
}; };
////////////////////////////////////////////////////////////////////////////////
/// @brief server operation modes /// @brief server operation modes
////////////////////////////////////////////////////////////////////////////////
enum TRI_vocbase_operationmode_e { enum TRI_vocbase_operationmode_e {
TRI_VOCBASE_MODE_NORMAL = 1, // CRUD is allowed TRI_VOCBASE_MODE_NORMAL = 1, // CRUD is allowed
TRI_VOCBASE_MODE_NO_CREATE = 2, // C & U not allowed RD allowed TRI_VOCBASE_MODE_NO_CREATE = 2, // C & U not allowed RD allowed
}; };
////////////////////////////////////////////////////////////////////////////////
/// @brief edge direction /// @brief edge direction
////////////////////////////////////////////////////////////////////////////////
enum TRI_edge_direction_e { enum TRI_edge_direction_e {
TRI_EDGE_ANY = 0, // can only be used for searching TRI_EDGE_ANY = 0, // can only be used for searching
TRI_EDGE_IN = 1, TRI_EDGE_IN = 1,
TRI_EDGE_OUT = 2 TRI_EDGE_OUT = 2
}; };
////////////////////////////////////////////////////////////////////////////////
/// @brief velocypack sub-object (for indexes, as part of TRI_index_element_t, /// @brief velocypack sub-object (for indexes, as part of TRI_index_element_t,
/// if the last byte in data[] is 0, then it is an offset into the VelocyPack /// if the last byte in data[] is 0, then it is an offset into the VelocyPack
/// data in the datafile or WAL file. If the last byte in data[] is 1, then /// data in the datafile or WAL file. If the last byte in data[] is 1, then
/// value.data contains the actual VelocyPack data in place. /// value.data contains the actual VelocyPack data in place.
////////////////////////////////////////////////////////////////////////////////
struct TRI_vpack_sub_t { struct TRI_vpack_sub_t {
union { union {
uint8_t data[12]; uint8_t data[12];
@ -206,17 +137,11 @@ struct TRI_vpack_sub_t {
VPackSlice slice(TRI_doc_mptr_t const* mptr) const; VPackSlice slice(TRI_doc_mptr_t const* mptr) const;
}; };
////////////////////////////////////////////////////////////////////////////////
/// @brief fill a TRI_vpack_sub_t structure with a subvalue /// @brief fill a TRI_vpack_sub_t structure with a subvalue
////////////////////////////////////////////////////////////////////////////////
void TRI_FillVPackSub(TRI_vpack_sub_t* sub, void TRI_FillVPackSub(TRI_vpack_sub_t* sub,
VPackSlice const base, VPackSlice const value) noexcept; VPackSlice const base, VPackSlice const value) noexcept;
////////////////////////////////////////////////////////////////////////////////
/// @brief Hash and Equal comparison for a vector of VPackSlice /// @brief Hash and Equal comparison for a vector of VPackSlice
////////////////////////////////////////////////////////////////////////////////
namespace std { namespace std {
template <> template <>

View File

@ -803,37 +803,6 @@ int TRI_vocbase_t::dropCollectionWorker(TRI_vocbase_col_t* collection,
return TRI_set_errno(TRI_ERROR_INTERNAL); return TRI_set_errno(TRI_ERROR_INTERNAL);
} }
////////////////////////////////////////////////////////////////////////////////
/// @brief extract the numeric part from a filename
/// the filename must look like this: /.*type-abc\.ending$/, where abc is
/// a number, and type and ending are arbitrary letters
////////////////////////////////////////////////////////////////////////////////
static uint64_t GetNumericFilenamePart(char const* filename) {
char const* pos1 = strrchr(filename, '.');
if (pos1 == nullptr) {
return 0;
}
char const* pos2 = strrchr(filename, '-');
if (pos2 == nullptr || pos2 > pos1) {
return 0;
}
return StringUtils::uint64(pos2 + 1, pos1 - pos2 - 1);
}
/// @brief compare two filenames, based on the numeric part contained in
/// the filename. this is used to sort datafile filenames on startup
static bool FilenameStringComparator(std::string const& lhs,
std::string const& rhs) {
uint64_t const numLeft = GetNumericFilenamePart(lhs.c_str());
uint64_t const numRight = GetNumericFilenamePart(rhs.c_str());
return numLeft < numRight;
}
/// @brief try to fetch the collection status under a lock /// @brief try to fetch the collection status under a lock
/// the boolean value will be set to true if the lock could be acquired /// the boolean value will be set to true if the lock could be acquired
/// if the boolean is false, the return value is always TRI_VOC_COL_STATUS_CORRUPTED /// if the boolean is false, the return value is always TRI_VOC_COL_STATUS_CORRUPTED
@ -850,17 +819,9 @@ TRI_vocbase_col_status_e TRI_vocbase_col_t::tryFetchStatus(bool& found) {
void TRI_vocbase_col_t::toVelocyPack(VPackBuilder& builder, bool includeIndexes, void TRI_vocbase_col_t::toVelocyPack(VPackBuilder& builder, bool includeIndexes,
TRI_voc_tick_t maxTick) { TRI_voc_tick_t maxTick) {
TRI_ASSERT(!builder.isClosed()); TRI_ASSERT(!builder.isClosed());
std::string const filename = basics::FileUtils::buildFilename(path(), TRI_VOC_PARAMETER_FILE);
std::shared_ptr<VPackBuilder> fileInfoBuilder = StorageEngine* engine = EngineSelectorFeature::ENGINE;
arangodb::basics::VelocyPackHelper::velocyPackFromFile(filename); engine->getCollectionInfo(_vocbase, _cid, builder, includeIndexes, maxTick);
builder.add("parameters", fileInfoBuilder->slice());
if (includeIndexes) {
builder.add("indexes", VPackValue(VPackValueType::Array));
toVelocyPackIndexes(builder, maxTick);
builder.close();
}
} }
std::shared_ptr<VPackBuilder> TRI_vocbase_col_t::toVelocyPack( std::shared_ptr<VPackBuilder> TRI_vocbase_col_t::toVelocyPack(
@ -874,59 +835,6 @@ std::shared_ptr<VPackBuilder> TRI_vocbase_col_t::toVelocyPack(
return builder; return builder;
} }
void TRI_vocbase_col_t::toVelocyPackIndexes(VPackBuilder& builder,
TRI_voc_tick_t maxTick) {
TRI_ASSERT(!builder.isClosed());
std::vector<std::string> files = TRI_FilesDirectory(path().c_str());
// sort by index id
std::sort(files.begin(), files.end(), FilenameStringComparator);
for (auto const& file : files) {
if (StringUtils::isPrefix(file, "index-") &&
StringUtils::isSuffix(file, ".json")) {
std::string const filename = basics::FileUtils::buildFilename(path(), file);
std::shared_ptr<VPackBuilder> indexVPack =
arangodb::basics::VelocyPackHelper::velocyPackFromFile(filename);
VPackSlice const indexSlice = indexVPack->slice();
VPackSlice const id = indexSlice.get("id");
if (id.isNumber()) {
uint64_t iid = id.getNumericValue<uint64_t>();
if (iid <= static_cast<uint64_t>(maxTick)) {
// convert "id" to string
VPackBuilder toMerge;
{
VPackObjectBuilder b(&toMerge);
char* idString = TRI_StringUInt64(iid);
toMerge.add("id", VPackValue(idString));
}
VPackBuilder mergedBuilder =
VPackCollection::merge(indexSlice, toMerge.slice(), false);
builder.add(mergedBuilder.slice());
}
} else if (id.isString()) {
std::string data = id.copyString();
uint64_t iid = StringUtils::uint64(data);
if (iid <= static_cast<uint64_t>(maxTick)) {
builder.add(indexSlice);
}
}
}
}
}
std::shared_ptr<VPackBuilder> TRI_vocbase_col_t::toVelocyPackIndexes(
TRI_voc_tick_t maxTick) {
auto builder = std::make_shared<VPackBuilder>();
builder->openArray();
toVelocyPackIndexes(*builder, maxTick);
builder->close();
return builder;
}
/// @brief returns a translation of a collection status /// @brief returns a translation of a collection status
char const* TRI_vocbase_col_t::statusString(TRI_vocbase_col_status_e status) { char const* TRI_vocbase_col_t::statusString(TRI_vocbase_col_status_e status) {
switch (status) { switch (status) {

View File

@ -474,28 +474,10 @@ class TRI_vocbase_col_t {
std::shared_ptr<arangodb::velocypack::Builder> toVelocyPack(bool, std::shared_ptr<arangodb::velocypack::Builder> toVelocyPack(bool,
TRI_voc_tick_t); TRI_voc_tick_t);
////////////////////////////////////////////////////////////////////////////// /// @brief transform the information for this collection to velocypack
/// @brief Transform the information for this collection to velocypack
/// The builder has to be an opened Type::Object /// The builder has to be an opened Type::Object
//////////////////////////////////////////////////////////////////////////////
void toVelocyPack(arangodb::velocypack::Builder&, bool, TRI_voc_tick_t); void toVelocyPack(arangodb::velocypack::Builder&, bool, TRI_voc_tick_t);
//////////////////////////////////////////////////////////////////////////////
/// @brief Transform the information for the indexes of this collection to
/// velocypack
//////////////////////////////////////////////////////////////////////////////
std::shared_ptr<arangodb::velocypack::Builder> toVelocyPackIndexes(
TRI_voc_tick_t);
//////////////////////////////////////////////////////////////////////////////
/// @brief Transform the information for this collection to velocypack
/// The builder has to be an opened Type::Array
//////////////////////////////////////////////////////////////////////////////
void toVelocyPackIndexes(arangodb::velocypack::Builder&, TRI_voc_tick_t);
public: public:
TRI_vocbase_t* const _vocbase; TRI_vocbase_t* const _vocbase;
TRI_voc_cid_t const _cid; // local collection identifier TRI_voc_cid_t const _cid; // local collection identifier