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)); }