Fix IndexOf

pull/257/head
Christopher Jolly 1 year ago
parent 043a9905a7
commit bd279b6bc6

@ -308,29 +308,31 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
argumentsPropagateNullability, argumentsPropagateNullability,
method.ReturnType); method.ReturnType);
charIndexExpression = _sqlExpressionFactory.Subtract(charIndexExpression, _sqlExpressionFactory.Constant(1));
// If the pattern is an empty string, we need to special case to always return 0 (since CHARINDEX return 0, which we'd subtract to // If the pattern is an empty string, we need to special case to always return 0 (since CHARINDEX return 0, which we'd subtract to
// -1). Handle separately for constant and non-constant patterns. // -1). Handle separately for constant and non-constant patterns.
if (searchExpression is SqlConstantExpression { Value: string constantSearchPattern }) if (searchExpression is SqlConstantExpression { Value: "" })
{ {
return constantSearchPattern == string.Empty return _sqlExpressionFactory.Case(
? _sqlExpressionFactory.Constant(0, typeof(int)) [new(_sqlExpressionFactory.IsNotNull(instance), _sqlExpressionFactory.Constant(0))],
: charIndexExpression; elseResult: null
);
} }
return _sqlExpressionFactory.Case( SqlExpression offsetExpression = searchExpression is SqlConstantExpression
new[] ? _sqlExpressionFactory.Constant(1)
{ : _sqlExpressionFactory.Case(
new CaseWhenClause( new[]
_sqlExpressionFactory.Equal( {
searchExpression, new CaseWhenClause(
_sqlExpressionFactory.Constant(string.Empty, stringTypeMapping)), _sqlExpressionFactory.Equal(
_sqlExpressionFactory.Constant(0)) searchExpression,
}, _sqlExpressionFactory.Constant(string.Empty, stringTypeMapping)),
charIndexExpression); _sqlExpressionFactory.Constant(0))
} },
_sqlExpressionFactory.Constant(1));
return _sqlExpressionFactory.Subtract(charIndexExpression, offsetExpression);
}
} }
} }
Loading…
Cancel
Save