Accept utils::MemoryResource in MakeCursor

Summary:
This API change is needed in order to propagate the memory allocation
scheme for the execution of LogicalOperator::Cursor

Depends on D1990

Reviewers: mtomic, mferencevic

Reviewed By: mtomic

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D1980
This commit is contained in:
Teon Banek 2019-04-24 11:14:16 +02:00
parent 2904e86158
commit e3fbe56588
8 changed files with 338 additions and 263 deletions

View File

@ -389,13 +389,15 @@ class RemotePuller {
class PullRemoteCursor : public Cursor {
public:
PullRemoteCursor(const PullRemote &self, database::GraphDbAccessor &db)
PullRemoteCursor(const PullRemote &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
input_cursor_(self.input() ? self.input()->MakeCursor(db) : nullptr),
command_id_(db.transaction().cid()),
input_cursor_(self.input() ? self.input()->MakeCursor(db, mem)
: nullptr),
command_id_(db->transaction().cid()),
remote_puller_(
// TODO: Pass in a Master GraphDb.
&dynamic_cast<database::Master *>(&db.db())->pull_clients(), db,
&dynamic_cast<database::Master *>(&db->db())->pull_clients(), *db,
self.symbols_, self.plan_id_, command_id_) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
@ -494,24 +496,26 @@ class PullRemoteCursor : public Cursor {
class SynchronizeCursor : public Cursor {
public:
SynchronizeCursor(const Synchronize &self, database::GraphDbAccessor &db)
SynchronizeCursor(const Synchronize &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
pull_clients_(
// TODO: Pass in a Master GraphDb.
&dynamic_cast<database::Master *>(&db.db())->pull_clients()),
&dynamic_cast<database::Master *>(&db->db())->pull_clients()),
updates_clients_(
// TODO: Pass in a Master GraphDb.
&dynamic_cast<database::Master *>(&db.db())->updates_clients()),
&dynamic_cast<database::Master *>(&db->db())->updates_clients()),
updates_server_(
// TODO: Pass in a Master GraphDb.
&dynamic_cast<database::Master *>(&db.db())->updates_server()),
input_cursor_(self.input()->MakeCursor(db)),
pull_remote_cursor_(
self.pull_remote_ ? self.pull_remote_->MakeCursor(db) : nullptr),
command_id_(db.transaction().cid()),
&dynamic_cast<database::Master *>(&db->db())->updates_server()),
input_cursor_(self.input()->MakeCursor(db, mem)),
pull_remote_cursor_(self.pull_remote_
? self.pull_remote_->MakeCursor(db, mem)
: nullptr),
command_id_(db->transaction().cid()),
master_id_(
// TODO: Pass in a Master GraphDb.
dynamic_cast<database::Master *>(&db.db())->WorkerId()) {}
dynamic_cast<database::Master *>(&db->db())->WorkerId()) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
if (!initial_pull_done_) {
@ -663,13 +667,14 @@ class SynchronizeCursor : public Cursor {
class PullRemoteOrderByCursor : public Cursor {
public:
PullRemoteOrderByCursor(const PullRemoteOrderBy &self,
database::GraphDbAccessor &db)
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
input_(self.input()->MakeCursor(db)),
command_id_(db.transaction().cid()),
input_(self.input()->MakeCursor(db, mem)),
command_id_(db->transaction().cid()),
remote_puller_(
// TODO: Pass in a Master GraphDb.
&dynamic_cast<database::Master *>(&db.db())->pull_clients(), db,
&dynamic_cast<database::Master *>(&db->db())->pull_clients(), *db,
self.symbols_, self.plan_id_, command_id_) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
@ -817,8 +822,9 @@ class PullRemoteOrderByCursor : public Cursor {
class DistributedExpandCursor : public query::plan::Cursor {
public:
DistributedExpandCursor(const DistributedExpand *self,
database::GraphDbAccessor *db)
: input_cursor_(self->input()->MakeCursor(*db)), self_(self) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: input_cursor_(self->input()->MakeCursor(db, mem)), self_(self) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
// A helper function for expanding a node from an edge.
@ -1056,8 +1062,11 @@ class DistributedExpandCursor : public query::plan::Cursor {
class DistributedExpandBfsCursor : public query::plan::Cursor {
public:
DistributedExpandBfsCursor(const DistributedExpandBfs &self,
database::GraphDbAccessor &db)
: self_(self), db_(db), input_cursor_(self_.input()->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
db_(*db),
input_cursor_(self_.input()->MakeCursor(db, mem)) {}
void InitSubcursors(database::GraphDbAccessor *dba,
const query::SymbolTable &symbol_table,
@ -1082,9 +1091,9 @@ class DistributedExpandBfsCursor : public query::plan::Cursor {
}
// Evaluator for the filtering condition and expansion depth.
ExpressionEvaluator evaluator(
&frame, context.symbol_table, context.evaluation_context,
context.db_accessor, GraphView::OLD);
ExpressionEvaluator evaluator(&frame, context.symbol_table,
context.evaluation_context,
context.db_accessor, GraphView::OLD);
while (true) {
if (context.db_accessor->should_abort()) throw HintedAbortError();
@ -1283,8 +1292,9 @@ VertexAccessor &CreateVertexOnWorker(int worker_id,
class DistributedCreateNodeCursor : public query::plan::Cursor {
public:
DistributedCreateNodeCursor(const DistributedCreateNode *self,
database::GraphDbAccessor *dba)
: input_cursor_(self->input()->MakeCursor(*dba)),
database::GraphDbAccessor *dba,
utils::MemoryResource *mem)
: input_cursor_(self->input()->MakeCursor(dba, mem)),
db_(&dba->db()),
node_info_(self->node_info_),
on_random_worker_(self->on_random_worker_) {
@ -1317,8 +1327,9 @@ class DistributedCreateNodeCursor : public query::plan::Cursor {
class DistributedCreateExpandCursor : public query::plan::Cursor {
public:
DistributedCreateExpandCursor(const DistributedCreateExpand *self,
database::GraphDbAccessor *dba)
: input_cursor_(self->input()->MakeCursor(*dba)),
database::GraphDbAccessor *dba,
utils::MemoryResource *mem)
: input_cursor_(self->input()->MakeCursor(dba, mem)),
self_(self),
db_(&dba->db()) {
CHECK(db_);
@ -1400,38 +1411,38 @@ class DistributedCreateExpandCursor : public query::plan::Cursor {
} // namespace
std::unique_ptr<Cursor> PullRemote::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<PullRemoteCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<PullRemoteCursor>(*this, db, mem);
}
std::unique_ptr<Cursor> Synchronize::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<SynchronizeCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<SynchronizeCursor>(*this, db, mem);
}
std::unique_ptr<Cursor> PullRemoteOrderBy::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<PullRemoteOrderByCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<PullRemoteOrderByCursor>(*this, db, mem);
}
std::unique_ptr<Cursor> DistributedExpand::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<DistributedExpandCursor>(this, &db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<DistributedExpandCursor>(this, db, mem);
}
std::unique_ptr<Cursor> DistributedExpandBfs::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<DistributedExpandBfsCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<DistributedExpandBfsCursor>(*this, db, mem);
}
std::unique_ptr<Cursor> DistributedCreateNode::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<DistributedCreateNodeCursor>(this, &db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<DistributedCreateNodeCursor>(this, db, mem);
}
std::unique_ptr<Cursor> DistributedCreateExpand::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<DistributedCreateExpandCursor>(this, &db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<DistributedCreateExpandCursor>(this, db, mem);
}
} // namespace query::plan

View File

@ -74,7 +74,7 @@ time on data transfer. It gives no guarantees on result order.")
: input_(input), plan_id_(plan_id), symbols_(symbols) {}
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -160,7 +160,7 @@ Logic of the synchronize operator is:
advance_command_(advance_command) {}
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
std::vector<Symbol> OutputSymbols(
@ -209,7 +209,7 @@ by having only one result from each worker.")
const std::vector<SortItem> &order_by, const std::vector<Symbol> &symbols);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
@ -255,7 +255,7 @@ by having only one result from each worker.")
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -318,7 +318,7 @@ by having only one result from each worker.")
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -355,7 +355,7 @@ by having only one result from each worker.")
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -403,7 +403,7 @@ by having only one result from each worker.")
Symbol input_symbol, bool existing_node);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }

View File

@ -92,7 +92,8 @@ bool Once::OnceCursor::Pull(Frame &, ExecutionContext &context) {
return false;
}
std::unique_ptr<Cursor> Once::MakeCursor(database::GraphDbAccessor &) const {
std::unique_ptr<Cursor> Once::MakeCursor(database::GraphDbAccessor *,
utils::MemoryResource *) const {
return std::make_unique<OnceCursor>();
}
@ -128,8 +129,8 @@ VertexAccessor &CreateLocalVertex(const NodeCreationInfo &node_info,
ACCEPT_WITH_INPUT(CreateNode)
std::unique_ptr<Cursor> CreateNode::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<CreateNodeCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<CreateNodeCursor>(*this, db, mem);
}
std::vector<Symbol> CreateNode::ModifiedSymbols(
@ -140,8 +141,9 @@ std::vector<Symbol> CreateNode::ModifiedSymbols(
}
CreateNode::CreateNodeCursor::CreateNodeCursor(const CreateNode &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool CreateNode::CreateNodeCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -172,8 +174,8 @@ CreateExpand::CreateExpand(const NodeCreationInfo &node_info,
ACCEPT_WITH_INPUT(CreateExpand)
std::unique_ptr<Cursor> CreateExpand::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<CreateExpandCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<CreateExpandCursor>(*this, db, mem);
}
std::vector<Symbol> CreateExpand::ModifiedSymbols(
@ -185,8 +187,9 @@ std::vector<Symbol> CreateExpand::ModifiedSymbols(
}
CreateExpand::CreateExpandCursor::CreateExpandCursor(
const CreateExpand &self, database::GraphDbAccessor &db)
: self_(self), db_(db), input_cursor_(self.input_->MakeCursor(db)) {}
const CreateExpand &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), db_(*db), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool CreateExpand::CreateExpandCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -316,13 +319,13 @@ ScanAll::ScanAll(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(ScanAll)
std::unique_ptr<Cursor> ScanAll::MakeCursor(
database::GraphDbAccessor &db) const {
auto vertices = [this, &db](Frame &, ExecutionContext &) {
return std::make_optional(db.Vertices(graph_view_ == GraphView::NEW));
std::unique_ptr<Cursor> ScanAll::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
auto vertices = [this, db](Frame &, ExecutionContext &) {
return std::make_optional(db->Vertices(graph_view_ == GraphView::NEW));
};
return std::make_unique<ScanAllCursor<decltype(vertices)>>(
output_symbol_, input_->MakeCursor(db), std::move(vertices), db);
output_symbol_, input_->MakeCursor(db, mem), std::move(vertices), *db);
}
std::vector<Symbol> ScanAll::ModifiedSymbols(const SymbolTable &table) const {
@ -339,13 +342,13 @@ ScanAllByLabel::ScanAllByLabel(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(ScanAllByLabel)
std::unique_ptr<Cursor> ScanAllByLabel::MakeCursor(
database::GraphDbAccessor &db) const {
auto vertices = [this, &db](Frame &, ExecutionContext &) {
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
auto vertices = [this, db](Frame &, ExecutionContext &) {
return std::make_optional(
db.Vertices(label_, graph_view_ == GraphView::NEW));
db->Vertices(label_, graph_view_ == GraphView::NEW));
};
return std::make_unique<ScanAllCursor<decltype(vertices)>>(
output_symbol_, input_->MakeCursor(db), std::move(vertices), db);
output_symbol_, input_->MakeCursor(db, mem), std::move(vertices), *db);
}
ScanAllByLabelPropertyRange::ScanAllByLabelPropertyRange(
@ -365,10 +368,10 @@ ScanAllByLabelPropertyRange::ScanAllByLabelPropertyRange(
ACCEPT_WITH_INPUT(ScanAllByLabelPropertyRange)
std::unique_ptr<Cursor> ScanAllByLabelPropertyRange::MakeCursor(
database::GraphDbAccessor &db) const {
auto vertices = [this, &db](Frame &frame, ExecutionContext &context)
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
auto vertices = [this, db](Frame &frame, ExecutionContext &context)
-> std::optional<decltype(
db.Vertices(label_, property_, std::nullopt, std::nullopt, false))> {
db->Vertices(label_, property_, std::nullopt, std::nullopt, false))> {
ExpressionEvaluator evaluator(&frame, context.symbol_table,
context.evaluation_context,
context.db_accessor, graph_view_);
@ -391,12 +394,12 @@ std::unique_ptr<Cursor> ScanAllByLabelPropertyRange::MakeCursor(
// is treated as not satisfying the filter, so return no vertices.
if (maybe_lower && maybe_lower->value().IsNull()) return std::nullopt;
if (maybe_upper && maybe_upper->value().IsNull()) return std::nullopt;
return std::make_optional(db.Vertices(label_, property_, maybe_lower,
maybe_upper,
graph_view_ == GraphView::NEW));
return std::make_optional(db->Vertices(label_, property_, maybe_lower,
maybe_upper,
graph_view_ == GraphView::NEW));
};
return std::make_unique<ScanAllCursor<decltype(vertices)>>(
output_symbol_, input_->MakeCursor(db), std::move(vertices), db);
output_symbol_, input_->MakeCursor(db, mem), std::move(vertices), *db);
}
ScanAllByLabelPropertyValue::ScanAllByLabelPropertyValue(
@ -415,10 +418,10 @@ ScanAllByLabelPropertyValue::ScanAllByLabelPropertyValue(
ACCEPT_WITH_INPUT(ScanAllByLabelPropertyValue)
std::unique_ptr<Cursor> ScanAllByLabelPropertyValue::MakeCursor(
database::GraphDbAccessor &db) const {
auto vertices = [this, &db](Frame &frame, ExecutionContext &context)
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
auto vertices = [this, db](Frame &frame, ExecutionContext &context)
-> std::optional<decltype(
db.Vertices(label_, property_, PropertyValue::Null, false))> {
db->Vertices(label_, property_, PropertyValue::Null, false))> {
ExpressionEvaluator evaluator(&frame, context.symbol_table,
context.evaluation_context,
context.db_accessor, graph_view_);
@ -428,12 +431,12 @@ std::unique_ptr<Cursor> ScanAllByLabelPropertyValue::MakeCursor(
throw QueryRuntimeException("'{}' cannot be used as a property value.",
value.type());
}
return std::make_optional(db.Vertices(label_, property_,
PropertyValue(value),
graph_view_ == GraphView::NEW));
return std::make_optional(db->Vertices(label_, property_,
PropertyValue(value),
graph_view_ == GraphView::NEW));
};
return std::make_unique<ScanAllCursor<decltype(vertices)>>(
output_symbol_, input_->MakeCursor(db), std::move(vertices), db);
output_symbol_, input_->MakeCursor(db, mem), std::move(vertices), *db);
}
namespace {
@ -458,9 +461,9 @@ Expand::Expand(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Expand)
std::unique_ptr<Cursor> Expand::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<ExpandCursor>(*this, db);
std::unique_ptr<Cursor> Expand::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<ExpandCursor>(*this, db, mem);
}
std::vector<Symbol> Expand::ModifiedSymbols(const SymbolTable &table) const {
@ -471,8 +474,9 @@ std::vector<Symbol> Expand::ModifiedSymbols(const SymbolTable &table) const {
}
Expand::ExpandCursor::ExpandCursor(const Expand &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)), db_(db) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)), db_(*db) {}
bool Expand::ExpandCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Expand");
@ -680,8 +684,9 @@ auto ExpandFromVertex(const VertexAccessor &vertex,
class ExpandVariableCursor : public Cursor {
public:
ExpandVariableCursor(const ExpandVariable &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
SCOPED_PROFILE_OP("ExpandVariable");
@ -917,8 +922,9 @@ class ExpandVariableCursor : public Cursor {
class STShortestPathCursor : public query::plan::Cursor {
public:
STShortestPathCursor(const ExpandVariable &self,
database::GraphDbAccessor &dba)
: self_(self), input_cursor_(self_.input()->MakeCursor(dba)) {
database::GraphDbAccessor *dba,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input()->MakeCursor(dba, mem)) {
CHECK(self_.common_.existing_node)
<< "s-t shortest path algorithm should only "
"be used when `existing_node` flag is "
@ -1149,8 +1155,9 @@ class STShortestPathCursor : public query::plan::Cursor {
class SingleSourceShortestPathCursor : public query::plan::Cursor {
public:
SingleSourceShortestPathCursor(const ExpandVariable &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input()->MakeCursor(db)) {
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input()->MakeCursor(db, mem)) {
CHECK(!self_.common_.existing_node)
<< "Single source shortest path algorithm "
"should not be used when `existing_node` "
@ -1308,8 +1315,9 @@ class SingleSourceShortestPathCursor : public query::plan::Cursor {
class ExpandWeightedShortestPathCursor : public query::plan::Cursor {
public:
ExpandWeightedShortestPathCursor(const ExpandVariable &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
SCOPED_PROFILE_OP("ExpandWeightedShortestPath");
@ -1546,18 +1554,18 @@ class ExpandWeightedShortestPathCursor : public query::plan::Cursor {
};
std::unique_ptr<Cursor> ExpandVariable::MakeCursor(
database::GraphDbAccessor &db) const {
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
switch (type_) {
case EdgeAtom::Type::BREADTH_FIRST:
if (common_.existing_node) {
return std::make_unique<STShortestPathCursor>(*this, db);
return std::make_unique<STShortestPathCursor>(*this, db, mem);
} else {
return std::make_unique<SingleSourceShortestPathCursor>(*this, db);
return std::make_unique<SingleSourceShortestPathCursor>(*this, db, mem);
}
case EdgeAtom::Type::DEPTH_FIRST:
return std::make_unique<ExpandVariableCursor>(*this, db);
return std::make_unique<ExpandVariableCursor>(*this, db, mem);
case EdgeAtom::Type::WEIGHTED_SHORTEST_PATH:
return std::make_unique<ExpandWeightedShortestPathCursor>(*this, db);
return std::make_unique<ExpandWeightedShortestPathCursor>(*this, db, mem);
case EdgeAtom::Type::SINGLE:
LOG(FATAL)
<< "ExpandVariable should not be planned for a single expansion!";
@ -1567,8 +1575,9 @@ std::unique_ptr<Cursor> ExpandVariable::MakeCursor(
class ConstructNamedPathCursor : public Cursor {
public:
ConstructNamedPathCursor(const ConstructNamedPath &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input()->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input()->MakeCursor(db, mem)) {}
bool Pull(Frame &frame, ExecutionContext &context) override {
SCOPED_PROFILE_OP("ConstructNamedPath");
@ -1650,8 +1659,8 @@ class ConstructNamedPathCursor : public Cursor {
ACCEPT_WITH_INPUT(ConstructNamedPath)
std::unique_ptr<Cursor> ConstructNamedPath::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<ConstructNamedPathCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<ConstructNamedPathCursor>(*this, db, mem);
}
std::vector<Symbol> ConstructNamedPath::ModifiedSymbols(
@ -1668,9 +1677,9 @@ Filter::Filter(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Filter)
std::unique_ptr<Cursor> Filter::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<FilterCursor>(*this, db);
std::unique_ptr<Cursor> Filter::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<FilterCursor>(*this, db, mem);
}
std::vector<Symbol> Filter::ModifiedSymbols(const SymbolTable &table) const {
@ -1678,8 +1687,9 @@ std::vector<Symbol> Filter::ModifiedSymbols(const SymbolTable &table) const {
}
Filter::FilterCursor::FilterCursor(const Filter &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool Filter::FilterCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Filter");
@ -1706,9 +1716,9 @@ Produce::Produce(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Produce)
std::unique_ptr<Cursor> Produce::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<ProduceCursor>(*this, db);
std::unique_ptr<Cursor> Produce::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<ProduceCursor>(*this, db, mem);
}
std::vector<Symbol> Produce::OutputSymbols(
@ -1725,8 +1735,9 @@ std::vector<Symbol> Produce::ModifiedSymbols(const SymbolTable &table) const {
}
Produce::ProduceCursor::ProduceCursor(const Produce &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool Produce::ProduceCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Produce");
@ -1754,9 +1765,9 @@ Delete::Delete(const std::shared_ptr<LogicalOperator> &input_,
ACCEPT_WITH_INPUT(Delete)
std::unique_ptr<Cursor> Delete::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<DeleteCursor>(*this, db);
std::unique_ptr<Cursor> Delete::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<DeleteCursor>(*this, db, mem);
}
std::vector<Symbol> Delete::ModifiedSymbols(const SymbolTable &table) const {
@ -1764,8 +1775,9 @@ std::vector<Symbol> Delete::ModifiedSymbols(const SymbolTable &table) const {
}
Delete::DeleteCursor::DeleteCursor(const Delete &self,
database::GraphDbAccessor &db)
: self_(self), db_(db), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), db_(*db), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool Delete::DeleteCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Delete");
@ -1835,8 +1847,8 @@ SetProperty::SetProperty(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(SetProperty)
std::unique_ptr<Cursor> SetProperty::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<SetPropertyCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<SetPropertyCursor>(*this, db, mem);
}
std::vector<Symbol> SetProperty::ModifiedSymbols(
@ -1845,8 +1857,9 @@ std::vector<Symbol> SetProperty::ModifiedSymbols(
}
SetProperty::SetPropertyCursor::SetPropertyCursor(const SetProperty &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool SetProperty::SetPropertyCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -1895,8 +1908,8 @@ SetProperties::SetProperties(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(SetProperties)
std::unique_ptr<Cursor> SetProperties::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<SetPropertiesCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<SetPropertiesCursor>(*this, db, mem);
}
std::vector<Symbol> SetProperties::ModifiedSymbols(
@ -1905,8 +1918,9 @@ std::vector<Symbol> SetProperties::ModifiedSymbols(
}
SetProperties::SetPropertiesCursor::SetPropertiesCursor(
const SetProperties &self, database::GraphDbAccessor &db)
: self_(self), db_(db), input_cursor_(self.input_->MakeCursor(db)) {}
const SetProperties &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), db_(*db), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool SetProperties::SetPropertiesCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -2001,8 +2015,8 @@ SetLabels::SetLabels(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(SetLabels)
std::unique_ptr<Cursor> SetLabels::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<SetLabelsCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<SetLabelsCursor>(*this, db, mem);
}
std::vector<Symbol> SetLabels::ModifiedSymbols(const SymbolTable &table) const {
@ -2010,8 +2024,9 @@ std::vector<Symbol> SetLabels::ModifiedSymbols(const SymbolTable &table) const {
}
SetLabels::SetLabelsCursor::SetLabelsCursor(const SetLabels &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool SetLabels::SetLabelsCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("SetLabels");
@ -2044,8 +2059,8 @@ RemoveProperty::RemoveProperty(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(RemoveProperty)
std::unique_ptr<Cursor> RemoveProperty::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<RemovePropertyCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<RemovePropertyCursor>(*this, db, mem);
}
std::vector<Symbol> RemoveProperty::ModifiedSymbols(
@ -2054,8 +2069,9 @@ std::vector<Symbol> RemoveProperty::ModifiedSymbols(
}
RemoveProperty::RemovePropertyCursor::RemovePropertyCursor(
const RemoveProperty &self, database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
const RemoveProperty &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool RemoveProperty::RemovePropertyCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -2110,8 +2126,8 @@ RemoveLabels::RemoveLabels(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(RemoveLabels)
std::unique_ptr<Cursor> RemoveLabels::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<RemoveLabelsCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<RemoveLabelsCursor>(*this, db, mem);
}
std::vector<Symbol> RemoveLabels::ModifiedSymbols(
@ -2120,8 +2136,9 @@ std::vector<Symbol> RemoveLabels::ModifiedSymbols(
}
RemoveLabels::RemoveLabelsCursor::RemoveLabelsCursor(
const RemoveLabels &self, database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
const RemoveLabels &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool RemoveLabels::RemoveLabelsCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -2158,8 +2175,8 @@ EdgeUniquenessFilter::EdgeUniquenessFilter(
ACCEPT_WITH_INPUT(EdgeUniquenessFilter)
std::unique_ptr<Cursor> EdgeUniquenessFilter::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<EdgeUniquenessFilterCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<EdgeUniquenessFilterCursor>(*this, db, mem);
}
std::vector<Symbol> EdgeUniquenessFilter::ModifiedSymbols(
@ -2168,8 +2185,9 @@ std::vector<Symbol> EdgeUniquenessFilter::ModifiedSymbols(
}
EdgeUniquenessFilter::EdgeUniquenessFilterCursor::EdgeUniquenessFilterCursor(
const EdgeUniquenessFilter &self, database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
const EdgeUniquenessFilter &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
namespace {
/**
@ -2227,8 +2245,8 @@ Accumulate::Accumulate(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Accumulate)
std::unique_ptr<Cursor> Accumulate::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<Accumulate::AccumulateCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<Accumulate::AccumulateCursor>(*this, db, mem);
}
std::vector<Symbol> Accumulate::ModifiedSymbols(const SymbolTable &) const {
@ -2236,8 +2254,9 @@ std::vector<Symbol> Accumulate::ModifiedSymbols(const SymbolTable &) const {
}
Accumulate::AccumulateCursor::AccumulateCursor(const Accumulate &self,
database::GraphDbAccessor &db)
: self_(self), db_(db), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), db_(*db), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool Accumulate::AccumulateCursor::Pull(Frame &frame,
ExecutionContext &context) {
@ -2290,8 +2309,8 @@ Aggregate::Aggregate(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Aggregate)
std::unique_ptr<Cursor> Aggregate::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<AggregateCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<AggregateCursor>(*this, db, mem);
}
std::vector<Symbol> Aggregate::ModifiedSymbols(const SymbolTable &) const {
@ -2301,8 +2320,9 @@ std::vector<Symbol> Aggregate::ModifiedSymbols(const SymbolTable &) const {
}
Aggregate::AggregateCursor::AggregateCursor(const Aggregate &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
namespace {
/** Returns the default TypedValue for an Aggregation element.
@ -2575,8 +2595,9 @@ Skip::Skip(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Skip)
std::unique_ptr<Cursor> Skip::MakeCursor(database::GraphDbAccessor &db) const {
return std::make_unique<SkipCursor>(*this, db);
std::unique_ptr<Cursor> Skip::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<SkipCursor>(*this, db, mem);
}
std::vector<Symbol> Skip::OutputSymbols(const SymbolTable &symbol_table) const {
@ -2588,8 +2609,9 @@ std::vector<Symbol> Skip::ModifiedSymbols(const SymbolTable &table) const {
return input_->ModifiedSymbols(table);
}
Skip::SkipCursor::SkipCursor(const Skip &self, database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
Skip::SkipCursor::SkipCursor(const Skip &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool Skip::SkipCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Skip");
@ -2633,8 +2655,9 @@ Limit::Limit(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Limit)
std::unique_ptr<Cursor> Limit::MakeCursor(database::GraphDbAccessor &db) const {
return std::make_unique<LimitCursor>(*this, db);
std::unique_ptr<Cursor> Limit::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<LimitCursor>(*this, db, mem);
}
std::vector<Symbol> Limit::OutputSymbols(
@ -2648,8 +2671,9 @@ std::vector<Symbol> Limit::ModifiedSymbols(const SymbolTable &table) const {
}
Limit::LimitCursor::LimitCursor(const Limit &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool Limit::LimitCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Limit");
@ -2706,9 +2730,9 @@ OrderBy::OrderBy(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(OrderBy)
std::unique_ptr<Cursor> OrderBy::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<OrderByCursor>(*this, db);
std::unique_ptr<Cursor> OrderBy::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<OrderByCursor>(*this, db, mem);
}
std::vector<Symbol> OrderBy::OutputSymbols(
@ -2722,8 +2746,9 @@ std::vector<Symbol> OrderBy::ModifiedSymbols(const SymbolTable &table) const {
}
OrderBy::OrderByCursor::OrderByCursor(const OrderBy &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self_.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self_.input_->MakeCursor(db, mem)) {}
bool OrderBy::OrderByCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("OrderBy");
@ -2798,8 +2823,9 @@ bool Merge::Accept(HierarchicalLogicalOperatorVisitor &visitor) {
return visitor.PostVisit(*this);
}
std::unique_ptr<Cursor> Merge::MakeCursor(database::GraphDbAccessor &db) const {
return std::make_unique<MergeCursor>(*this, db);
std::unique_ptr<Cursor> Merge::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<MergeCursor>(*this, db, mem);
}
std::vector<Symbol> Merge::ModifiedSymbols(const SymbolTable &table) const {
@ -2812,10 +2838,11 @@ std::vector<Symbol> Merge::ModifiedSymbols(const SymbolTable &table) const {
}
Merge::MergeCursor::MergeCursor(const Merge &self,
database::GraphDbAccessor &db)
: input_cursor_(self.input_->MakeCursor(db)),
merge_match_cursor_(self.merge_match_->MakeCursor(db)),
merge_create_cursor_(self.merge_create_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: input_cursor_(self.input_->MakeCursor(db, mem)),
merge_match_cursor_(self.merge_match_->MakeCursor(db, mem)),
merge_create_cursor_(self.merge_create_->MakeCursor(db, mem)) {}
bool Merge::MergeCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Merge");
@ -2883,9 +2910,9 @@ bool Optional::Accept(HierarchicalLogicalOperatorVisitor &visitor) {
return visitor.PostVisit(*this);
}
std::unique_ptr<Cursor> Optional::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<OptionalCursor>(*this, db);
std::unique_ptr<Cursor> Optional::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<OptionalCursor>(*this, db, mem);
}
std::vector<Symbol> Optional::ModifiedSymbols(const SymbolTable &table) const {
@ -2896,10 +2923,11 @@ std::vector<Symbol> Optional::ModifiedSymbols(const SymbolTable &table) const {
}
Optional::OptionalCursor::OptionalCursor(const Optional &self,
database::GraphDbAccessor &db)
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
input_cursor_(self.input_->MakeCursor(db)),
optional_cursor_(self.optional_->MakeCursor(db)) {}
input_cursor_(self.input_->MakeCursor(db, mem)),
optional_cursor_(self.optional_->MakeCursor(db, mem)) {}
bool Optional::OptionalCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Optional");
@ -2959,9 +2987,9 @@ Unwind::Unwind(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Unwind)
std::unique_ptr<Cursor> Unwind::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<UnwindCursor>(*this, db);
std::unique_ptr<Cursor> Unwind::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<UnwindCursor>(*this, db, mem);
}
std::vector<Symbol> Unwind::ModifiedSymbols(const SymbolTable &table) const {
@ -2971,8 +2999,9 @@ std::vector<Symbol> Unwind::ModifiedSymbols(const SymbolTable &table) const {
}
Unwind::UnwindCursor::UnwindCursor(const Unwind &self,
database::GraphDbAccessor &db)
: self_(self), db_(db), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), db_(*db), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool Unwind::UnwindCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Unwind");
@ -3020,9 +3049,9 @@ Distinct::Distinct(const std::shared_ptr<LogicalOperator> &input,
ACCEPT_WITH_INPUT(Distinct)
std::unique_ptr<Cursor> Distinct::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<DistinctCursor>(*this, db);
std::unique_ptr<Cursor> Distinct::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<DistinctCursor>(*this, db, mem);
}
std::vector<Symbol> Distinct::OutputSymbols(
@ -3036,8 +3065,9 @@ std::vector<Symbol> Distinct::ModifiedSymbols(const SymbolTable &table) const {
}
Distinct::DistinctCursor::DistinctCursor(const Distinct &self,
database::GraphDbAccessor &db)
: self_(self), input_cursor_(self.input_->MakeCursor(db)) {}
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self), input_cursor_(self.input_->MakeCursor(db, mem)) {}
bool Distinct::DistinctCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Distinct");
@ -3071,8 +3101,9 @@ Union::Union(const std::shared_ptr<LogicalOperator> &left_op,
left_symbols_(left_symbols),
right_symbols_(right_symbols) {}
std::unique_ptr<Cursor> Union::MakeCursor(database::GraphDbAccessor &db) const {
return std::make_unique<Union::UnionCursor>(*this, db);
std::unique_ptr<Cursor> Union::MakeCursor(database::GraphDbAccessor *db,
utils::MemoryResource *mem) const {
return std::make_unique<Union::UnionCursor>(*this, db, mem);
}
bool Union::Accept(HierarchicalLogicalOperatorVisitor &visitor) {
@ -3095,10 +3126,11 @@ std::vector<Symbol> Union::ModifiedSymbols(const SymbolTable &) const {
WITHOUT_SINGLE_INPUT(Union);
Union::UnionCursor::UnionCursor(const Union &self,
database::GraphDbAccessor &db)
database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
left_cursor_(self.left_op_->MakeCursor(db)),
right_cursor_(self.right_op_->MakeCursor(db)) {}
left_cursor_(self.left_op_->MakeCursor(db, mem)),
right_cursor_(self.right_op_->MakeCursor(db, mem)) {}
bool Union::UnionCursor::Pull(Frame &frame, ExecutionContext &context) {
SCOPED_PROFILE_OP("Union");
@ -3155,10 +3187,11 @@ namespace {
class CartesianCursor : public Cursor {
public:
CartesianCursor(const Cartesian &self, database::GraphDbAccessor &db)
CartesianCursor(const Cartesian &self, database::GraphDbAccessor *db,
utils::MemoryResource *mem)
: self_(self),
left_op_cursor_(self.left_op_->MakeCursor(db)),
right_op_cursor_(self_.right_op_->MakeCursor(db)) {
left_op_cursor_(self.left_op_->MakeCursor(db, mem)),
right_op_cursor_(self_.right_op_->MakeCursor(db, mem)) {
CHECK(left_op_cursor_ != nullptr)
<< "CartesianCursor: Missing left operator cursor.";
CHECK(right_op_cursor_ != nullptr)
@ -3237,8 +3270,8 @@ class CartesianCursor : public Cursor {
} // namespace
std::unique_ptr<Cursor> Cartesian::MakeCursor(
database::GraphDbAccessor &db) const {
return std::make_unique<CartesianCursor>(*this, db);
database::GraphDbAccessor *db, utils::MemoryResource *mem) const {
return std::make_unique<CartesianCursor>(*this, db, mem);
}
OutputTable::OutputTable(std::vector<Symbol> output_symbols,
@ -3293,8 +3326,8 @@ class OutputTableCursor : public Cursor {
bool pulled_{false};
};
std::unique_ptr<Cursor> OutputTable::MakeCursor(
database::GraphDbAccessor &dba) const {
std::unique_ptr<Cursor> OutputTable::MakeCursor(database::GraphDbAccessor *,
utils::MemoryResource *) const {
return std::make_unique<OutputTableCursor>(*this);
}

View File

@ -18,6 +18,7 @@
#include "utils/bound.hpp"
#include "utils/future.hpp"
#include "utils/hashing/fnv.hpp"
#include "utils/memory.hpp"
#include "utils/visitor.hpp"
namespace database {
@ -148,13 +149,19 @@ can serve as inputs to others and thus a sequence of operations is formed.")
#>cpp
virtual ~LogicalOperator() {}
/** Constructs a @c Cursor which is used to run this operator.
/** Construct a @c Cursor which is used to run this operator.
*
* @param database::GraphDbAccessor Used to perform operations on the
* database.
* @param database::GraphDbAccessor Used to perform operations on the
* database.
* @param utils::MemoryResource Memory resource used for allocations during
* the lifetime of the returned Cursor.
*/
virtual std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &) const = 0;
database::GraphDbAccessor *, utils::MemoryResource *) const = 0;
std::unique_ptr<Cursor> MakeCursor(database::GraphDbAccessor &dba) const {
return MakeCursor(&dba, utils::NewDeleteResource());
}
/** Return @c Symbol vector where the query results will be stored.
*
@ -347,7 +354,7 @@ and false on every following Pull.")
#>cpp
DEFVISITABLE(HierarchicalLogicalOperatorVisitor);
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override {
return {};
}
@ -471,7 +478,7 @@ a preceeding `MATCH`), or multiple nodes (`MATCH ... CREATE` or
const NodeCreationInfo &node_info);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -484,7 +491,8 @@ a preceeding `MATCH`), or multiple nodes (`MATCH ... CREATE` or
#>cpp
class CreateNodeCursor : public Cursor {
public:
CreateNodeCursor(const CreateNode &self, database::GraphDbAccessor &db);
CreateNodeCursor(const CreateNode &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -584,7 +592,7 @@ chained in cases when longer paths need creating.
Symbol input_symbol, bool existing_node);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -597,7 +605,8 @@ chained in cases when longer paths need creating.
#>cpp
class CreateExpandCursor : public Cursor {
public:
CreateExpandCursor(const CreateExpand &self, database::GraphDbAccessor &db);
CreateExpandCursor(const CreateExpand &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -669,7 +678,7 @@ with a constructor argument.
GraphView graph_view = GraphView::OLD);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -698,7 +707,7 @@ given label.
GraphView graph_view = GraphView::OLD);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
cpp<#)
(:serialize (:slk) (:capnp))
(:clone))
@ -844,7 +853,7 @@ property value which is inside a range (inclusive or exlusive).
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
cpp<#)
(:serialize (:slk) (:capnp))
(:clone))
@ -887,7 +896,7 @@ property value.
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
cpp<#)
(:serialize (:slk) (:capnp))
(:clone))
@ -973,7 +982,7 @@ pulled.")
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -984,7 +993,8 @@ pulled.")
class ExpandCursor : public Cursor {
public:
ExpandCursor(const Expand &self, database::GraphDbAccessor &db);
ExpandCursor(const Expand &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1162,7 +1172,7 @@ pulled.")
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1205,7 +1215,7 @@ pulled.")
path_elements_(path_elements) {}
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1242,7 +1252,7 @@ a boolean value.")
Expression *expression_);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1255,7 +1265,8 @@ a boolean value.")
#>cpp
class FilterCursor : public Cursor {
public:
FilterCursor(const Filter &self, database::GraphDbAccessor &db);
FilterCursor(const Filter &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1298,7 +1309,7 @@ RETURN clause) the Produce's pull succeeds exactly once.")
const std::vector<NamedExpression *> &named_expressions);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -1312,7 +1323,8 @@ RETURN clause) the Produce's pull succeeds exactly once.")
#>cpp
class ProduceCursor : public Cursor {
public:
ProduceCursor(const Produce &self, database::GraphDbAccessor &db);
ProduceCursor(const Produce &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1352,7 +1364,7 @@ Has a flag for using DETACH DELETE when deleting vertices.")
const std::vector<Expression *> &expressions, bool detach_);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1365,7 +1377,8 @@ Has a flag for using DETACH DELETE when deleting vertices.")
#>cpp
class DeleteCursor : public Cursor {
public:
DeleteCursor(const Delete &self, database::GraphDbAccessor &db);
DeleteCursor(const Delete &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1410,7 +1423,7 @@ can be stored (a TypedValue that can be converted to PropertyValue).")
Expression *rhs);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1423,7 +1436,8 @@ can be stored (a TypedValue that can be converted to PropertyValue).")
#>cpp
class SetPropertyCursor : public Cursor {
public:
SetPropertyCursor(const SetProperty &self, database::GraphDbAccessor &db);
SetPropertyCursor(const SetProperty &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1474,7 +1488,7 @@ that the old properties are discarded and replaced with new ones.")
Symbol input_symbol, Expression *rhs, Op op);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1487,8 +1501,8 @@ that the old properties are discarded and replaced with new ones.")
#>cpp
class SetPropertiesCursor : public Cursor {
public:
SetPropertiesCursor(const SetProperties &self,
database::GraphDbAccessor &db);
SetPropertiesCursor(const SetProperties &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1532,7 +1546,7 @@ It does NOT remove labels that are already set on that Vertex.")
const std::vector<storage::Label> &labels);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1545,7 +1559,8 @@ It does NOT remove labels that are already set on that Vertex.")
#>cpp
class SetLabelsCursor : public Cursor {
public:
SetLabelsCursor(const SetLabels &self, database::GraphDbAccessor &db);
SetLabelsCursor(const SetLabels &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1580,7 +1595,7 @@ It does NOT remove labels that are already set on that Vertex.")
storage::Property property, PropertyLookup *lhs);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1593,8 +1608,8 @@ It does NOT remove labels that are already set on that Vertex.")
#>cpp
class RemovePropertyCursor : public Cursor {
public:
RemovePropertyCursor(const RemoveProperty &self,
database::GraphDbAccessor &db);
RemovePropertyCursor(const RemoveProperty &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1629,7 +1644,7 @@ If a label does not exist on a Vertex, nothing happens.")
Symbol input_symbol, const std::vector<storage::Label> &labels);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1642,7 +1657,8 @@ If a label does not exist on a Vertex, nothing happens.")
#>cpp
class RemoveLabelsCursor : public Cursor {
public:
RemoveLabelsCursor(const RemoveLabels &self, database::GraphDbAccessor &db);
RemoveLabelsCursor(const RemoveLabels &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1688,7 +1704,7 @@ edge lists).")
const std::vector<Symbol> &previous_symbols);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1701,8 +1717,9 @@ edge lists).")
#>cpp
class EdgeUniquenessFilterCursor : public Cursor {
public:
EdgeUniquenessFilterCursor(const EdgeUniquenessFilter &self,
database::GraphDbAccessor &db);
EdgeUniquenessFilterCursor(const EdgeUniquenessFilter &,
database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1760,7 +1777,7 @@ has been cached will be reconstructed before Pull returns.
const std::vector<Symbol> &symbols, bool advance_command = false);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1773,7 +1790,8 @@ has been cached will be reconstructed before Pull returns.
#>cpp
class AccumulateCursor : public Cursor {
public:
AccumulateCursor(const Accumulate &self, database::GraphDbAccessor &db);
AccumulateCursor(const Accumulate &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -1893,7 +1911,7 @@ elements are in an undefined state after aggregation.")
const std::vector<Symbol> &remember);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -1906,7 +1924,8 @@ elements are in an undefined state after aggregation.")
#>cpp
class AggregateCursor : public Cursor {
public:
AggregateCursor(const Aggregate &self, database::GraphDbAccessor &db);
AggregateCursor(const Aggregate &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2017,7 +2036,7 @@ operator's implementation does not expect this.")
Skip(const std::shared_ptr<LogicalOperator> &input, Expression *expression);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -2031,7 +2050,8 @@ operator's implementation does not expect this.")
#>cpp
class SkipCursor : public Cursor {
public:
SkipCursor(const Skip &self, database::GraphDbAccessor &db);
SkipCursor(const Skip &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2081,7 +2101,7 @@ input should be performed).")
Limit(const std::shared_ptr<LogicalOperator> &input, Expression *expression);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -2095,7 +2115,8 @@ input should be performed).")
#>cpp
class LimitCursor : public Cursor {
public:
LimitCursor(const Limit &self, database::GraphDbAccessor &db);
LimitCursor(const Limit &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2149,7 +2170,7 @@ are valid for usage after the OrderBy operator.")
const std::vector<Symbol> &output_symbols);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -2163,7 +2184,8 @@ are valid for usage after the OrderBy operator.")
#>cpp
class OrderByCursor : public Cursor {
public:
OrderByCursor(const OrderBy &self, database::GraphDbAccessor &db);
OrderByCursor(const OrderBy &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2222,7 +2244,7 @@ documentation.")
const std::shared_ptr<LogicalOperator> &merge_create);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
// TODO: Consider whether we want to treat Merge as having single input. It
@ -2238,7 +2260,8 @@ documentation.")
#>cpp
class MergeCursor : public Cursor {
public:
MergeCursor(const Merge &self, database::GraphDbAccessor &db);
MergeCursor(const Merge &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2289,7 +2312,7 @@ and returns true, once.")
const std::vector<Symbol> &optional_symbols);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override { return true; }
@ -2302,7 +2325,8 @@ and returns true, once.")
#>cpp
class OptionalCursor : public Cursor {
public:
OptionalCursor(const Optional &self, database::GraphDbAccessor &db);
OptionalCursor(const Optional &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2347,7 +2371,7 @@ Input is optional (unwind can be the first clause in a query).")
Expression *input_expression_, Symbol output_symbol);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override {
@ -2362,7 +2386,8 @@ Input is optional (unwind can be the first clause in a query).")
#>cpp
class UnwindCursor : public Cursor {
public:
UnwindCursor(const Unwind &self, database::GraphDbAccessor &db);
UnwindCursor(const Unwind &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2404,7 +2429,7 @@ This implementation maintains input ordering.")
const std::vector<Symbol> &value_symbols);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -2418,7 +2443,8 @@ This implementation maintains input ordering.")
#>cpp
class DistinctCursor : public Cursor {
public:
DistinctCursor(const Distinct &self, database::GraphDbAccessor &db);
DistinctCursor(const Distinct &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
@ -2477,7 +2503,7 @@ of symbols used by each of the inputs.")
const std::vector<Symbol> &right_symbols);
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
@ -2489,7 +2515,8 @@ of symbols used by each of the inputs.")
#>cpp
class UnionCursor : public Cursor {
public:
UnionCursor(const Union &self, database::GraphDbAccessor &db);
UnionCursor(const Union &, database::GraphDbAccessor *,
utils::MemoryResource *);
bool Pull(Frame &, ExecutionContext &) override;
void Shutdown() override;
void Reset() override;
@ -2537,8 +2564,8 @@ of symbols used by each of the inputs.")
right_symbols_(right_symbols) {}
bool Accept(HierarchicalLogicalOperatorVisitor &visitor) override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &db) const override;
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> ModifiedSymbols(const SymbolTable &) const override;
bool HasSingleInput() const override;
@ -2568,7 +2595,7 @@ of symbols used by each of the inputs.")
}
std::unique_ptr<Cursor> MakeCursor(
database::GraphDbAccessor &) const override;
database::GraphDbAccessor *, utils::MemoryResource *) const override;
std::vector<Symbol> OutputSymbols(const SymbolTable &) const override {
return output_symbols_;
}

View File

@ -110,8 +110,9 @@ class Yield : public query::plan::LogicalOperator {
values_(values) {}
std::unique_ptr<query::plan::Cursor> MakeCursor(
database::GraphDbAccessor &dba) const override {
return std::make_unique<YieldCursor>(this, input_->MakeCursor(dba));
database::GraphDbAccessor *dba,
utils::MemoryResource *mem) const override {
return std::make_unique<YieldCursor>(this, input_->MakeCursor(dba, mem));
}
std::vector<query::Symbol> ModifiedSymbols(
const query::SymbolTable &) const override {

View File

@ -20,7 +20,8 @@ TEST_F(DistributedReset, ResetTest) {
auto dba = master().Access();
query::Frame frame(0);
query::ExecutionContext context{dba.get()};
auto pull_remote_cursor = pull_remote->MakeCursor(*dba);
auto pull_remote_cursor =
pull_remote->query::plan::LogicalOperator::MakeCursor(*dba);
for (int i = 0; i < 3; ++i) {
EXPECT_TRUE(pull_remote_cursor->Pull(frame, context));

View File

@ -42,7 +42,8 @@ std::vector<std::vector<TypedValue>> CollectProduce(const Produce &produce,
symbols.emplace_back(context->symbol_table.at(*named_expression));
// stream out results
auto cursor = produce.MakeCursor(*context->db_accessor);
auto cursor =
produce.query::plan::LogicalOperator::MakeCursor(*context->db_accessor);
std::vector<std::vector<TypedValue>> results;
while (cursor->Pull(frame, *context)) {
std::vector<TypedValue> values;

View File

@ -280,7 +280,8 @@ TEST(QueryPlan, Delete) {
n.op_, std::vector<Expression *>{n_get}, true);
Frame frame(symbol_table.max_position());
auto context = MakeContext(storage, symbol_table, &dba);
delete_op->MakeCursor(dba)->Pull(frame, context);
delete_op->query::plan::LogicalOperator::MakeCursor(dba)->Pull(frame,
context);
dba.AdvanceCommand();
EXPECT_EQ(3, CountIterable(dba.Vertices(false)));
EXPECT_EQ(3, CountIterable(dba.Edges(false)));