internal JoinExpression(SourceExpression left, SourceExpression right, JoinType joinType, Expression comparison)
			: base(CompleteExpressionType.Join, null)
		{
			this.Left = left;
			this.Right = right;
			this.JoinType = joinType;
			this.Comparison = comparison;

			base._Columns = left.Columns.Union(right.Columns).ToList();
			base._Assignments = left.Assignments.Union(right.Assignments).ToList();
		}
		internal void UpdateSource(SourceExpression exp)
		{
			this.From = exp;
		}
		public static JoinExpression Join(SourceExpression left, SourceExpression right, JoinType joinType, Expression comparison = null)
		{
			return new JoinExpression(left, right, joinType, comparison);
		}
		internal FromExpression(SourceExpression from)
			: base(CompleteExpressionType.From, from.Type)
		{
			this.From = from;
		}
		public static FromExpression From(SourceExpression from)
		{
			return new FromExpression(from);
		}