private void CheckJoinCondition(SqlExpression expr) { switch (expr.NodeType) { case SqlNodeType.EQ: case SqlNodeType.EQ2V: { SqlBinary binary2 = (SqlBinary)expr; SqlColumnRef left = binary2.Left as SqlColumnRef; SqlColumnRef right = binary2.Right as SqlColumnRef; if ((left != null) && (right != null)) { SqlColumn rootColumn = left.GetRootColumn(); SqlColumn column2 = right.GetRootColumn(); this.map[rootColumn] = column2; this.map[column2] = rootColumn; } return; } case SqlNodeType.And: { SqlBinary binary = (SqlBinary)expr; this.CheckJoinCondition(binary.Left); this.CheckJoinCondition(binary.Right); return; } } }
internal bool AreEquivalent(SqlExpression e1, SqlExpression e2) { SqlColumn column3; if (SqlComparer.AreEqual(e1, e2)) { return(true); } SqlColumnRef ref2 = e1 as SqlColumnRef; SqlColumnRef ref3 = e2 as SqlColumnRef; if ((ref2 == null) || (ref3 == null)) { return(false); } SqlColumn rootColumn = ref2.GetRootColumn(); SqlColumn column2 = ref3.GetRootColumn(); return(this.map.TryGetValue(rootColumn, out column3) && (column3 == column2)); }