Exemplo n.º 1
0
        protected override FunctionResolveResult ResolveSqlFunction(SqlFunctionCallExpression functionCallExpression)
        {
            var function  = functionCallExpression.Function;
            var arguments = functionCallExpression.Arguments;

            switch (function)
            {
            case SqlFunction.ServerUtcNow:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%Y-%m-%d %H:%M:%f0000", "now"), null, arguments));

            case SqlFunction.Concat:
                return(new FunctionResolveResult("||", true, arguments));

            case SqlFunction.ServerNow:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%Y-%m-%d %H:%M:%f0000", "now", "localtime"), null, arguments));

            case SqlFunction.TimeSpanFromSeconds:
                return(new FunctionResolveResult("", false, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, arguments[0], Expression.Constant(" seconds")))
                {
                    excludeParenthesis = true
                });

            case SqlFunction.TimeSpanFromMinutes:
                return(new FunctionResolveResult("", false, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, arguments[0], Expression.Constant(" minutes")))
                {
                    excludeParenthesis = true
                });

            case SqlFunction.TimeSpanFromHours:
                return(new FunctionResolveResult("", false, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, arguments[0], Expression.Constant(" hours")))
                {
                    excludeParenthesis = true
                });

            case SqlFunction.TimeSpanFromDays:
                return(new FunctionResolveResult("", false, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, arguments[0], Expression.Constant(" days")))
                {
                    excludeParenthesis = true
                });

            case SqlFunction.DateTimeAddTimeSpan:
                return(new FunctionResolveResult("STRFTIME", false, Expression.Constant("%Y-%m-%d %H:%M:%f0000"), arguments[0], arguments[1]));

            case SqlFunction.Year:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%Y"), null, arguments));

            case SqlFunction.Month:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%m"), null, arguments));

            case SqlFunction.Week:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%W"), null, arguments));

            case SqlFunction.DayOfYear:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%j"), null, arguments));

            case SqlFunction.DayOfMonth:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%d"), null, arguments));

            case SqlFunction.DayOfWeek:
                return(new FunctionResolveResult("STRFTIME", false, FunctionResolveResult.MakeArguments("%w"), null, arguments));

            case SqlFunction.Substring:
                return(new FunctionResolveResult("SUBSTR", false, arguments));

            case SqlFunction.TrimLeft:
                return(new FunctionResolveResult("LTRIM", false, arguments));

            case SqlFunction.TrimRight:
                return(new FunctionResolveResult("RTRIM", false, arguments));
            }

            return(base.ResolveSqlFunction(functionCallExpression));
        }
        protected override FunctionResolveResult ResolveSqlFunction(SqlFunctionCallExpression functionCallExpression)
        {
            var function  = functionCallExpression.Function;
            var arguments = functionCallExpression.Arguments;

            switch (function)
            {
            case SqlFunction.ServerUtcNow:
                return(new FunctionResolveResult("(NOW() at time zone 'utc')", false, arguments)
                {
                    excludeParenthesis = true
                });

            case SqlFunction.TimeSpanFromSeconds:
                return(new FunctionResolveResult("", true, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, Expression.Call(arguments[0], MethodInfoFastRef.ObjectToStringMethod), Expression.Constant(" seconds")))
                {
                    functionSuffix = "::interval"
                });

            case SqlFunction.TimeSpanFromMinutes:
                return(new FunctionResolveResult("", true, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, Expression.Call(arguments[0], MethodInfoFastRef.ObjectToStringMethod), Expression.Constant(" minutes")))
                {
                    functionSuffix = "::interval"
                });

            case SqlFunction.TimeSpanFromHours:
                return(new FunctionResolveResult("", true, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, Expression.Call(arguments[0], MethodInfoFastRef.ObjectToStringMethod), Expression.Constant(" hours")))
                {
                    functionSuffix = "::interval"
                });

            case SqlFunction.TimeSpanFromDays:
                return(new FunctionResolveResult("", true, new SqlFunctionCallExpression(typeof(string), SqlFunction.Concat, Expression.Call(arguments[0], MethodInfoFastRef.ObjectToStringMethod), Expression.Constant(" days")))
                {
                    functionSuffix = "::interval"
                });

            case SqlFunction.DateTimeAddTimeSpan:
                return(new FunctionResolveResult("+", true, arguments));

            case SqlFunction.Concat:
                return(new FunctionResolveResult("||", true, arguments));

            case SqlFunction.TrimLeft:
                return(new FunctionResolveResult("LTRIM", false, arguments));

            case SqlFunction.TrimRight:
                return(new FunctionResolveResult("RTRIM", false, arguments));

            case SqlFunction.Round:
                return(new FunctionResolveResult("ROUND", false, arguments));

            case SqlFunction.DayOfMonth:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("DAY"), null, arguments));

            case SqlFunction.DayOfWeek:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("DOW"), null, arguments));

            case SqlFunction.DayOfYear:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("DOY"), null, arguments));

            case SqlFunction.Year:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("YEAR"), null, arguments));

            case SqlFunction.Month:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("MONTH"), null, arguments));

            case SqlFunction.Hour:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("HOUR"), null, arguments));

            case SqlFunction.Second:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("SECOND"), null, arguments));

            case SqlFunction.Minute:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("MINUTE"), null, arguments));

            case SqlFunction.Week:
                return(new FunctionResolveResult("date_part", false, FunctionResolveResult.MakeArguments("WEEK"), null, arguments));

            case SqlFunction.StringLength:
                return(new FunctionResolveResult("char_length", false, arguments));
            }

            return(base.ResolveSqlFunction(functionCallExpression));
        }