Skip to content

Commit e762fa9

Browse files
authored
[automated] Merge branch 'release/10.0' => 'main' (#37637)
2 parents e077efb + e98837b commit e762fa9

File tree

4 files changed

+66
-39
lines changed

4 files changed

+66
-39
lines changed

src/EFCore.SqlServer/Query/Internal/SqlServerSqlNullabilityProcessor.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ protected override SqlExpression VisitIn(InExpression inExpression, bool allowOp
268268
out var constants,
269269
out var containsNulls))
270270
{
271+
var columnName = RelationalQueryableMethodTranslatingExpressionVisitor.ValuesValueColumnName;
272+
271273
inExpression = (openJson, constants) switch
272274
{
273275
(not null, null)
@@ -279,12 +281,12 @@ protected override SqlExpression VisitIn(InExpression inExpression, bool allowOp
279281
[
280282
new ProjectionExpression(
281283
new ColumnExpression(
282-
"value",
284+
columnName,
283285
openJson.Alias,
284286
valuesParameter.Type.GetSequenceType(),
285287
elementTypeMapping,
286288
containsNulls!.Value),
287-
"value")
289+
columnName)
288290
],
289291
null!)),
290292

@@ -340,7 +342,7 @@ private bool TryHandleOverLimitParameters(
340342
[
341343
new SqlServerOpenJsonExpression.ColumnInfo
342344
{
343-
Name = "value",
345+
Name = RelationalQueryableMethodTranslatingExpressionVisitor.ValuesValueColumnName,
344346
TypeMapping = typeMapping,
345347
Path = [],
346348
}

test/EFCore.SqlServer.FunctionalTests/Query/PrimitiveCollectionsQuerySqlServer160Test.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -924,14 +924,14 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
924924
{
925925
await base.Parameter_collection_Count_with_huge_number_of_values();
926926

927-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
927+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
928928
}
929929

930930
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations()
931931
{
932932
await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations();
933933

934-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
934+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
935935
}
936936

937937
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_same_parameter()
@@ -946,7 +946,7 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
946946
{
947947
await base.Parameter_collection_Count_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping();
948948

949-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
949+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
950950
}
951951

952952
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_forced_constants()
@@ -961,23 +961,23 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
961961
{
962962
await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations_mixed_parameters_constants();
963963

964-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
964+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
965965
}
966966

967967
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values()
968968
{
969969
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values();
970970

971-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
972-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
971+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
972+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
973973
}
974974

975975
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations()
976976
{
977977
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations();
978978

979-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
980-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
979+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
980+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
981981
}
982982

983983
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_same_parameter()
@@ -994,8 +994,8 @@ public override async Task Parameter_collection_of_ints_Contains_int_with_huge_n
994994
{
995995
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping();
996996

997-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
998-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
997+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
998+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
999999
}
10001000

10011001
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_forced_constants()
@@ -1012,8 +1012,8 @@ public override async Task Parameter_collection_of_ints_Contains_int_with_huge_n
10121012
{
10131013
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_mixed_parameters_constants();
10141014

1015-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1016-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
1015+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1016+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
10171017
}
10181018

10191019
public override async Task Static_readonly_collection_List_of_ints_Contains_int()

test/EFCore.SqlServer.FunctionalTests/Query/PrimitiveCollectionsQuerySqlServerJsonTypeTest.cs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,22 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
9999
{
100100
await base.Parameter_collection_Count_with_huge_number_of_values();
101101

102-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
102+
Assert.EndsWith(
103+
"""
104+
WHERE (
105+
SELECT COUNT(*)
106+
FROM OPENJSON(@ids) WITH ([Value] int '$') AS [i]
107+
WHERE [i].[Value] > [p].[Id]) > 0
108+
""".ReplaceLineEndings(),
109+
Fixture.TestSqlLoggerFactory.SqlStatements[0].ReplaceLineEndings(),
110+
StringComparison.Ordinal);
103111
}
104112

105113
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations()
106114
{
107115
await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations();
108116

109-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
117+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
110118
}
111119

112120
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_same_parameter()
@@ -121,7 +129,7 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
121129
{
122130
await base.Parameter_collection_Count_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping();
123131

124-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
132+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
125133
}
126134

127135
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_forced_constants()
@@ -136,23 +144,40 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
136144
{
137145
await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations_mixed_parameters_constants();
138146

139-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
147+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
140148
}
141149

142150
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values()
143151
{
144152
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values();
145153

146-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
147-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
154+
Assert.EndsWith(
155+
"""
156+
WHERE [p].[Int] IN (
157+
SELECT [__openjson0].[Value]
158+
FROM OPENJSON(@ints) WITH ([Value] int '$') AS [__openjson0]
159+
)
160+
""".ReplaceLineEndings(),
161+
Fixture.TestSqlLoggerFactory.SqlStatements[0].ReplaceLineEndings(),
162+
StringComparison.Ordinal);
163+
164+
Assert.EndsWith(
165+
"""
166+
WHERE [p].[Int] NOT IN (
167+
SELECT [__openjson0].[Value]
168+
FROM OPENJSON(@ints) WITH ([Value] int '$') AS [__openjson0]
169+
)
170+
""".ReplaceLineEndings(),
171+
Fixture.TestSqlLoggerFactory.SqlStatements[1].ReplaceLineEndings(),
172+
StringComparison.Ordinal);
148173
}
149174

150175
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations()
151176
{
152177
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations();
153178

154-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
155-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
179+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
180+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
156181
}
157182

158183
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_same_parameter()
@@ -169,8 +194,8 @@ public override async Task Parameter_collection_of_ints_Contains_int_with_huge_n
169194
{
170195
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping();
171196

172-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
173-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
197+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
198+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
174199
}
175200

176201
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_forced_constants()
@@ -187,8 +212,8 @@ public override async Task Parameter_collection_of_ints_Contains_int_with_huge_n
187212
{
188213
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_mixed_parameters_constants();
189214

190-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
191-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
215+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
216+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
192217
}
193218

194219
public override async Task Inline_collection_of_ints_Contains()

test/EFCore.SqlServer.FunctionalTests/Query/PrimitiveCollectionsQuerySqlServerTest.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -947,14 +947,14 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
947947
{
948948
await base.Parameter_collection_Count_with_huge_number_of_values();
949949

950-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
950+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
951951
}
952952

953953
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations()
954954
{
955955
await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations();
956956

957-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
957+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
958958
}
959959

960960
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_same_parameter()
@@ -969,7 +969,7 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
969969
{
970970
await base.Parameter_collection_Count_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping();
971971

972-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
972+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
973973
}
974974

975975
public override async Task Parameter_collection_Count_with_huge_number_of_values_over_5_operations_forced_constants()
@@ -984,23 +984,23 @@ public override async Task Parameter_collection_Count_with_huge_number_of_values
984984
{
985985
await base.Parameter_collection_Count_with_huge_number_of_values_over_5_operations_mixed_parameters_constants();
986986

987-
Assert.Contains("OPENJSON(@ids) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
987+
Assert.Contains("OPENJSON(@ids) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
988988
}
989989

990990
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values()
991991
{
992992
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values();
993993

994-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
995-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
994+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
995+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
996996
}
997997

998998
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations()
999999
{
10001000
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations();
10011001

1002-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1003-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
1002+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1003+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
10041004
}
10051005

10061006
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_same_parameter()
@@ -1017,8 +1017,8 @@ public override async Task Parameter_collection_of_ints_Contains_int_with_huge_n
10171017
{
10181018
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_2_operations_same_parameter_different_type_mapping();
10191019

1020-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1021-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
1020+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1021+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
10221022
}
10231023

10241024
public override async Task Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_forced_constants()
@@ -1035,8 +1035,8 @@ public override async Task Parameter_collection_of_ints_Contains_int_with_huge_n
10351035
{
10361036
await base.Parameter_collection_of_ints_Contains_int_with_huge_number_of_values_over_5_operations_mixed_parameters_constants();
10371037

1038-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1039-
Assert.Contains("OPENJSON(@ints) WITH ([value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
1038+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[0], StringComparison.Ordinal);
1039+
Assert.Contains("OPENJSON(@ints) WITH ([Value] int '$')", Fixture.TestSqlLoggerFactory.SqlStatements[1], StringComparison.Ordinal);
10401040
}
10411041

10421042
public override async Task Static_readonly_collection_List_of_ints_Contains_int()

0 commit comments

Comments
 (0)