mirror of https://gitee.com/bigwinds/arangodb
changed some include headers around
This commit is contained in:
parent
b6a1684605
commit
8b599b5274
|
@ -34,9 +34,8 @@
|
||||||
#include "Basics/Exceptions.h"
|
#include "Basics/Exceptions.h"
|
||||||
#include "Basics/json.h"
|
#include "Basics/json.h"
|
||||||
#include "Basics/JsonHelper.h"
|
#include "Basics/JsonHelper.h"
|
||||||
#include "Indexes/HashIndex.h"
|
|
||||||
#include "Indexes/Index.h"
|
#include "Indexes/Index.h"
|
||||||
#include "Indexes/SkiplistIndex.h"
|
#include "Indexes/PathBasedIndex.h"
|
||||||
|
|
||||||
namespace triagens {
|
namespace triagens {
|
||||||
namespace aql {
|
namespace aql {
|
||||||
|
@ -67,15 +66,11 @@ namespace triagens {
|
||||||
if (type == triagens::arango::Index::TRI_IDX_TYPE_PRIMARY_INDEX) {
|
if (type == triagens::arango::Index::TRI_IDX_TYPE_PRIMARY_INDEX) {
|
||||||
unique = true;
|
unique = true;
|
||||||
}
|
}
|
||||||
else if (type == triagens::arango::Index::TRI_IDX_TYPE_HASH_INDEX) {
|
else if (type == triagens::arango::Index::TRI_IDX_TYPE_HASH_INDEX ||
|
||||||
auto hashIndex = static_cast<triagens::arango::HashIndex const*>(idx);
|
type == triagens::arango::Index::TRI_IDX_TYPE_SKIPLIST_INDEX) {
|
||||||
sparse = hashIndex->sparse();
|
auto pathBasedIndex = static_cast<triagens::arango::PathBasedIndex const*>(idx);
|
||||||
unique = hashIndex->unique();
|
sparse = pathBasedIndex->sparse();
|
||||||
}
|
unique = pathBasedIndex->unique();
|
||||||
else if (type == triagens::arango::Index::TRI_IDX_TYPE_SKIPLIST_INDEX) {
|
|
||||||
auto skiplistIndex = static_cast<triagens::arango::SkiplistIndex const*>(idx);
|
|
||||||
sparse = skiplistIndex->sparse();
|
|
||||||
unique = skiplistIndex->unique();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "Aql/Collection.h"
|
#include "Aql/Collection.h"
|
||||||
#include "Aql/ExecutionBlock.h"
|
#include "Aql/ExecutionBlock.h"
|
||||||
#include "Aql/ExecutionNode.h"
|
#include "Aql/ExecutionNode.h"
|
||||||
|
#include "Indexes/SkiplistIndex.h"
|
||||||
#include "Utils/AqlTransaction.h"
|
#include "Utils/AqlTransaction.h"
|
||||||
#include "VocBase/shaped-json.h"
|
#include "VocBase/shaped-json.h"
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "Aql/AstNode.h"
|
#include "Aql/AstNode.h"
|
||||||
#include "Basics/JsonHelper.h"
|
#include "Basics/JsonHelper.h"
|
||||||
#include "Basics/json-utilities.h"
|
#include "Basics/json-utilities.h"
|
||||||
|
#include "IndexOperators/index-operator.h"
|
||||||
|
|
||||||
class VocShaper;
|
class VocShaper;
|
||||||
|
|
||||||
|
|
|
@ -203,7 +203,7 @@ HashIndex::HashIndex (TRI_idx_iid_t iid,
|
||||||
indexBuckets = collection->_info._indexBuckets;
|
indexBuckets = collection->_info._indexBuckets;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HashElementFunc> func(new HashElementFunc(numPaths()));
|
std::unique_ptr<HashElementFunc> func(new HashElementFunc(_paths.size()));
|
||||||
|
|
||||||
if (unique) {
|
if (unique) {
|
||||||
std::unique_ptr<IsEqualElementElementByKey> compare(new IsEqualElementElementByKey(_paths.size()));
|
std::unique_ptr<IsEqualElementElementByKey> compare(new IsEqualElementElementByKey(_paths.size()));
|
||||||
|
@ -221,7 +221,7 @@ HashIndex::HashIndex (TRI_idx_iid_t iid,
|
||||||
else {
|
else {
|
||||||
_multiArray = nullptr;
|
_multiArray = nullptr;
|
||||||
|
|
||||||
std::unique_ptr<IsEqualElementElementByKey> compare(new IsEqualElementElementByKey(numPaths()));
|
std::unique_ptr<IsEqualElementElementByKey> compare(new IsEqualElementElementByKey(_paths.size()));
|
||||||
|
|
||||||
std::unique_ptr<TRI_HashArrayMulti_t> array(new TRI_HashArrayMulti_t(HashKey,
|
std::unique_ptr<TRI_HashArrayMulti_t> array(new TRI_HashArrayMulti_t(HashKey,
|
||||||
*(func.get()),
|
*(func.get()),
|
||||||
|
@ -494,13 +494,14 @@ int HashIndex::insertUnique (TRI_doc_mptr_t const* doc,
|
||||||
return _uniqueArray->_hashArray->insert(element);
|
return _uniqueArray->_hashArray->insert(element);
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t count = elements.size();
|
size_t const n = elements.size();
|
||||||
for (size_t i = 0; i < count; ++i) {
|
|
||||||
|
for (size_t i = 0; i < n; ++i) {
|
||||||
auto hashElement = elements[i];
|
auto hashElement = elements[i];
|
||||||
res = work(hashElement, isRollback);
|
res = work(hashElement, isRollback);
|
||||||
|
|
||||||
if (res != TRI_ERROR_NO_ERROR) {
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
for (size_t j = i; j < count; ++j) {
|
for (size_t j = i; j < n; ++j) {
|
||||||
// Free all elements that are not yet in the index
|
// Free all elements that are not yet in the index
|
||||||
FreeElement(elements[j]);
|
FreeElement(elements[j]);
|
||||||
}
|
}
|
||||||
|
@ -527,6 +528,7 @@ int HashIndex::batchInsertUnique (std::vector<TRI_doc_mptr_t const*> const* docu
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int res = _uniqueArray->_hashArray->batchInsert(&elements, numThreads);
|
int res = _uniqueArray->_hashArray->batchInsert(&elements, numThreads);
|
||||||
|
|
||||||
if (res != TRI_ERROR_NO_ERROR) {
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
|
@ -545,6 +547,12 @@ int HashIndex::insertMulti (TRI_doc_mptr_t const* doc,
|
||||||
|
|
||||||
std::vector<TRI_index_element_t*> elements;
|
std::vector<TRI_index_element_t*> elements;
|
||||||
int res = fillElement(elements, doc);
|
int res = fillElement(elements, doc);
|
||||||
|
|
||||||
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
|
for (auto& hashElement : elements) {
|
||||||
|
FreeElement(hashElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto work = [this] (TRI_index_element_t* element, bool isRollback) -> int {
|
auto work = [this] (TRI_index_element_t* element, bool isRollback) -> int {
|
||||||
TRI_IF_FAILURE("InsertHashIndex") {
|
TRI_IF_FAILURE("InsertHashIndex") {
|
||||||
|
@ -564,12 +572,14 @@ int HashIndex::insertMulti (TRI_doc_mptr_t const* doc,
|
||||||
return TRI_ERROR_NO_ERROR;
|
return TRI_ERROR_NO_ERROR;
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t const count = elements.size();
|
size_t const n = elements.size();
|
||||||
for (size_t i = 0; i < count; ++i) {
|
|
||||||
|
for (size_t i = 0; i < n; ++i) {
|
||||||
auto hashElement = elements[i];
|
auto hashElement = elements[i];
|
||||||
res = work(hashElement, isRollback);
|
res = work(hashElement, isRollback);
|
||||||
|
|
||||||
if (res != TRI_ERROR_NO_ERROR) {
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
for (size_t j = i; j < count; ++j) {
|
for (size_t j = i; j < n; ++j) {
|
||||||
// Free all elements that are not yet in the index
|
// Free all elements that are not yet in the index
|
||||||
FreeElement(elements[j]);
|
FreeElement(elements[j]);
|
||||||
}
|
}
|
||||||
|
@ -643,29 +653,36 @@ int HashIndex::removeUnique (TRI_doc_mptr_t const* doc, bool isRollback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int HashIndex::removeMultiElement (TRI_index_element_t* element, bool isRollback) {
|
int HashIndex::removeMultiElement (TRI_index_element_t* element, bool isRollback) {
|
||||||
TRI_IF_FAILURE("RemoveHashIndex") {
|
TRI_IF_FAILURE("RemoveHashIndex") {
|
||||||
return TRI_ERROR_DEBUG;
|
return TRI_ERROR_DEBUG;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_index_element_t* old = _multiArray->_hashArray->remove(element);
|
TRI_index_element_t* old = _multiArray->_hashArray->remove(element);
|
||||||
|
|
||||||
if (old == nullptr) {
|
if (old == nullptr) {
|
||||||
// not found
|
// not found
|
||||||
if (isRollback) { // ignore in this case, because it can happen
|
if (isRollback) { // ignore in this case, because it can happen
|
||||||
return TRI_ERROR_NO_ERROR;
|
return TRI_ERROR_NO_ERROR;
|
||||||
}
|
|
||||||
else {
|
|
||||||
return TRI_ERROR_INTERNAL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
FreeElement(old);
|
else {
|
||||||
return TRI_ERROR_NO_ERROR;
|
return TRI_ERROR_INTERNAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FreeElement(old);
|
||||||
|
|
||||||
|
return TRI_ERROR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
int HashIndex::removeMulti (TRI_doc_mptr_t const* doc, bool isRollback) {
|
int HashIndex::removeMulti (TRI_doc_mptr_t const* doc, bool isRollback) {
|
||||||
std::vector<TRI_index_element_t*> elements;
|
std::vector<TRI_index_element_t*> elements;
|
||||||
int res = fillElement(elements, doc);
|
int res = fillElement(elements, doc);
|
||||||
|
|
||||||
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
|
for (auto& hashElement : elements) {
|
||||||
|
FreeElement(hashElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& hashElement : elements) {
|
for (auto& hashElement : elements) {
|
||||||
res = removeMultiElement(hashElement, isRollback);
|
res = removeMultiElement(hashElement, isRollback);
|
||||||
FreeElement(hashElement);
|
FreeElement(hashElement);
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "Basics/string-buffer.h"
|
#include "Basics/string-buffer.h"
|
||||||
#include "Indexes/FulltextIndex.h"
|
#include "Indexes/FulltextIndex.h"
|
||||||
#include "Indexes/GeoIndex2.h"
|
#include "Indexes/GeoIndex2.h"
|
||||||
|
#include "Indexes/HashIndex.h"
|
||||||
#include "Indexes/SkiplistIndex.h"
|
#include "Indexes/SkiplistIndex.h"
|
||||||
#include "FulltextIndex/fulltext-index.h"
|
#include "FulltextIndex/fulltext-index.h"
|
||||||
#include "FulltextIndex/fulltext-result.h"
|
#include "FulltextIndex/fulltext-result.h"
|
||||||
|
|
|
@ -323,11 +323,11 @@ namespace triagens {
|
||||||
uint64_t i = hash % n;
|
uint64_t i = hash % n;
|
||||||
uint64_t k = i;
|
uint64_t k = i;
|
||||||
|
|
||||||
for (; i < n && b._table[i] != nullptr &&
|
for (; i < n && b._table[i] != nullptr &&
|
||||||
! _isEqualElementElementByKey(element, b._table[i]); ++i);
|
! _isEqualElementElementByKey(element, b._table[i]); ++i);
|
||||||
if (i == n) {
|
if (i == n) {
|
||||||
for (i = 0; i < k && b._table[i] != nullptr &&
|
for (i = 0; i < k && b._table[i] != nullptr &&
|
||||||
! _isEqualElementElementByKey(element, b._table[i]); ++i);
|
! _isEqualElementElementByKey(element, b._table[i]); ++i);
|
||||||
}
|
}
|
||||||
|
|
||||||
Element* arrayElement = b._table[i];
|
Element* arrayElement = b._table[i];
|
||||||
|
@ -337,7 +337,6 @@ namespace triagens {
|
||||||
}
|
}
|
||||||
|
|
||||||
b._table[i] = element;
|
b._table[i] = element;
|
||||||
TRI_ASSERT(b._table[i] != nullptr);
|
|
||||||
b._nrUsed++;
|
b._nrUsed++;
|
||||||
|
|
||||||
return TRI_ERROR_NO_ERROR;
|
return TRI_ERROR_NO_ERROR;
|
||||||
|
|
Loading…
Reference in New Issue