public virtual SqlExpression Translate(SqlExpression instance, MethodInfo method, IReadOnlyList <SqlExpression> arguments) { if (_methodInfoDatePartMapping.TryGetValue(method, out var datePart)) { return(!datePart.Equals("year") && !datePart.Equals("month") && arguments[0] is SqlConstantExpression sqlConstant && ((double)sqlConstant.Value >= int.MaxValue || (double)sqlConstant.Value <= int.MinValue) ? null : _sqlExpressionFactory.Function( "DATE_ADD", new[] { instance, _sqlExpressionFactory.ComplexFunctionArgument(new SqlExpression[] { _sqlExpressionFactory.Fragment("INTERVAL"), _sqlExpressionFactory.Convert(arguments[0], typeof(int)), _sqlExpressionFactory.Fragment(datePart) }, typeof(string)) }, instance.Type, instance.TypeMapping)); } return(null); }
private SqlExpression ProcessTrimMethod(SqlExpression instance, SqlExpression trimChar, string locationSpecifier) { // Builds a TRIM({BOTH | LEADING | TRAILING} remstr FROM str) expression. var sqlArguments = new List <SqlExpression>(); if (locationSpecifier != null) { sqlArguments.Add(_sqlExpressionFactory.Fragment(locationSpecifier)); } if (trimChar != null) { var constantValue = (trimChar as SqlConstantExpression)?.Value; if (constantValue is char singleChar) { sqlArguments.Add(_sqlExpressionFactory.Constant(singleChar)); } else if (constantValue is char[] charArray && charArray.Length <= 1) { if (charArray.Length == 1) { sqlArguments.Add(_sqlExpressionFactory.Constant(charArray[0])); } } else { return(null); } }