public void Visit(CreateTransformationTableNode node)
        {
            _walker = _walker.NextChild();
            _visitor.SetScope(_walker.Scope);

            node.Accept(_visitor);

            _walker = _walker.Parent();
        }
        private void TraverseSetOperator(SetOperatorNode node)
        {
            _walker = _walker.NextChild();
            _visitor.SetScope(_walker.Scope);

            if (node.Right is SetOperatorNode)
            {
                var nodes = new Stack <SetOperatorNode>();
                nodes.Push(node);

                node.Left.Accept(this);
                _visitor.IncrementMethodIdentifier();

                while (nodes.Count > 0)
                {
                    var current = nodes.Pop();

                    if (current.Right is SetOperatorNode operatorNode)
                    {
                        nodes.Push(operatorNode);

                        _walker = _walker.NextChild();
                        _visitor.SetScope(_walker.Scope);

                        operatorNode.Left.Accept(this);
                        _visitor.IncrementMethodIdentifier();

                        current.Accept(_visitor);
                    }
                    else
                    {
                        current.Right.Accept(this);
                        _visitor.IncrementMethodIdentifier();

                        current.Accept(_visitor);
                    }
                }
            }
            else
            {
                node.Left.Accept(this);

                _visitor.IncrementMethodIdentifier();

                node.Right.Accept(this);

                node.Accept(_visitor);

                _walker = _walker.Parent();
                _visitor.SetScope(_walker.Scope);
            }
        }
Example #3
0
        public void Visit(QueryNode node)
        {
            _walker = _walker.NextChild();
            _visitor.SetScope(_walker.Scope);

            node.From.Accept(this);
            node.Where?.Accept(this);
            node.Select.Accept(this);

            node.Take?.Accept(this);
            node.Skip?.Accept(this);
            node.GroupBy?.Accept(this);
            node.OrderBy?.Accept(this);
            node.Accept(_visitor);

            _walker = _walker.Parent();
            _visitor.SetScope(_walker.Scope);
        }