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); }
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); }
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); } }
public void Visit(JoinFromNode node) { }
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); } }