1
0
Fork 0

fixed bugs in last

This commit is contained in:
James 2014-11-23 14:33:26 +00:00
parent 703cfa3a16
commit 9df14a7200
3 changed files with 11 additions and 10 deletions

View File

@ -973,8 +973,8 @@ bool IndexRangeBlock::initRanges () {
// Find out about the actual values for the bounds in the variable bound case: // Find out about the actual values for the bounds in the variable bound case:
if (_anyBoundVariable) { if (_anyBoundVariable) {
auto newCondition = std::unique_ptr<IndexOrCondition>(new IndexOrCondition()); //auto newCondition = std::unique_ptr<IndexOrCondition>(new IndexOrCondition());
auto newCondition = new IndexOrCondition();
for (size_t i = 0; i < _condition->size(); i++) { for (size_t i = 0; i < _condition->size(); i++) {
// The following are needed to evaluate expressions with local data from // The following are needed to evaluate expressions with local data from
@ -1064,9 +1064,10 @@ bool IndexRangeBlock::initRanges () {
newAnd.push_back(actualRange); newAnd.push_back(actualRange);
} }
orCombineIndexOrAndIndexAnd(*(newCondition.get()), newAnd); orCombineIndexOrAndIndexAnd(newCondition, newAnd);
} }
_condition = newCondition.release(); //_condition = newCondition.release();
_condition = newCondition;
} }
if (en->_index->type == TRI_IDX_TYPE_PRIMARY_INDEX) { if (en->_index->type == TRI_IDX_TYPE_PRIMARY_INDEX) {

View File

@ -758,10 +758,10 @@ static RangeInfo* differenceIndexOrAndRangeInfo (
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void triagens::aql::orCombineIndexOrAndIndexAnd ( void triagens::aql::orCombineIndexOrAndIndexAnd (
IndexOrCondition orCond, IndexAndCondition andCond) { IndexOrCondition* orCond, IndexAndCondition andCond) {
if (orCond.empty()) { if (orCond->empty()) {
orCond.push_back(andCond); orCond->push_back(andCond);
return; return;
} }
@ -772,7 +772,7 @@ void triagens::aql::orCombineIndexOrAndIndexAnd (
//avoid inserting overlapping ranges //avoid inserting overlapping ranges
IndexAndCondition newAnd; IndexAndCondition newAnd;
for (RangeInfo x: andCond) { for (RangeInfo x: andCond) {
RangeInfo* ri = differenceIndexOrAndRangeInfo(orCond, &x); RangeInfo* ri = differenceIndexOrAndRangeInfo(*orCond, &x);
if (ri != nullptr) { if (ri != nullptr) {
// if ri is nullptr, then y.second is contained in an existing ri // if ri is nullptr, then y.second is contained in an existing ri
newAnd.emplace_back(*ri); newAnd.emplace_back(*ri);
@ -780,7 +780,7 @@ void triagens::aql::orCombineIndexOrAndIndexAnd (
} }
if (! newAnd.empty()) { if (! newAnd.empty()) {
orCond.emplace_back(newAnd); orCond->emplace_back(newAnd);
} }
} }

View File

@ -927,7 +927,7 @@ namespace triagens {
/// @brief orCombineIndexOrAndIndexAnd: analogue of orCombineRangeInfoMapVecs /// @brief orCombineIndexOrAndIndexAnd: analogue of orCombineRangeInfoMapVecs
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void orCombineIndexOrAndIndexAnd(IndexOrCondition, IndexAndCondition); void orCombineIndexOrAndIndexAnd(IndexOrCondition*, IndexAndCondition);
} }
} }