private JoinEdge( AugmentedTableNode left, AugmentedTableNode right, AugmentedJoinNode joinNode, JoinKind joinKind, List<ColumnVar> leftVars, List<ColumnVar> rightVars) { m_left = left; m_right = right; JoinKind = joinKind; m_joinNode = joinNode; m_leftVars = leftVars; m_rightVars = rightVars; PlanCompiler.Assert(m_leftVars.Count == m_rightVars.Count, "Count mismatch: " + m_leftVars.Count + "," + m_rightVars.Count); }
/// <summary> /// Add a new "equi-join" condition to this edge /// </summary> /// <param name="joinNode">join node producing this condition</param> /// <param name="leftVar">the left-side column</param> /// <param name="rightVar">the right-side column</param> /// <returns>true, if this condition can be added</returns> internal bool AddCondition(AugmentedJoinNode joinNode, ColumnVar leftVar, ColumnVar rightVar) { if (joinNode != m_joinNode) { return false; } m_leftVars.Add(leftVar); m_rightVars.Add(rightVar); return true; }
internal static JoinEdge CreateJoinEdge( AugmentedTableNode left, AugmentedTableNode right, AugmentedJoinNode joinNode, ColumnVar leftVar, ColumnVar rightVar) { var leftVars = new List<ColumnVar>(); var rightVars = new List<ColumnVar>(); leftVars.Add(leftVar); rightVars.Add(rightVar); var joinOpType = joinNode.Node.Op.OpType; PlanCompiler.Assert( (joinOpType == OpType.LeftOuterJoin || joinOpType == OpType.InnerJoin), "Unexpected join type for join edge: " + joinOpType); var joinKind = joinOpType == OpType.LeftOuterJoin ? JoinKind.LeftOuter : JoinKind.Inner; var joinEdge = new JoinEdge(left, right, joinNode, joinKind, leftVars, rightVars); return joinEdge; }