Beispiel #1
0
        protected override Expression VisitSqlFunction(SqlFunctionExpression sqlFunctionExpression)
        {
            Check.NotNull(sqlFunctionExpression, nameof(sqlFunctionExpression));

            var canOptimize = _canOptimize;

            _canOptimize = false;

            if (sqlFunctionExpression.IsBuiltIn &&
                string.Equals(sqlFunctionExpression.Name, "COALESCE", StringComparison.OrdinalIgnoreCase))
            {
                _isNullable = false;
                var newLeft      = (SqlExpression)Visit(sqlFunctionExpression.Arguments[0]);
                var leftNullable = _isNullable;

                _isNullable = false;
                var newRight      = (SqlExpression)Visit(sqlFunctionExpression.Arguments[1]);
                var rightNullable = _isNullable;

                _isNullable  = leftNullable && rightNullable;
                _canOptimize = canOptimize;

                return(sqlFunctionExpression.Update(sqlFunctionExpression.Instance, new[] { newLeft, newRight }));
            }

            var newInstance  = (SqlExpression)Visit(sqlFunctionExpression.Instance);
            var newArguments = new SqlExpression[sqlFunctionExpression.Arguments.Count];

            for (var i = 0; i < newArguments.Length; i++)
            {
                newArguments[i] = (SqlExpression)Visit(sqlFunctionExpression.Arguments[i]);
            }

            _canOptimize = canOptimize;

            // TODO: #18555
            _isNullable = true;

            return(sqlFunctionExpression.Update(newInstance, newArguments));
        }
        private SqlFunctionExpression VisitSqlFunctionExpression(SqlFunctionExpression sqlFunctionExpression)
        {
            var newInstance  = (SqlExpression)Visit(sqlFunctionExpression.Instance);
            var isNullable   = _isNullable;
            var newArguments = new SqlExpression[sqlFunctionExpression.Arguments.Count];

            for (var i = 0; i < newArguments.Length; i++)
            {
                newArguments[i] = (SqlExpression)Visit(sqlFunctionExpression.Arguments[i]);
                isNullable     |= _isNullable;
            }

            _isNullable = isNullable;

            return(sqlFunctionExpression.Update(newInstance, newArguments));
        }
Beispiel #3
0
        protected override Expression VisitSqlFunction(SqlFunctionExpression sqlFunctionExpression)
        {
            var parentSearchCondition = _isSearchCondition;

            _isSearchCondition = false;
            var instance  = (SqlExpression)Visit(sqlFunctionExpression.Instance);
            var arguments = new SqlExpression[sqlFunctionExpression.Arguments.Count];

            for (var i = 0; i < arguments.Length; i++)
            {
                arguments[i] = (SqlExpression)Visit(sqlFunctionExpression.Arguments[i]);
            }

            _isSearchCondition = parentSearchCondition;
            var newFunction = sqlFunctionExpression.Update(instance, arguments);

            var condition = string.Equals(sqlFunctionExpression.FunctionName, "FREETEXT") ||
                            string.Equals(sqlFunctionExpression.FunctionName, "CONTAINS");

            return(ApplyConversion(newFunction, condition));
        }
        protected override Expression VisitSqlFunction(SqlFunctionExpression sqlFunctionExpression)
        {
            var canOptimize = _canOptimize;

            _canOptimize = false;

            var newInstance  = (SqlExpression)Visit(sqlFunctionExpression.Instance);
            var newArguments = new SqlExpression[sqlFunctionExpression.Arguments.Count];

            for (var i = 0; i < newArguments.Length; i++)
            {
                newArguments[i] = (SqlExpression)Visit(sqlFunctionExpression.Arguments[i]);
            }

            _canOptimize = canOptimize;

            // TODO: #18555
            _isNullable = true;

            return(sqlFunctionExpression.Update(newInstance, newArguments));
        }
 protected override Expression VisitSqlFunction(SqlFunctionExpression x)
 {
     return(x?.Update(x.Instance.VisitNode(this) as SqlExpression, x.Arguments.VisitAll(this)));
 }