private static SqlCondition MergeConditions(SqlCondition cLeft, SqlCondition cRight, SqlLogicOperation op)
		{
			if (cLeft == null)
				return cRight;
			if (cRight == null)
				return cLeft;
	
#if SQL_OPTIMIZATION
			if (cLeft is SqlComplexCondition) 
			{
				SqlComplexCondition ccLeft = (SqlComplexCondition) cLeft;
				if (ccLeft.Operation == op)
					return ccLeft.AppendEnd(cRight);
			}
#endif
	
			return new SqlComplexCondition(op, cLeft, cRight);
		}
        private static SqlCondition MergeConditions(SqlCondition cLeft, SqlCondition cRight, SqlLogicOperation op)
        {
            if (cLeft == null)
            {
                return(cRight);
            }
            if (cRight == null)
            {
                return(cLeft);
            }

#if SQL_OPTIMIZATION
            if (cLeft is SqlComplexCondition)
            {
                SqlComplexCondition ccLeft = (SqlComplexCondition)cLeft;
                if (ccLeft.Operation == op)
                {
                    return(ccLeft.AppendEnd(cRight));
                }
            }
#endif

            return(new SqlComplexCondition(op, cLeft, cRight));
        }
		/// <summary>
		/// Cria uma nova condição complexa SQL.
		/// </summary>
		/// <param name="op">O operador (pode ser E ou OU)</param>
		/// <param name="cond1">A condição da esquerda</param>
		/// <param name="cond2">A condição da direita</param>
		public SqlComplexCondition(SqlLogicOperation op, SqlCondition cond1, SqlCondition cond2) 
		{
			this.op = op;
			conds.Add(cond1);
			conds.Add(cond2);
		}
 /// <summary>
 /// Cria uma nova condição complexa SQL.
 /// </summary>
 /// <param name="op">O operador (pode ser E ou OU)</param>
 /// <param name="cond1">A condição da esquerda</param>
 /// <param name="cond2">A condição da direita</param>
 public SqlComplexCondition(SqlLogicOperation op, SqlCondition cond1, SqlCondition cond2)
 {
     this.op = op;
     conds.Add(cond1);
     conds.Add(cond2);
 }