Change option from 0 to 1 for InStr. Make it use vbTextCompare which is case insensitive

pull/131/head
Christopher Jolly 3 years ago
parent ca1b158a72
commit 59bc0d813a

@ -84,8 +84,8 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
return _sqlExpressionFactory.Function(
sqlFunctionName,
arguments,
false,
new[] {false},
true,
new[] {true},
method.ReturnType);
}
@ -121,8 +121,8 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
)
)
},
false,
new[] {false},
true,
new[] {true},
method.ReturnType)),
// Arcsin(X) = Atn(X / Sqr(-X * X + 1))
@ -151,20 +151,20 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
)
)
},
false,
new[] {false},
true,
new[] {true},
method.ReturnType),
// Logn(x) = Log(x) / Log(n)
nameof(Math.Log10) => _sqlExpressionFactory.Divide(
_sqlExpressionFactory.Function("LOG", new[] {arguments[0]}, false, new[] {false}, method.ReturnType),
_sqlExpressionFactory.Function("LOG", new[] {arguments[0]}, true, new[] {true}, method.ReturnType),
_sqlExpressionFactory.Constant(Math.Log(10))
),
// Math.Log(x, n) //Logn(x) = Log(x) / Log(n)
nameof(Math.Log) => _sqlExpressionFactory.Divide(
_sqlExpressionFactory.Function("LOG", new[] {arguments[0]}, false, new[] {false}, method.ReturnType),
_sqlExpressionFactory.Function("LOG", new[] {arguments[1]}, false, new[] {false}, method.ReturnType)
_sqlExpressionFactory.Function("LOG", new[] {arguments[0]}, true, new[] {true}, method.ReturnType),
_sqlExpressionFactory.Function("LOG", new[] {arguments[1]}, true, new[] {true}, method.ReturnType)
),
_ => null,
@ -176,8 +176,8 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
return _sqlExpressionFactory.Function(
"INT",
new[] {arguments[0]},
false,
new[] {false},
true,
new[] {true},
method.ReturnType);
}
@ -188,8 +188,8 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
arguments.Count == 1
? new[] {arguments[0], _sqlExpressionFactory.Constant(0)}
: new[] {arguments[0], arguments[1]},
false,
new[] {false},
true,
new[] {true},
method.ReturnType);
}

@ -101,7 +101,7 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
|| string.Equals(storeType, "varchar(max)", StringComparison.OrdinalIgnoreCase))
{
charIndexExpression = _sqlExpressionFactory.Function(
"INSTR",
"InStr",
new[] { _sqlExpressionFactory.ApplyTypeMapping(instance, stringTypeMapping), argument },
nullable: true,
argumentsPropagateNullability: new[] { true, true },
@ -112,7 +112,7 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
else
{
charIndexExpression = _sqlExpressionFactory.Function(
"INSTR",
"InStr",
new[] { _sqlExpressionFactory.ApplyTypeMapping(instance, stringTypeMapping), argument },
nullable: true,
argumentsPropagateNullability: new[] { true, true },
@ -120,7 +120,17 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
}
charIndexExpression = _sqlExpressionFactory.Subtract(charIndexExpression, _sqlExpressionFactory.Constant(1));
return charIndexExpression;
return _sqlExpressionFactory.Case(
new[]
{
new CaseWhenClause(
_sqlExpressionFactory.Equal(
instance,
_sqlExpressionFactory.Constant(string.Empty, stringTypeMapping)),
_sqlExpressionFactory.Constant(0))
},
charIndexExpression);
}
if (Equals(method, _containsMethodInfo))
@ -138,7 +148,7 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
_sqlExpressionFactory.Constant(1),
instance,
patternExpression,
_sqlExpressionFactory.Constant(0)
_sqlExpressionFactory.Constant(1)
},
false,
new[] {false},

Loading…
Cancel
Save