Query::Plan::CreateExpand frame bugfix
Summary: CreateExpand now puts both node and edge on the frame. This is not unit-tested because it would require an infrastructure change, and the code is quite simple. Reviewers: teon.banek, buda, mislav.bradac Reviewed By: buda Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D187
This commit is contained in:
parent
1280e77fd3
commit
34cdbc2f39
@ -167,10 +167,10 @@ class CreateExpand : public LogicalOperator {
|
||||
// create an edge between the two nodes
|
||||
switch (self_.edge_atom_->direction_) {
|
||||
case EdgeAtom::Direction::LEFT:
|
||||
CreateEdge(v2, v1, evaluator);
|
||||
CreateEdge(v2, v1, frame, symbol_table, evaluator);
|
||||
break;
|
||||
case EdgeAtom::Direction::RIGHT:
|
||||
CreateEdge(v1, v2, evaluator);
|
||||
CreateEdge(v1, v2, frame, symbol_table, evaluator);
|
||||
break;
|
||||
case EdgeAtom::Direction::BOTH:
|
||||
permanent_fail("Undefined direction not allowed in create");
|
||||
@ -208,20 +208,22 @@ class CreateExpand : public LogicalOperator {
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for creating an edge.
|
||||
* Helper function for creating an edge and adding it
|
||||
* to the frame.
|
||||
*
|
||||
* @param from Origin vertex of the edge.
|
||||
* @param to Destination vertex of the edge.
|
||||
* @param evaluator Expression evaluator for property value eval.
|
||||
*/
|
||||
void CreateEdge(VertexAccessor &from, VertexAccessor &to,
|
||||
ExpressionEvaluator &evaluator) {
|
||||
void CreateEdge(VertexAccessor &from, VertexAccessor &to, Frame &frame,
|
||||
SymbolTable &symbol_table, ExpressionEvaluator &evaluator) {
|
||||
EdgeAccessor edge =
|
||||
db_.insert_edge(from, to, self_.edge_atom_->edge_types_[0]);
|
||||
for (auto kv : self_.edge_atom_->properties_) {
|
||||
kv.second->Accept(evaluator);
|
||||
edge.PropsSet(kv.first, evaluator.PopBack());
|
||||
}
|
||||
frame[symbol_table[*self_.edge_atom_->identifier_]] = edge;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -349,6 +349,7 @@ TEST(Interpreter, CreateExpand) {
|
||||
symbol_table[*m->identifier_] = symbol_table.CreateSymbol("m");
|
||||
|
||||
auto r = EDGE("r", EdgeAtom::Direction::RIGHT);
|
||||
symbol_table[*r->identifier_] = symbol_table.CreateSymbol("r");
|
||||
r->edge_types_.emplace_back(edge_type);
|
||||
r->properties_[property] = LITERAL(3);
|
||||
|
||||
@ -452,6 +453,7 @@ TEST(Interpreter, MatchCreateExpand) {
|
||||
symbol_table[*m->identifier_] = symbol_table.CreateSymbol("m");
|
||||
|
||||
auto r = EDGE("r", EdgeAtom::Direction::RIGHT);
|
||||
symbol_table[*r->identifier_] = symbol_table.CreateSymbol("r");
|
||||
r->edge_types_.emplace_back(edge_type);
|
||||
|
||||
auto create_expand = std::make_shared<CreateExpand>(
|
||||
|
Loading…
Reference in New Issue
Block a user