From 1cf4b95c58d69259cbd9aaa9b81646055e5cb325 Mon Sep 17 00:00:00 2001 From: Mislav Bradac Date: Mon, 27 Mar 2017 11:28:37 +0200 Subject: [PATCH] Add ast nodes for SET clause Reviewers: teon.banek Reviewed By: teon.banek Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D182 --- src/query/frontend/ast/ast.hpp | 50 ++++++++++++++++++++++++++ src/query/frontend/ast/ast_visitor.hpp | 6 +++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/query/frontend/ast/ast.hpp b/src/query/frontend/ast/ast.hpp index c02d6cfa1..c94241eaf 100644 --- a/src/query/frontend/ast/ast.hpp +++ b/src/query/frontend/ast/ast.hpp @@ -560,6 +560,56 @@ class Where : public Tree { Where(int uid) : Tree(uid) {} }; +class SetProperty : public Clause { + friend class AstTreeStorage; + + public: + void Accept(TreeVisitorBase &visitor) override { + visitor.Visit(*this); + property_lookup_->Accept(visitor); + expression_->Accept(visitor); + visitor.PostVisit(*this); + } + PropertyLookup *property_lookup_ = nullptr; + Expression *expression_ = nullptr; + + protected: + SetProperty(int uid) : Clause(uid) {} +}; + +class SetProperties : public Clause { + friend class AstTreeStorage; + + public: + void Accept(TreeVisitorBase &visitor) override { + visitor.Visit(*this); + identifier_->Accept(visitor); + expression_->Accept(visitor); + visitor.PostVisit(*this); + } + Identifier *identifier_ = nullptr; + Expression *expression_ = nullptr; + + protected: + SetProperties(int uid) : Clause(uid) {} +}; + +class SetLabels : public Clause { + friend class AstTreeStorage; + + public: + void Accept(TreeVisitorBase &visitor) override { + visitor.Visit(*this); + identifier_->Accept(visitor); + visitor.PostVisit(*this); + } + Identifier *identifier_ = nullptr; + std::vector labels_; + + protected: + SetLabels(int uid) : Clause(uid) {} +}; + // It would be better to call this AstTree, but we already have a class Tree, // which could be renamed to Node or AstTreeNode, but we also have a class // called NodeAtom... diff --git a/src/query/frontend/ast/ast_visitor.hpp b/src/query/frontend/ast/ast_visitor.hpp index a5f5ef2fa..2e3ad504d 100644 --- a/src/query/frontend/ast/ast_visitor.hpp +++ b/src/query/frontend/ast/ast_visitor.hpp @@ -35,6 +35,9 @@ class LessEqualOperator; class GreaterEqualOperator; class Delete; class Where; +class SetProperty; +class SetProperties; +class SetLabels; using TreeVisitorBase = ::utils::Visitor< Query, NamedExpression, OrOperator, XorOperator, AndOperator, NotOperator, @@ -42,5 +45,6 @@ using TreeVisitorBase = ::utils::Visitor< DivisionOperator, ModOperator, NotEqualOperator, EqualOperator, LessOperator, GreaterOperator, LessEqualOperator, GreaterEqualOperator, UnaryPlusOperator, UnaryMinusOperator, Identifier, Literal, PropertyLookup, - Create, Match, Return, Pattern, NodeAtom, EdgeAtom, Delete, Where>; + Create, Match, Return, Pattern, NodeAtom, EdgeAtom, Delete, Where, + SetProperty, SetProperties, SetLabels>; }