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