Beispiel #1
0
 public virtual void Visit(JoinFromNode node)
 {
     node.Source.Accept(this);
     node.With.Accept(this);
     node.Expression.Accept(this);
     node.Accept(Visitor);
 }
        public void Visit(JoinFromNode node)
        {
            var joins = new Stack <JoinFromNode>();

            var join = node;

            while (join != null)
            {
                joins.Push(join);
                join = join.Source as JoinFromNode;
            }

            join = joins.Pop();

            join.Source.Accept(this);
            join.With.Accept(this);
            join.Expression.Accept(this);

            while (joins.Count > 1)
            {
                join = joins.Pop();
                join.With.Accept(this);
                join.Expression.Accept(this);
            }

            if (joins.Count > 0)
            {
                join = joins.Pop();
                join.With.Accept(this);
                join.Expression.Accept(this);
            }

            join.Accept(_visitor);
        }
Beispiel #3
0
        public void Visit(JoinFromNode node)
        {
            var exp   = Nodes.Pop();
            var right = (FromNode)Nodes.Pop();
            var left  = (FromNode)Nodes.Pop();

            Nodes.Push(new JoinFromNode(left, right, exp, node.JoinType));
            _joinedTables.Add(node);
        }
Beispiel #4
0
        public virtual void Visit(JoinFromNode node)
        {
            var expression  = Nodes.Pop();
            var joinedTable = (FromNode)Nodes.Pop();
            var source      = (FromNode)Nodes.Pop();
            var joinedFrom  = new JoinFromNode(source, joinedTable, expression, node.JoinType);

            Nodes.Push(joinedFrom);
        }
        public void Visit(JoinFromNode node)
        {
            var expression  = Nodes.Pop();
            var joinedTable = (FromNode)Nodes.Pop();
            var source      = (FromNode)Nodes.Pop();
            var joinedFrom  = new JoinFromNode(source, joinedTable, expression, node.JoinType);

            _identifier = joinedFrom.Alias;
            Nodes.Push(joinedFrom);
        }
        public void Visit(JoinFromNode node)
        {
            SetQueryPart(QueryPart.From);
            var joins = new Stack <JoinFromNode>();

            var join = node;

            while (join != null)
            {
                joins.Push(join);
                join = join.Source as JoinFromNode;
            }

            join = joins.Pop();
            join.Source.Accept(this);
            join.With.Accept(this);

            var firstTableSymbol  = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(Scope[join.Source.Id]);
            var secondTableSymbol = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(Scope[join.With.Id]);

            var id = $"{Scope[join.Source.Id]}{Scope[join.With.Id]}";

            Scope.ScopeSymbolTable.AddSymbol(id, firstTableSymbol.MergeSymbols(secondTableSymbol));
            Scope[MetaAttributes.ProcessedQueryId] = id;

            join.Expression.Accept(this);
            join.Accept(_visitor);

            while (joins.Count > 0)
            {
                join = joins.Pop();
                join.With.Accept(this);

                var currentTableSymbol  = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(Scope[join.With.Id]);
                var previousTableSymbol = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(id);

                id = $"{id}{Scope[join.With.Id]}";

                Scope.ScopeSymbolTable.AddSymbol(id, previousTableSymbol.MergeSymbols(currentTableSymbol));
                Scope[MetaAttributes.ProcessedQueryId] = id;

                join.Expression.Accept(this);
                join.Accept(_visitor);
            }
        }
Beispiel #7
0
 public void Visit(JoinFromNode node)
 {
 }
Beispiel #8
0
 public override void Visit(JoinFromNode node)
 {
     Visitor.SetQueryPart(QueryPart.From);
     base.Visit(node);
     Visitor.SetQueryPart(QueryPart.None);
 }
        public void Visit(JoinFromNode node)
        {
            SetQueryPart(QueryPart.From);
            var joins = new Stack <JoinFromNode>();

            var join = node;

            while (join != null)
            {
                joins.Push(join);
                join = join.Source as JoinFromNode;
            }

            join = joins.Pop();
            join.Source.Accept(this);
            join.With.Accept(this);

            var firstTableSymbol  = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(Scope[join.Source.Id]);
            var secondTableSymbol = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(Scope[join.With.Id]);

            switch (join.JoinType)
            {
            case JoinType.Inner:
                break;

            case JoinType.OuterLeft:
                secondTableSymbol = secondTableSymbol.MakeNullableIfPossible();
                Scope.ScopeSymbolTable.UpdateSymbol(Scope[join.With.Id], secondTableSymbol);
                break;

            case JoinType.OuterRight:
                firstTableSymbol = firstTableSymbol.MakeNullableIfPossible();
                Scope.ScopeSymbolTable.UpdateSymbol(Scope[join.Source.Id], firstTableSymbol);
                break;
            }

            var id = $"{Scope[join.Source.Id]}{Scope[join.With.Id]}";

            Scope.ScopeSymbolTable.AddSymbol(id, firstTableSymbol.MergeSymbols(secondTableSymbol));
            Scope[MetaAttributes.ProcessedQueryId] = id;

            join.Expression.Accept(this);
            join.Accept(_visitor);

            while (joins.Count > 0)
            {
                join = joins.Pop();
                join.With.Accept(this);

                var currentTableSymbol  = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(Scope[join.With.Id]);
                var previousTableSymbol = Scope.ScopeSymbolTable.GetSymbol <TableSymbol>(id);

                switch (join.JoinType)
                {
                case JoinType.Inner:
                    break;

                case JoinType.OuterLeft:
                    currentTableSymbol = currentTableSymbol.MakeNullableIfPossible();
                    Scope.ScopeSymbolTable.UpdateSymbol(Scope[join.With.Id], currentTableSymbol);
                    break;

                case JoinType.OuterRight:
                    previousTableSymbol = previousTableSymbol.MakeNullableIfPossible();
                    Scope.ScopeSymbolTable.UpdateSymbol(id, previousTableSymbol);
                    break;
                }

                id = $"{id}{Scope[join.With.Id]}";

                Scope.ScopeSymbolTable.AddSymbol(id, previousTableSymbol.MergeSymbols(currentTableSymbol));
                Scope[MetaAttributes.ProcessedQueryId] = id;

                join.Expression.Accept(this);
                join.Accept(_visitor);
            }
        }