public override void ReplaceWith(SqlExpression expression)
        {
            ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
            ArgumentValidator.EnsureArgumentIs <SqlLike>(expression, "expression");
            SqlLike replacingExpression = expression as SqlLike;

            this.expression = replacingExpression.expression;
            pattern         = replacingExpression.Pattern;
            escape          = replacingExpression.Escape;
            not             = replacingExpression.Not;
        }
        internal override object Clone(SqlNodeCloneContext context)
        {
            if (context.NodeMapping.ContainsKey(this))
            {
                return(context.NodeMapping[this]);
            }

            var clone = new SqlLike((SqlExpression)expression.Clone(context),
                                    (SqlExpression)pattern.Clone(context),
                                    escape.IsNullReference() ? null : (SqlExpression)escape.Clone(context), not);

            context.NodeMapping[this] = clone;
            return(clone);
        }