1
0
Fork 0

Preperation for DBServer local filtering

This commit is contained in:
Michael Hackstein 2015-11-17 11:01:51 +01:00
parent 2d9f466f38
commit a5273e8fec
4 changed files with 23 additions and 7 deletions

View File

@ -67,6 +67,7 @@ TraversalBlock::TraversalBlock (ExecutionEngine* engine,
edgeColls,
opts,
std::string(_trx->vocbase()->_name, strlen(_trx->vocbase()->_name)),
// ep->_expressions,
_resolver
));
} else {
@ -75,7 +76,9 @@ TraversalBlock::TraversalBlock (ExecutionEngine* engine,
TRI_voc_cid_t cid = _resolver->getCollectionId(coll);
edgeCollections.push_back(_trx->documentCollection(cid));
}
_traverser.reset(new triagens::arango::traverser::DepthFirstTraverser(edgeCollections, opts));
_traverser.reset(new triagens::arango::traverser::DepthFirstTraverser(edgeCollections,
opts));
// ep->_expressions));
}
if (!ep->usesInVariable()) {
_vertexId = ep->getStartVertex();
@ -206,6 +209,10 @@ int TraversalBlock::initialize () {
return res;
}
void TraversalBlock::executeFilterExpressions () {
// TODO walk over simpleFilterExp and execute them
}
int TraversalBlock::initializeCursor (AqlItemBlock* items,
size_t pos) {
int res = ExecutionBlock::initializeCursor(items, pos);
@ -219,8 +226,6 @@ int TraversalBlock::initializeCursor (AqlItemBlock* items,
bool TraversalBlock::executeExpressions (AqlValue& pathValue) {
TRI_ASSERT(_condition != nullptr);
return true;
auto& toReplace = _nonConstExpressions[0];
auto exp = toReplace->expression;
@ -376,6 +381,7 @@ AqlItemBlock* TraversalBlock::getSome (size_t, // atLeast,
return nullptr;
}
_pos = 0; // this is in the first block
executeFilterExpressions();
}
// If we get here, we do have _buffer.front()
@ -477,6 +483,7 @@ size_t TraversalBlock::skipSome (size_t atLeast, size_t atMost) {
return skipped;
}
_pos = 0; // this is in the first block
executeFilterExpressions();
}
// If we get here, we do have _buffer.front()

View File

@ -282,6 +282,12 @@ namespace triagens {
return _pathVar != nullptr;
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Executes the path-local filter expressions
////////////////////////////////////////////////////////////////////////////////
void executeFilterExpressions ();
};
} // namespace triagens::aql
} // namespace triagens

View File

@ -428,10 +428,12 @@ void TraversalNode::storeSimpleExpression(bool isEdgeAccess,
simpleTravererExpression e {
isEdgeAccess,
indexAccess,
comparisonType,
varAccess,
compareTo};
indexAccess,
comparisonType,
varAccess,
compareTo,
nullptr
};
_expressions.emplace_back(e);
}

View File

@ -55,6 +55,7 @@ namespace triagens {
AstNodeType comparisonType;
AstNode const* varAccess;
AstNode const* compareTo;
AqlValue const* evaluatedExpression;
void toJson (triagens::basics::Json& json,
TRI_memory_zone_t* zone) const;