1
0
Fork 0

bugfixes and leaks fixed.

This commit is contained in:
James 2014-08-28 16:55:18 +02:00
parent 3f646034c8
commit 4b5e42c52a
2 changed files with 33 additions and 51 deletions

View File

@ -463,23 +463,20 @@ class FilterToEnumCollFinder : public WalkerWorker<ExecutionNode> {
auto idx = idxs.at(i);
if (idx->_type == TRI_IDX_TYPE_HASH_INDEX && equality) {
for (size_t j = 0; j < idx->_fields._length; j++) {
auto range = map->find(std::string(idx->_fields._buffer[j]))->second;
rangeInfo.at(0).push_back(range);
//TODO should copy rangeInfo here
auto range = map->find(std::string(idx->_fields._buffer[j]));
rangeInfo.at(0).push_back(range->second);
}
}
if (idx->_type == TRI_IDX_TYPE_SKIPLIST_INDEX) {
size_t j = 0;
auto range = map->find(std::string(idx->_fields._buffer[0]))->second;
//TODO should copy rangeInfo here
rangeInfo.at(0).push_back(range);
equality = range->is1ValueRangeInfo();
auto range = map->find(std::string(idx->_fields._buffer[0]));
rangeInfo.at(0).push_back(range->second);
equality = range->second->is1ValueRangeInfo();
while (++j < prefixes.at(i) && equality){
range = map->find(std::string(idx->_fields._buffer[j]))->second;
//TODO should copy rangeInfo here
rangeInfo.at(0).push_back(range);
equality = equality && range->is1ValueRangeInfo();
range = map->find(std::string(idx->_fields._buffer[j]));
rangeInfo.at(0).push_back(range->second);
equality = equality && range->second->is1ValueRangeInfo();
}
}
@ -533,6 +530,7 @@ class FilterToEnumCollFinder : public WalkerWorker<ExecutionNode> {
attr.append(attributeName);
attr.push_back('.');
}
return;
}
if (node->type == NODE_TYPE_OPERATOR_BINARY_EQ) {
@ -559,6 +557,9 @@ class FilterToEnumCollFinder : public WalkerWorker<ExecutionNode> {
new RangeInfoBound(val, true), new RangeInfoBound(val, true));
}
}
attr = "";
enumCollVar = "";
return;
}
if(node->type == NODE_TYPE_OPERATOR_BINARY_LT ||
@ -613,11 +614,12 @@ class FilterToEnumCollFinder : public WalkerWorker<ExecutionNode> {
}
if (node->type == NODE_TYPE_OPERATOR_BINARY_AND) {
attr = "";
buildRangeInfo(node->getMember(0), enumCollVar, attr);
attr = "";
buildRangeInfo(node->getMember(1), enumCollVar, attr);
}
attr = "";
enumCollVar = "";
return;
}
};

View File

@ -55,8 +55,8 @@ namespace triagens {
_bound = Json(TRI_UNKNOWN_MEM_ZONE, bound->toJson(TRI_UNKNOWN_MEM_ZONE, true));
}
RangeInfoBound (basics::Json const& json) :
_bound(Json(TRI_UNKNOWN_MEM_ZONE,
RangeInfoBound (basics::Json const& json)
: _bound(Json(TRI_UNKNOWN_MEM_ZONE,
basics::JsonHelper::checkAndGetArrayValue(json.json(), "bound"),
basics::Json::NOFREE).copy()),
_include(basics::JsonHelper::checkAndGetBooleanValue(json.json(), "include")) {
@ -64,7 +64,10 @@ namespace triagens {
~RangeInfoBound(){}
RangeInfoBound ( RangeInfoBound const& copy ) = delete;
RangeInfoBound ( RangeInfoBound const& copy )
: _bound(copy._bound.copy()), _include(copy._include){
}
RangeInfoBound& operator= ( RangeInfoBound const& copy ) = delete;
Json toJson () const {
@ -119,7 +122,7 @@ namespace triagens {
RangeInfoBound const* high )
: _var(var), _attr(attr), _low(low), _high(high), _valid(true) {
}
RangeInfo (basics::Json const& json) :
_var(basics::JsonHelper::checkAndGetStringValue(json.json(), "var")),
_attr(basics::JsonHelper::checkAndGetStringValue(json.json(), "attr")),
@ -138,10 +141,12 @@ namespace triagens {
else {
_high = nullptr;
}
}
RangeInfo( const RangeInfo& copy ) = delete;
RangeInfo( RangeInfo const& copy )
: _var(copy._var), _attr(copy._attr), _low(copy._low),
_high(copy._high), _valid(copy._valid){}
RangeInfo& operator= ( RangeInfo const& copy ) = delete;
~RangeInfo(){
@ -177,36 +182,6 @@ namespace triagens {
&& _low->_include && _high->_include;
}
/*TRI_index_operator_t* toIndexOperator (TRI_shaper_t* shaper) {
// lower bound
TRI_index_operator_t* left = nullptr;
if(_low != nullptr){
left = _low->toIndexOperator(false, shaper);
}
// upper bound
TRI_index_operator_t* right = nullptr;
if(_high != nullptr){
right = _high->toIndexOperator(true, shaper);
}
TRI_index_operator_t* out = nullptr;
if (left != nullptr) {
if (right != nullptr) {
out = TRI_CreateIndexOperator(TRI_AND_INDEX_OPERATOR, left, right,
NULL, shaper, NULL, 2, NULL);
}
else {
out = left;
}
}
else if (right != nullptr) {
out = right;
}
return out;
}*/
std::string _var;
std::string _attr;
RangeInfoBound const* _low;
@ -228,7 +203,13 @@ namespace triagens {
RangesInfo () : _ranges(){}
~RangesInfo(){}
~RangesInfo(){
for (auto x: _ranges) {
for (auto y: x.second) {
delete y.second;
}
}
}
// find the range info for variable <var> and attributes <name>
RangeInfo* find (std::string var, std::string name) const {
@ -287,7 +268,6 @@ namespace triagens {
};
typedef std::vector<std::vector<RangeInfo*>> RangeInfoVec;
}
}