Skip to content

Commit 542c3d2

Browse files
authored
Fix to #30326 - Query: converter from bool used in predicate without comparison fails on sqlite (and other non-sql server backends?) (#30666)
RelationalValueConverterCompensatingExpressionVisitor was not compensating for bool values with converters for JsonScalarExpression. Fixes #30326
1 parent 6c5ac1e commit 542c3d2

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

src/EFCore.Relational/Query/Internal/RelationalValueConverterCompensatingExpressionVisitor.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,9 @@ private Expression VisitLeftJoin(LeftJoinExpression leftJoinExpression)
142142
[return: NotNullIfNotNull("sqlExpression")]
143143
private SqlExpression? TryCompensateForBoolWithValueConverter(SqlExpression? sqlExpression)
144144
{
145-
if (sqlExpression is ColumnExpression columnExpression
146-
&& columnExpression.TypeMapping!.ClrType == typeof(bool)
147-
&& columnExpression.TypeMapping.Converter != null)
145+
if ((sqlExpression is ColumnExpression or JsonScalarExpression)
146+
&& sqlExpression.TypeMapping!.ClrType == typeof(bool)
147+
&& sqlExpression.TypeMapping.Converter != null)
148148
{
149149
return _sqlExpressionFactory.Equal(
150150
sqlExpression,

test/EFCore.Sqlite.FunctionalTests/Query/JsonQuerySqliteTest.cs

+18-6
Original file line numberDiff line numberDiff line change
@@ -67,28 +67,40 @@ await AssertQuery(
6767
""");
6868
}
6969

70-
[ConditionalTheory(Skip = "issue #30326")]
7170
public override async Task Json_predicate_on_bool_converted_to_int_zero_one(bool async)
7271
{
7372
await base.Json_predicate_on_bool_converted_to_int_zero_one(async);
7473

75-
AssertSql();
74+
AssertSql(
75+
"""
76+
SELECT "j"."Id", "j"."Reference"
77+
FROM "JsonEntitiesConverters" AS "j"
78+
WHERE json_extract("j"."Reference", '$.BoolConvertedToIntZeroOne') = 1
79+
""");
7680
}
7781

78-
[ConditionalTheory(Skip = "issue #30326")]
7982
public override async Task Json_predicate_on_bool_converted_to_string_True_False(bool async)
8083
{
8184
await base.Json_predicate_on_bool_converted_to_string_True_False(async);
8285

83-
AssertSql();
86+
AssertSql(
87+
"""
88+
SELECT "j"."Id", "j"."Reference"
89+
FROM "JsonEntitiesConverters" AS "j"
90+
WHERE json_extract("j"."Reference", '$.BoolConvertedToStringTrueFalse') = 'True'
91+
""");
8492
}
8593

86-
[ConditionalTheory(Skip = "issue #30326")]
8794
public override async Task Json_predicate_on_bool_converted_to_string_Y_N(bool async)
8895
{
8996
await base.Json_predicate_on_bool_converted_to_string_Y_N(async);
9097

91-
AssertSql();
98+
AssertSql(
99+
"""
100+
SELECT "j"."Id", "j"."Reference"
101+
FROM "JsonEntitiesConverters" AS "j"
102+
WHERE json_extract("j"."Reference", '$.BoolConvertedToStringYN') = 'Y'
103+
""");
92104
}
93105

94106
private void AssertSql(params string[] expected)

0 commit comments

Comments
 (0)