mirror of https://gitee.com/bigwinds/arangodb
more cleanup
This commit is contained in:
parent
7ac834587b
commit
508a3c4b42
|
@ -1636,12 +1636,22 @@ std::vector<RangeInfo> IndexRangeBlock::andCombineRangeInfoVecs (std::vector<Ran
|
||||||
std::vector<RangeInfo> const& riv2) const {
|
std::vector<RangeInfo> const& riv2) const {
|
||||||
std::vector<RangeInfo> out;
|
std::vector<RangeInfo> out;
|
||||||
|
|
||||||
std::unordered_set<TRI_json_t const*, triagens::basics::JsonHash, triagens::basics::JsonEqual> cache(
|
std::unordered_set<TRI_json_t*, triagens::basics::JsonHash, triagens::basics::JsonEqual> cache(
|
||||||
16,
|
16,
|
||||||
triagens::basics::JsonHash(),
|
triagens::basics::JsonHash(),
|
||||||
triagens::basics::JsonEqual()
|
triagens::basics::JsonEqual()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
triagens::basics::ScopeGuard guard{
|
||||||
|
[]() -> void { },
|
||||||
|
[&cache]() -> void {
|
||||||
|
// free the JSON values in the cache
|
||||||
|
for (auto& it : cache) {
|
||||||
|
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
for (RangeInfo const& ri1: riv1) {
|
for (RangeInfo const& ri1: riv1) {
|
||||||
for (RangeInfo const& ri2: riv2) {
|
for (RangeInfo const& ri2: riv2) {
|
||||||
RangeInfo x(ri1.clone());
|
RangeInfo x(ri1.clone());
|
||||||
|
@ -1654,11 +1664,22 @@ std::vector<RangeInfo> IndexRangeBlock::andCombineRangeInfoVecs (std::vector<Ran
|
||||||
|
|
||||||
if (x.is1ValueRangeInfo()) {
|
if (x.is1ValueRangeInfo()) {
|
||||||
// de-duplicate
|
// de-duplicate
|
||||||
if (cache.find(x._lowConst.bound().json()) != cache.end()) {
|
auto lowBoundValue = x._lowConst.bound().json();
|
||||||
|
|
||||||
|
if (cache.find(lowBoundValue) != cache.end()) {
|
||||||
|
// already seen the same value
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
cache.emplace(x._lowConst.bound().json());
|
std::unique_ptr<TRI_json_t> copy(TRI_CopyJson(TRI_UNKNOWN_MEM_ZONE, lowBoundValue));
|
||||||
|
|
||||||
|
if (copy == nullptr) {
|
||||||
|
THROW_ARANGO_EXCEPTION(TRI_ERROR_OUT_OF_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// every JSON in the cache is a copy
|
||||||
|
cache.emplace(copy.get());
|
||||||
|
copy.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
out.emplace_back(std::move(x));
|
out.emplace_back(std::move(x));
|
||||||
|
@ -3802,6 +3823,9 @@ int HashedAggregateBlock::getOrSkipSome (size_t atLeast,
|
||||||
returnBlock(cur);
|
returnBlock(cur);
|
||||||
_done = true;
|
_done = true;
|
||||||
|
|
||||||
|
allGroups.clear();
|
||||||
|
groupValues.clear();
|
||||||
|
|
||||||
return TRI_ERROR_NO_ERROR;
|
return TRI_ERROR_NO_ERROR;
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
|
@ -3817,6 +3841,9 @@ int HashedAggregateBlock::getOrSkipSome (size_t atLeast,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allGroups.clear();
|
||||||
|
groupValues.clear();
|
||||||
|
|
||||||
if (! skipping) {
|
if (! skipping) {
|
||||||
TRI_ASSERT(skipped > 0);
|
TRI_ASSERT(skipped > 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue