diff --git a/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs b/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs
index 190d56525b8..7d828280c86 100644
--- a/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs
+++ b/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs
@@ -131,23 +131,18 @@ protected override Expression VisitExtension(Expression node)
case ParameterTranslationMode.MultipleParameters:
{
var expandedParameters = _collectionParameterExpansionMap.GetOrAddNew(valuesParameter);
- for (var i = 0; i < values.Count; i++)
+ var expandedParametersCounter = 0;
+ foreach (var value in values)
{
// Create parameter for value if we didn't create it yet,
// otherwise reuse it.
- if (expandedParameters.Count <= i)
- {
- var parameterName = Uniquifier.Uniquify(valuesParameter.Name, queryParameters, int.MaxValue);
- queryParameters.Add(parameterName, values[i]);
- var parameterExpression = new SqlParameterExpression(parameterName, values[i]?.GetType() ?? typeof(object), elementTypeMapping);
- expandedParameters.Add(parameterExpression);
- }
+ ExpandParameterIfNeeded(valuesParameter.Name, expandedParameters, queryParameters, expandedParametersCounter, value, elementTypeMapping);
processedValues.Add(
new RowValueExpression(
ProcessValuesOrderingColumn(
valuesExpression,
- [expandedParameters[i]],
+ [expandedParameters[expandedParametersCounter++]],
intTypeMapping,
ref valuesOrderingCounter)));
}
@@ -814,17 +809,18 @@ InExpression ProcessInExpressionValues(
processedValues = [];
+ var translationMode = valuesParameter.TranslationMode ?? CollectionParameterTranslationMode;
var expandedParameters = _collectionParameterExpansionMap.GetOrAddNew(valuesParameter);
var expandedParametersCounter = 0;
- for (var i = 0; i < values.Count; i++)
+ foreach (var value in values)
{
- if (values[i] is null && removeNulls)
+ if (value is null && removeNulls)
{
hasNull = true;
continue;
}
- switch (valuesParameter.TranslationMode ?? CollectionParameterTranslationMode)
+ switch (translationMode)
{
case ParameterTranslationMode.MultipleParameters:
// see #36311 for more info
@@ -832,15 +828,8 @@ InExpression ProcessInExpressionValues(
{
// Create parameter for value if we didn't create it yet,
// otherwise reuse it.
- if (expandedParameters.Count <= i)
- {
- var parameterName = Uniquifier.Uniquify(valuesParameter.Name, parameters, int.MaxValue);
- parameters.Add(parameterName, values[i]);
- var parameterExpression = new SqlParameterExpression(parameterName, values[i]?.GetType() ?? typeof(object), elementTypeMapping);
- expandedParameters.Add(parameterExpression);
- }
+ ExpandParameterIfNeeded(valuesParameter.Name, expandedParameters, parameters, expandedParametersCounter, value, elementTypeMapping);
- // Use separate counter, because we may skip nulls.
processedValues.Add(expandedParameters[expandedParametersCounter++]);
break;
@@ -848,7 +837,7 @@ InExpression ProcessInExpressionValues(
case ParameterTranslationMode.Constant:
{
- processedValues.Add(_sqlExpressionFactory.Constant(values[i], values[i]?.GetType() ?? typeof(object), sensitive: true, elementTypeMapping));
+ processedValues.Add(_sqlExpressionFactory.Constant(value, value?.GetType() ?? typeof(object), sensitive: true, elementTypeMapping));
break;
}
@@ -857,6 +846,38 @@ InExpression ProcessInExpressionValues(
throw new UnreachableException();
}
}
+
+ // Bucketization is a process used to group parameters into "buckets" of a fixed size when generating parameterized collections.
+ // This helps mitigate query plan bloat by reducing the number of unique query plans generated for queries with varying numbers
+ // of parameters. Instead of creating a new query plan for every possible parameter count, bucketization ensures that queries
+ // with similar parameter counts share the same query plan.
+ //
+ // The size of each bucket is determined by the CalculateParameterBucketSize method, which dynamically calculates the bucket size
+ // based on the total number of parameters and the type mapping of the collection elements. For example, smaller collections may
+ // use smaller bucket sizes, while larger collections may use larger bucket sizes to balance performance and memory usage.
+ //
+ // If the number of parameters in the collection is not a multiple of the bucket size, padding is added to ensure the collection
+ // fits into the nearest bucket. This padding uses the last value in the collection to fill the remaining slots.
+ //
+ // Providers can effectively disable bucketization by overriding the CalculateParameterBucketSize method to always return 1.
+ //
+ // Example:
+ // Suppose a query has 12 parameters, and the bucket size is calculated as 10. The query will be padded with 8 additional
+ // parameters (using the last value) to fit into the next bucket size of 20. This ensures that queries with 12, 13, or 19
+ // parameters all share the same query plan, reducing query plan fragmentation.
+ if (translationMode is ParameterTranslationMode.MultipleParameters)
+ {
+ var padFactor = CalculateParameterBucketSize(values.Count, elementTypeMapping);
+ var padding = (padFactor - (values.Count % padFactor)) % padFactor;
+ for (var i = 0; i < padding; i++)
+ {
+ // Create parameter for value if we didn't create it yet,
+ // otherwise reuse it.
+ ExpandParameterIfNeeded(valuesParameter.Name, expandedParameters, parameters, values.Count + i, values[^1], elementTypeMapping);
+
+ processedValues.Add(expandedParameters[expandedParametersCounter++]);
+ }
+ }
}
else
{
@@ -1488,6 +1509,23 @@ protected virtual SqlExpression VisitJsonScalar(
protected virtual bool PreferExistsToInWithCoalesce
=> false;
+ ///
+ /// Gets the bucket size into which the parameters are padded when generating a parameterized collection
+ /// when using multiple parameters. This helps with query plan bloat.
+ ///
+ /// Number of value parameters.
+ /// The type mapping for the collection element.
+ [EntityFrameworkInternal]
+ protected virtual int CalculateParameterBucketSize(int count, RelationalTypeMapping elementTypeMapping)
+ => count switch
+ {
+ <= 5 => 1,
+ <= 150 => 10,
+ <= 750 => 50,
+ <= 2000 => 100,
+ _ => 200,
+ };
+
// Note that we can check parameter values for null since we cache by the parameter nullability; but we cannot do the same for bool.
private bool IsNull(SqlExpression? expression)
=> expression is SqlConstantExpression { Value: null }
@@ -2121,4 +2159,21 @@ private SqlExpression ProcessNullNotNull(SqlExpression sqlExpression, bool opera
private static bool IsLogicalNot(SqlUnaryExpression? sqlUnaryExpression)
=> sqlUnaryExpression is { OperatorType: ExpressionType.Not } && sqlUnaryExpression.Type == typeof(bool);
+
+ private static void ExpandParameterIfNeeded(
+ string valuesParameterName,
+ List expandedParameters,
+ Dictionary parameters,
+ int index,
+ object? value,
+ RelationalTypeMapping typeMapping)
+ {
+ if (expandedParameters.Count <= index)
+ {
+ var parameterName = Uniquifier.Uniquify(valuesParameterName, parameters, int.MaxValue);
+ parameters.Add(parameterName, value);
+ var parameterExpression = new SqlParameterExpression(parameterName, value?.GetType() ?? typeof(object), typeMapping);
+ expandedParameters.Add(parameterExpression);
+ }
+ }
}
diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerSqlNullabilityProcessor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerSqlNullabilityProcessor.cs
index 3215b65578e..921429a1dbc 100644
--- a/src/EFCore.SqlServer/Query/Internal/SqlServerSqlNullabilityProcessor.cs
+++ b/src/EFCore.SqlServer/Query/Internal/SqlServerSqlNullabilityProcessor.cs
@@ -16,6 +16,8 @@ namespace Microsoft.EntityFrameworkCore.SqlServer.Query.Internal;
///
public class SqlServerSqlNullabilityProcessor : SqlNullabilityProcessor
{
+ private const int MaxParameterCount = 2100;
+
///
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
@@ -280,6 +282,19 @@ protected override SqlExpression VisitIn(InExpression inExpression, bool allowOp
}
}
+ ///
+ protected override int CalculateParameterBucketSize(int count, RelationalTypeMapping elementTypeMapping)
+ => count switch
+ {
+ <= 5 => 1,
+ <= 150 => 10,
+ <= 750 => 50,
+ <= 2000 => 100,
+ <= 2070 => 10, // try not to over-pad as we approach that limit
+ <= MaxParameterCount => 0, // just don't pad between 2070 and 2100, to minimize the crazy
+ _ => 200,
+ };
+
private bool TryHandleOverLimitParameters(
SqlParameterExpression valuesParameter,
RelationalTypeMapping typeMapping,
@@ -294,7 +309,7 @@ private bool TryHandleOverLimitParameters(
// SQL Server has limit on number of parameters in a query.
// If we're over that limit, we switch to using single parameter
// and processing it through JSON functions.
- if (values.Count > 2098)
+ if (values.Count > MaxParameterCount)
{
if (_sqlServerSingletonOptions.SupportsJsonFunctions)
{
diff --git a/test/EFCore.Relational.Specification.Tests/Query/NonSharedPrimitiveCollectionsQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/NonSharedPrimitiveCollectionsQueryRelationalTestBase.cs
index e5132067c77..e1ed5a7b858 100644
--- a/test/EFCore.Relational.Specification.Tests/Query/NonSharedPrimitiveCollectionsQueryRelationalTestBase.cs
+++ b/test/EFCore.Relational.Specification.Tests/Query/NonSharedPrimitiveCollectionsQueryRelationalTestBase.cs
@@ -215,6 +215,27 @@ public virtual async Task Parameter_collection_Contains_with_default_mode_EF_Mul
Assert.Equivalent(new[] { 2 }, result);
}
+ [ConditionalFact]
+ public virtual async Task Parameter_collection_Contains_parameter_bucketization()
+ {
+ var contextFactory = await InitializeAsync(
+ onConfiguring: b => SetParameterizedCollectionMode(b, ParameterTranslationMode.MultipleParameters),
+ seed: context =>
+ {
+ context.AddRange(
+ new TestEntity { Id = 1 },
+ new TestEntity { Id = 2 },
+ new TestEntity { Id = 100 });
+ return context.SaveChangesAsync();
+ });
+
+ await using var context = contextFactory.CreateContext();
+
+ var ints = new[] { 2, 999, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
+ var result = await context.Set().Where(c => ints.Contains(c.Id)).Select(c => c.Id).ToListAsync();
+ Assert.Equivalent(new[] { 2 }, result);
+ }
+
protected class TestOwner
{
public int Id { get; set; }
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs
index d017fa4209d..e5d2742eccd 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/AdHocMiscellaneousQuerySqlServerTest.cs
@@ -730,120 +730,219 @@ public async Task Where_contains_DateTime_literals(bool async)
@dateTimes9='1978-09-03T12:00:10.9990000' (DbType = DateTime)
@dateTimes10='1979-09-03T12:00:10.1110000' (DbType = DateTime)
@dateTimes11='1980-09-03T12:00:10.2220000' (DbType = DateTime)
-@dateTimes12='1970-09-03T12:00:00.0000000' (DbType = DateTime)
-@dateTimes13='1971-09-03T12:00:10.2200000' (DbType = DateTime)
-@dateTimes14='1972-09-03T12:00:10.3330000' (DbType = DateTime)
-@dateTimes15='1973-09-03T12:00:10.0000000' (DbType = DateTime)
-@dateTimes16='1974-09-03T12:00:10.5000000' (DbType = DateTime)
-@dateTimes17='1975-09-03T12:00:10.6600000' (DbType = DateTime)
-@dateTimes18='1976-09-03T12:00:10.7770000' (DbType = DateTime)
-@dateTimes19='1977-09-03T12:00:10.8880000' (DbType = DateTime)
-@dateTimes20='1978-09-03T12:00:10.9990000' (DbType = DateTime)
-@dateTimes21='1979-09-03T12:00:10.1110000' (DbType = DateTime)
-@dateTimes22='1980-09-03T12:00:10.2220000' (DbType = DateTime)
-@dateTimes23='1970-09-03T12:00:00.0000000'
-@dateTimes24='1971-09-03T12:00:10.2200000'
-@dateTimes25='1972-09-03T12:00:10.3330000'
-@dateTimes26='1973-09-03T12:00:10.0000000'
-@dateTimes27='1974-09-03T12:00:10.5000000'
-@dateTimes28='1975-09-03T12:00:10.6600000'
-@dateTimes29='1976-09-03T12:00:10.7770000'
-@dateTimes30='1977-09-03T12:00:10.8880000'
-@dateTimes31='1978-09-03T12:00:10.9990000'
-@dateTimes32='1979-09-03T12:00:10.1110000'
-@dateTimes33='1980-09-03T12:00:10.2220000'
-@dateTimes34='1970-09-03T12:00:00.0000000'
-@dateTimes35='1971-09-03T12:00:10.2200000'
-@dateTimes36='1972-09-03T12:00:10.3330000'
-@dateTimes37='1973-09-03T12:00:10.0000000'
-@dateTimes38='1974-09-03T12:00:10.5000000'
-@dateTimes39='1975-09-03T12:00:10.6600000'
-@dateTimes40='1976-09-03T12:00:10.7770000'
-@dateTimes41='1977-09-03T12:00:10.8880000'
-@dateTimes42='1978-09-03T12:00:10.9990000'
-@dateTimes43='1979-09-03T12:00:10.1110000'
-@dateTimes44='1980-09-03T12:00:10.2220000'
-@dateTimes45='1970-09-03T12:00:00.0000000' (Scale = 1)
-@dateTimes46='1971-09-03T12:00:10.2200000' (Scale = 1)
-@dateTimes47='1972-09-03T12:00:10.3330000' (Scale = 1)
-@dateTimes48='1973-09-03T12:00:10.0000000' (Scale = 1)
-@dateTimes49='1974-09-03T12:00:10.5000000' (Scale = 1)
-@dateTimes50='1975-09-03T12:00:10.6600000' (Scale = 1)
-@dateTimes51='1976-09-03T12:00:10.7770000' (Scale = 1)
-@dateTimes52='1977-09-03T12:00:10.8880000' (Scale = 1)
-@dateTimes53='1978-09-03T12:00:10.9990000' (Scale = 1)
-@dateTimes54='1979-09-03T12:00:10.1110000' (Scale = 1)
-@dateTimes55='1980-09-03T12:00:10.2220000' (Scale = 1)
-@dateTimes56='1970-09-03T12:00:00.0000000' (Scale = 2)
-@dateTimes57='1971-09-03T12:00:10.2200000' (Scale = 2)
-@dateTimes58='1972-09-03T12:00:10.3330000' (Scale = 2)
-@dateTimes59='1973-09-03T12:00:10.0000000' (Scale = 2)
-@dateTimes60='1974-09-03T12:00:10.5000000' (Scale = 2)
-@dateTimes61='1975-09-03T12:00:10.6600000' (Scale = 2)
-@dateTimes62='1976-09-03T12:00:10.7770000' (Scale = 2)
-@dateTimes63='1977-09-03T12:00:10.8880000' (Scale = 2)
-@dateTimes64='1978-09-03T12:00:10.9990000' (Scale = 2)
-@dateTimes65='1979-09-03T12:00:10.1110000' (Scale = 2)
-@dateTimes66='1980-09-03T12:00:10.2220000' (Scale = 2)
-@dateTimes67='1970-09-03T12:00:00.0000000' (Scale = 3)
-@dateTimes68='1971-09-03T12:00:10.2200000' (Scale = 3)
-@dateTimes69='1972-09-03T12:00:10.3330000' (Scale = 3)
-@dateTimes70='1973-09-03T12:00:10.0000000' (Scale = 3)
-@dateTimes71='1974-09-03T12:00:10.5000000' (Scale = 3)
-@dateTimes72='1975-09-03T12:00:10.6600000' (Scale = 3)
-@dateTimes73='1976-09-03T12:00:10.7770000' (Scale = 3)
-@dateTimes74='1977-09-03T12:00:10.8880000' (Scale = 3)
-@dateTimes75='1978-09-03T12:00:10.9990000' (Scale = 3)
-@dateTimes76='1979-09-03T12:00:10.1110000' (Scale = 3)
-@dateTimes77='1980-09-03T12:00:10.2220000' (Scale = 3)
-@dateTimes78='1970-09-03T12:00:00.0000000' (Scale = 4)
-@dateTimes79='1971-09-03T12:00:10.2200000' (Scale = 4)
-@dateTimes80='1972-09-03T12:00:10.3330000' (Scale = 4)
-@dateTimes81='1973-09-03T12:00:10.0000000' (Scale = 4)
-@dateTimes82='1974-09-03T12:00:10.5000000' (Scale = 4)
-@dateTimes83='1975-09-03T12:00:10.6600000' (Scale = 4)
-@dateTimes84='1976-09-03T12:00:10.7770000' (Scale = 4)
-@dateTimes85='1977-09-03T12:00:10.8880000' (Scale = 4)
-@dateTimes86='1978-09-03T12:00:10.9990000' (Scale = 4)
-@dateTimes87='1979-09-03T12:00:10.1110000' (Scale = 4)
-@dateTimes88='1980-09-03T12:00:10.2220000' (Scale = 4)
-@dateTimes89='1970-09-03T12:00:00.0000000' (Scale = 5)
-@dateTimes90='1971-09-03T12:00:10.2200000' (Scale = 5)
-@dateTimes91='1972-09-03T12:00:10.3330000' (Scale = 5)
-@dateTimes92='1973-09-03T12:00:10.0000000' (Scale = 5)
-@dateTimes93='1974-09-03T12:00:10.5000000' (Scale = 5)
-@dateTimes94='1975-09-03T12:00:10.6600000' (Scale = 5)
-@dateTimes95='1976-09-03T12:00:10.7770000' (Scale = 5)
-@dateTimes96='1977-09-03T12:00:10.8880000' (Scale = 5)
-@dateTimes97='1978-09-03T12:00:10.9990000' (Scale = 5)
-@dateTimes98='1979-09-03T12:00:10.1110000' (Scale = 5)
-@dateTimes99='1980-09-03T12:00:10.2220000' (Scale = 5)
-@dateTimes100='1970-09-03T12:00:00.0000000' (Scale = 6)
-@dateTimes101='1971-09-03T12:00:10.2200000' (Scale = 6)
-@dateTimes102='1972-09-03T12:00:10.3330000' (Scale = 6)
-@dateTimes103='1973-09-03T12:00:10.0000000' (Scale = 6)
-@dateTimes104='1974-09-03T12:00:10.5000000' (Scale = 6)
-@dateTimes105='1975-09-03T12:00:10.6600000' (Scale = 6)
-@dateTimes106='1976-09-03T12:00:10.7770000' (Scale = 6)
-@dateTimes107='1977-09-03T12:00:10.8880000' (Scale = 6)
-@dateTimes108='1978-09-03T12:00:10.9990000' (Scale = 6)
-@dateTimes109='1979-09-03T12:00:10.1110000' (Scale = 6)
-@dateTimes110='1980-09-03T12:00:10.2220000' (Scale = 6)
-@dateTimes111='1970-09-03T12:00:00.0000000' (Scale = 7)
-@dateTimes112='1971-09-03T12:00:10.2200000' (Scale = 7)
-@dateTimes113='1972-09-03T12:00:10.3330000' (Scale = 7)
-@dateTimes114='1973-09-03T12:00:10.0000000' (Scale = 7)
-@dateTimes115='1974-09-03T12:00:10.5000000' (Scale = 7)
-@dateTimes116='1975-09-03T12:00:10.6600000' (Scale = 7)
-@dateTimes117='1976-09-03T12:00:10.7770000' (Scale = 7)
-@dateTimes118='1977-09-03T12:00:10.8880000' (Scale = 7)
-@dateTimes119='1978-09-03T12:00:10.9990000' (Scale = 7)
-@dateTimes120='1979-09-03T12:00:10.1110000' (Scale = 7)
-@dateTimes121='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes12='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes13='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes14='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes15='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes16='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes17='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes18='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes19='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes20='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes21='1970-09-03T12:00:00.0000000' (DbType = DateTime)
+@dateTimes22='1971-09-03T12:00:10.2200000' (DbType = DateTime)
+@dateTimes23='1972-09-03T12:00:10.3330000' (DbType = DateTime)
+@dateTimes24='1973-09-03T12:00:10.0000000' (DbType = DateTime)
+@dateTimes25='1974-09-03T12:00:10.5000000' (DbType = DateTime)
+@dateTimes26='1975-09-03T12:00:10.6600000' (DbType = DateTime)
+@dateTimes27='1976-09-03T12:00:10.7770000' (DbType = DateTime)
+@dateTimes28='1977-09-03T12:00:10.8880000' (DbType = DateTime)
+@dateTimes29='1978-09-03T12:00:10.9990000' (DbType = DateTime)
+@dateTimes30='1979-09-03T12:00:10.1110000' (DbType = DateTime)
+@dateTimes31='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes32='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes33='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes34='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes35='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes36='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes37='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes38='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes39='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes40='1980-09-03T12:00:10.2220000' (DbType = DateTime)
+@dateTimes41='1970-09-03T12:00:00.0000000'
+@dateTimes42='1971-09-03T12:00:10.2200000'
+@dateTimes43='1972-09-03T12:00:10.3330000'
+@dateTimes44='1973-09-03T12:00:10.0000000'
+@dateTimes45='1974-09-03T12:00:10.5000000'
+@dateTimes46='1975-09-03T12:00:10.6600000'
+@dateTimes47='1976-09-03T12:00:10.7770000'
+@dateTimes48='1977-09-03T12:00:10.8880000'
+@dateTimes49='1978-09-03T12:00:10.9990000'
+@dateTimes50='1979-09-03T12:00:10.1110000'
+@dateTimes51='1980-09-03T12:00:10.2220000'
+@dateTimes52='1980-09-03T12:00:10.2220000'
+@dateTimes53='1980-09-03T12:00:10.2220000'
+@dateTimes54='1980-09-03T12:00:10.2220000'
+@dateTimes55='1980-09-03T12:00:10.2220000'
+@dateTimes56='1980-09-03T12:00:10.2220000'
+@dateTimes57='1980-09-03T12:00:10.2220000'
+@dateTimes58='1980-09-03T12:00:10.2220000'
+@dateTimes59='1980-09-03T12:00:10.2220000'
+@dateTimes60='1980-09-03T12:00:10.2220000'
+@dateTimes61='1970-09-03T12:00:00.0000000'
+@dateTimes62='1971-09-03T12:00:10.2200000'
+@dateTimes63='1972-09-03T12:00:10.3330000'
+@dateTimes64='1973-09-03T12:00:10.0000000'
+@dateTimes65='1974-09-03T12:00:10.5000000'
+@dateTimes66='1975-09-03T12:00:10.6600000'
+@dateTimes67='1976-09-03T12:00:10.7770000'
+@dateTimes68='1977-09-03T12:00:10.8880000'
+@dateTimes69='1978-09-03T12:00:10.9990000'
+@dateTimes70='1979-09-03T12:00:10.1110000'
+@dateTimes71='1980-09-03T12:00:10.2220000'
+@dateTimes72='1980-09-03T12:00:10.2220000'
+@dateTimes73='1980-09-03T12:00:10.2220000'
+@dateTimes74='1980-09-03T12:00:10.2220000'
+@dateTimes75='1980-09-03T12:00:10.2220000'
+@dateTimes76='1980-09-03T12:00:10.2220000'
+@dateTimes77='1980-09-03T12:00:10.2220000'
+@dateTimes78='1980-09-03T12:00:10.2220000'
+@dateTimes79='1980-09-03T12:00:10.2220000'
+@dateTimes80='1980-09-03T12:00:10.2220000'
+@dateTimes81='1970-09-03T12:00:00.0000000' (Scale = 1)
+@dateTimes82='1971-09-03T12:00:10.2200000' (Scale = 1)
+@dateTimes83='1972-09-03T12:00:10.3330000' (Scale = 1)
+@dateTimes84='1973-09-03T12:00:10.0000000' (Scale = 1)
+@dateTimes85='1974-09-03T12:00:10.5000000' (Scale = 1)
+@dateTimes86='1975-09-03T12:00:10.6600000' (Scale = 1)
+@dateTimes87='1976-09-03T12:00:10.7770000' (Scale = 1)
+@dateTimes88='1977-09-03T12:00:10.8880000' (Scale = 1)
+@dateTimes89='1978-09-03T12:00:10.9990000' (Scale = 1)
+@dateTimes90='1979-09-03T12:00:10.1110000' (Scale = 1)
+@dateTimes91='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes92='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes93='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes94='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes95='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes96='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes97='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes98='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes99='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes100='1980-09-03T12:00:10.2220000' (Scale = 1)
+@dateTimes101='1970-09-03T12:00:00.0000000' (Scale = 2)
+@dateTimes102='1971-09-03T12:00:10.2200000' (Scale = 2)
+@dateTimes103='1972-09-03T12:00:10.3330000' (Scale = 2)
+@dateTimes104='1973-09-03T12:00:10.0000000' (Scale = 2)
+@dateTimes105='1974-09-03T12:00:10.5000000' (Scale = 2)
+@dateTimes106='1975-09-03T12:00:10.6600000' (Scale = 2)
+@dateTimes107='1976-09-03T12:00:10.7770000' (Scale = 2)
+@dateTimes108='1977-09-03T12:00:10.8880000' (Scale = 2)
+@dateTimes109='1978-09-03T12:00:10.9990000' (Scale = 2)
+@dateTimes110='1979-09-03T12:00:10.1110000' (Scale = 2)
+@dateTimes111='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes112='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes113='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes114='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes115='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes116='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes117='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes118='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes119='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes120='1980-09-03T12:00:10.2220000' (Scale = 2)
+@dateTimes121='1970-09-03T12:00:00.0000000' (Scale = 3)
+@dateTimes122='1971-09-03T12:00:10.2200000' (Scale = 3)
+@dateTimes123='1972-09-03T12:00:10.3330000' (Scale = 3)
+@dateTimes124='1973-09-03T12:00:10.0000000' (Scale = 3)
+@dateTimes125='1974-09-03T12:00:10.5000000' (Scale = 3)
+@dateTimes126='1975-09-03T12:00:10.6600000' (Scale = 3)
+@dateTimes127='1976-09-03T12:00:10.7770000' (Scale = 3)
+@dateTimes128='1977-09-03T12:00:10.8880000' (Scale = 3)
+@dateTimes129='1978-09-03T12:00:10.9990000' (Scale = 3)
+@dateTimes130='1979-09-03T12:00:10.1110000' (Scale = 3)
+@dateTimes131='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes132='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes133='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes134='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes135='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes136='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes137='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes138='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes139='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes140='1980-09-03T12:00:10.2220000' (Scale = 3)
+@dateTimes141='1970-09-03T12:00:00.0000000' (Scale = 4)
+@dateTimes142='1971-09-03T12:00:10.2200000' (Scale = 4)
+@dateTimes143='1972-09-03T12:00:10.3330000' (Scale = 4)
+@dateTimes144='1973-09-03T12:00:10.0000000' (Scale = 4)
+@dateTimes145='1974-09-03T12:00:10.5000000' (Scale = 4)
+@dateTimes146='1975-09-03T12:00:10.6600000' (Scale = 4)
+@dateTimes147='1976-09-03T12:00:10.7770000' (Scale = 4)
+@dateTimes148='1977-09-03T12:00:10.8880000' (Scale = 4)
+@dateTimes149='1978-09-03T12:00:10.9990000' (Scale = 4)
+@dateTimes150='1979-09-03T12:00:10.1110000' (Scale = 4)
+@dateTimes151='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes152='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes153='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes154='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes155='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes156='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes157='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes158='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes159='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes160='1980-09-03T12:00:10.2220000' (Scale = 4)
+@dateTimes161='1970-09-03T12:00:00.0000000' (Scale = 5)
+@dateTimes162='1971-09-03T12:00:10.2200000' (Scale = 5)
+@dateTimes163='1972-09-03T12:00:10.3330000' (Scale = 5)
+@dateTimes164='1973-09-03T12:00:10.0000000' (Scale = 5)
+@dateTimes165='1974-09-03T12:00:10.5000000' (Scale = 5)
+@dateTimes166='1975-09-03T12:00:10.6600000' (Scale = 5)
+@dateTimes167='1976-09-03T12:00:10.7770000' (Scale = 5)
+@dateTimes168='1977-09-03T12:00:10.8880000' (Scale = 5)
+@dateTimes169='1978-09-03T12:00:10.9990000' (Scale = 5)
+@dateTimes170='1979-09-03T12:00:10.1110000' (Scale = 5)
+@dateTimes171='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes172='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes173='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes174='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes175='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes176='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes177='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes178='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes179='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes180='1980-09-03T12:00:10.2220000' (Scale = 5)
+@dateTimes181='1970-09-03T12:00:00.0000000' (Scale = 6)
+@dateTimes182='1971-09-03T12:00:10.2200000' (Scale = 6)
+@dateTimes183='1972-09-03T12:00:10.3330000' (Scale = 6)
+@dateTimes184='1973-09-03T12:00:10.0000000' (Scale = 6)
+@dateTimes185='1974-09-03T12:00:10.5000000' (Scale = 6)
+@dateTimes186='1975-09-03T12:00:10.6600000' (Scale = 6)
+@dateTimes187='1976-09-03T12:00:10.7770000' (Scale = 6)
+@dateTimes188='1977-09-03T12:00:10.8880000' (Scale = 6)
+@dateTimes189='1978-09-03T12:00:10.9990000' (Scale = 6)
+@dateTimes190='1979-09-03T12:00:10.1110000' (Scale = 6)
+@dateTimes191='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes192='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes193='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes194='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes195='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes196='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes197='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes198='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes199='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes200='1980-09-03T12:00:10.2220000' (Scale = 6)
+@dateTimes201='1970-09-03T12:00:00.0000000' (Scale = 7)
+@dateTimes202='1971-09-03T12:00:10.2200000' (Scale = 7)
+@dateTimes203='1972-09-03T12:00:10.3330000' (Scale = 7)
+@dateTimes204='1973-09-03T12:00:10.0000000' (Scale = 7)
+@dateTimes205='1974-09-03T12:00:10.5000000' (Scale = 7)
+@dateTimes206='1975-09-03T12:00:10.6600000' (Scale = 7)
+@dateTimes207='1976-09-03T12:00:10.7770000' (Scale = 7)
+@dateTimes208='1977-09-03T12:00:10.8880000' (Scale = 7)
+@dateTimes209='1978-09-03T12:00:10.9990000' (Scale = 7)
+@dateTimes210='1979-09-03T12:00:10.1110000' (Scale = 7)
+@dateTimes211='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes212='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes213='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes214='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes215='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes216='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes217='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes218='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes219='1980-09-03T12:00:10.2220000' (Scale = 7)
+@dateTimes220='1980-09-03T12:00:10.2220000' (Scale = 7)
SELECT [d].[Id], [d].[DateTime], [d].[DateTime2], [d].[DateTime2_0], [d].[DateTime2_1], [d].[DateTime2_2], [d].[DateTime2_3], [d].[DateTime2_4], [d].[DateTime2_5], [d].[DateTime2_6], [d].[DateTime2_7], [d].[SmallDateTime]
FROM [Dates] AS [d]
-WHERE [d].[SmallDateTime] IN (@dateTimes1, @dateTimes2, @dateTimes3, @dateTimes4, @dateTimes5, @dateTimes6, @dateTimes7, @dateTimes8, @dateTimes9, @dateTimes10, @dateTimes11) AND [d].[DateTime] IN (@dateTimes12, @dateTimes13, @dateTimes14, @dateTimes15, @dateTimes16, @dateTimes17, @dateTimes18, @dateTimes19, @dateTimes20, @dateTimes21, @dateTimes22) AND [d].[DateTime2] IN (@dateTimes23, @dateTimes24, @dateTimes25, @dateTimes26, @dateTimes27, @dateTimes28, @dateTimes29, @dateTimes30, @dateTimes31, @dateTimes32, @dateTimes33) AND [d].[DateTime2_0] IN (@dateTimes34, @dateTimes35, @dateTimes36, @dateTimes37, @dateTimes38, @dateTimes39, @dateTimes40, @dateTimes41, @dateTimes42, @dateTimes43, @dateTimes44) AND [d].[DateTime2_1] IN (@dateTimes45, @dateTimes46, @dateTimes47, @dateTimes48, @dateTimes49, @dateTimes50, @dateTimes51, @dateTimes52, @dateTimes53, @dateTimes54, @dateTimes55) AND [d].[DateTime2_2] IN (@dateTimes56, @dateTimes57, @dateTimes58, @dateTimes59, @dateTimes60, @dateTimes61, @dateTimes62, @dateTimes63, @dateTimes64, @dateTimes65, @dateTimes66) AND [d].[DateTime2_3] IN (@dateTimes67, @dateTimes68, @dateTimes69, @dateTimes70, @dateTimes71, @dateTimes72, @dateTimes73, @dateTimes74, @dateTimes75, @dateTimes76, @dateTimes77) AND [d].[DateTime2_4] IN (@dateTimes78, @dateTimes79, @dateTimes80, @dateTimes81, @dateTimes82, @dateTimes83, @dateTimes84, @dateTimes85, @dateTimes86, @dateTimes87, @dateTimes88) AND [d].[DateTime2_5] IN (@dateTimes89, @dateTimes90, @dateTimes91, @dateTimes92, @dateTimes93, @dateTimes94, @dateTimes95, @dateTimes96, @dateTimes97, @dateTimes98, @dateTimes99) AND [d].[DateTime2_6] IN (@dateTimes100, @dateTimes101, @dateTimes102, @dateTimes103, @dateTimes104, @dateTimes105, @dateTimes106, @dateTimes107, @dateTimes108, @dateTimes109, @dateTimes110) AND [d].[DateTime2_7] IN (@dateTimes111, @dateTimes112, @dateTimes113, @dateTimes114, @dateTimes115, @dateTimes116, @dateTimes117, @dateTimes118, @dateTimes119, @dateTimes120, @dateTimes121)
+WHERE [d].[SmallDateTime] IN (@dateTimes1, @dateTimes2, @dateTimes3, @dateTimes4, @dateTimes5, @dateTimes6, @dateTimes7, @dateTimes8, @dateTimes9, @dateTimes10, @dateTimes11, @dateTimes12, @dateTimes13, @dateTimes14, @dateTimes15, @dateTimes16, @dateTimes17, @dateTimes18, @dateTimes19, @dateTimes20) AND [d].[DateTime] IN (@dateTimes21, @dateTimes22, @dateTimes23, @dateTimes24, @dateTimes25, @dateTimes26, @dateTimes27, @dateTimes28, @dateTimes29, @dateTimes30, @dateTimes31, @dateTimes32, @dateTimes33, @dateTimes34, @dateTimes35, @dateTimes36, @dateTimes37, @dateTimes38, @dateTimes39, @dateTimes40) AND [d].[DateTime2] IN (@dateTimes41, @dateTimes42, @dateTimes43, @dateTimes44, @dateTimes45, @dateTimes46, @dateTimes47, @dateTimes48, @dateTimes49, @dateTimes50, @dateTimes51, @dateTimes52, @dateTimes53, @dateTimes54, @dateTimes55, @dateTimes56, @dateTimes57, @dateTimes58, @dateTimes59, @dateTimes60) AND [d].[DateTime2_0] IN (@dateTimes61, @dateTimes62, @dateTimes63, @dateTimes64, @dateTimes65, @dateTimes66, @dateTimes67, @dateTimes68, @dateTimes69, @dateTimes70, @dateTimes71, @dateTimes72, @dateTimes73, @dateTimes74, @dateTimes75, @dateTimes76, @dateTimes77, @dateTimes78, @dateTimes79, @dateTimes80) AND [d].[DateTime2_1] IN (@dateTimes81, @dateTimes82, @dateTimes83, @dateTimes84, @dateTimes85, @dateTimes86, @dateTimes87, @dateTimes88, @dateTimes89, @dateTimes90, @dateTimes91, @dateTimes92, @dateTimes93, @dateTimes94, @dateTimes95, @dateTimes96, @dateTimes97, @dateTimes98, @dateTimes99, @dateTimes100) AND [d].[DateTime2_2] IN (@dateTimes101, @dateTimes102, @dateTimes103, @dateTimes104, @dateTimes105, @dateTimes106, @dateTimes107, @dateTimes108, @dateTimes109, @dateTimes110, @dateTimes111, @dateTimes112, @dateTimes113, @dateTimes114, @dateTimes115, @dateTimes116, @dateTimes117, @dateTimes118, @dateTimes119, @dateTimes120) AND [d].[DateTime2_3] IN (@dateTimes121, @dateTimes122, @dateTimes123, @dateTimes124, @dateTimes125, @dateTimes126, @dateTimes127, @dateTimes128, @dateTimes129, @dateTimes130, @dateTimes131, @dateTimes132, @dateTimes133, @dateTimes134, @dateTimes135, @dateTimes136, @dateTimes137, @dateTimes138, @dateTimes139, @dateTimes140) AND [d].[DateTime2_4] IN (@dateTimes141, @dateTimes142, @dateTimes143, @dateTimes144, @dateTimes145, @dateTimes146, @dateTimes147, @dateTimes148, @dateTimes149, @dateTimes150, @dateTimes151, @dateTimes152, @dateTimes153, @dateTimes154, @dateTimes155, @dateTimes156, @dateTimes157, @dateTimes158, @dateTimes159, @dateTimes160) AND [d].[DateTime2_5] IN (@dateTimes161, @dateTimes162, @dateTimes163, @dateTimes164, @dateTimes165, @dateTimes166, @dateTimes167, @dateTimes168, @dateTimes169, @dateTimes170, @dateTimes171, @dateTimes172, @dateTimes173, @dateTimes174, @dateTimes175, @dateTimes176, @dateTimes177, @dateTimes178, @dateTimes179, @dateTimes180) AND [d].[DateTime2_6] IN (@dateTimes181, @dateTimes182, @dateTimes183, @dateTimes184, @dateTimes185, @dateTimes186, @dateTimes187, @dateTimes188, @dateTimes189, @dateTimes190, @dateTimes191, @dateTimes192, @dateTimes193, @dateTimes194, @dateTimes195, @dateTimes196, @dateTimes197, @dateTimes198, @dateTimes199, @dateTimes200) AND [d].[DateTime2_7] IN (@dateTimes201, @dateTimes202, @dateTimes203, @dateTimes204, @dateTimes205, @dateTimes206, @dateTimes207, @dateTimes208, @dateTimes209, @dateTimes210, @dateTimes211, @dateTimes212, @dateTimes213, @dateTimes214, @dateTimes215, @dateTimes216, @dateTimes217, @dateTimes218, @dateTimes219, @dateTimes220)
""");
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs
index 5046a266b59..5dd4ae31322 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs
@@ -214,11 +214,15 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note]
FROM [Gears] AS [g]
LEFT JOIN [Tags] AS [t] ON [g].[Nickname] = [t].[GearNickName] AND [g].[SquadId] = [t].[GearSquadId]
-WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -239,12 +243,16 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note]
FROM [Gears] AS [g]
INNER JOIN [Cities] AS [c] ON [g].[CityOfBirthName] = [c].[Name]
LEFT JOIN [Tags] AS [t] ON [g].[Nickname] = [t].[GearNickName] AND [g].[SquadId] = [t].[GearSquadId]
-WHERE [c].[Location] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [c].[Location] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -265,11 +273,15 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank]
FROM [Gears] AS [g]
LEFT JOIN [Tags] AS [t] ON [g].[Nickname] = [t].[GearNickName] AND [g].[SquadId] = [t].[GearSquadId]
-WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqlServerTest.cs
index b7b86e420bc..865b66dabb5 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqlServerTest.cs
@@ -989,6 +989,39 @@ WHERE [t].[Id] IN (@ints1, @ints2)
""");
}
+ public override async Task Parameter_collection_Contains_parameter_bucketization()
+ {
+ await base.Parameter_collection_Contains_parameter_bucketization();
+
+ AssertSql(
+ """
+@ints1='2'
+@ints2='999'
+@ints3='2'
+@ints4='2'
+@ints5='2'
+@ints6='2'
+@ints7='2'
+@ints8='2'
+@ints9='2'
+@ints10='2'
+@ints11='2'
+@ints12='2'
+@ints13='2'
+@ints14='2'
+@ints15='2'
+@ints16='2'
+@ints17='2'
+@ints18='2'
+@ints19='2'
+@ints20='2'
+
+SELECT [t].[Id]
+FROM [TestEntity] AS [t]
+WHERE [t].[Id] IN (@ints1, @ints2, @ints3, @ints4, @ints5, @ints6, @ints7, @ints8, @ints9, @ints10, @ints11, @ints12, @ints13, @ints14, @ints15, @ints16, @ints17, @ints18, @ints19, @ints20)
+""");
+ }
+
[ConditionalFact]
public virtual async Task Same_parameter_with_different_type_mappings()
{
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindMiscellaneousQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindMiscellaneousQuerySqlServerTest.cs
index 67eb04a3756..67062156459 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindMiscellaneousQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindMiscellaneousQuerySqlServerTest.cs
@@ -6078,11 +6078,15 @@ FROM [Customers] AS [c]
@orderIds4='10835'
@orderIds5='10952'
@orderIds6='11011'
+@orderIds7='11011'
+@orderIds8='11011'
+@orderIds9='11011'
+@orderIds10='11011'
SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region]
FROM [Orders] AS [o]
LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID]
-WHERE [o].[OrderID] IN (@orderIds1, @orderIds2, @orderIds3, @orderIds4, @orderIds5, @orderIds6)
+WHERE [o].[OrderID] IN (@orderIds1, @orderIds2, @orderIds3, @orderIds4, @orderIds5, @orderIds6, @orderIds7, @orderIds8, @orderIds9, @orderIds10)
""");
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindNavigationsQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindNavigationsQuerySqlServerTest.cs
index 944b04970b8..fd188f8f064 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindNavigationsQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindNavigationsQuerySqlServerTest.cs
@@ -779,6 +779,10 @@ public override async Task Collection_select_nav_prop_first_or_default_then_nav_
@orderIds4='10835'
@orderIds5='10952'
@orderIds6='11011'
+@orderIds7='11011'
+@orderIds8='11011'
+@orderIds9='11011'
+@orderIds10='11011'
SELECT [s0].[CustomerID], [s0].[Address], [s0].[City], [s0].[CompanyName], [s0].[ContactName], [s0].[ContactTitle], [s0].[Country], [s0].[Fax], [s0].[Phone], [s0].[PostalCode], [s0].[Region]
FROM [Customers] AS [c]
@@ -788,7 +792,7 @@ LEFT JOIN (
SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], [o].[CustomerID] AS [CustomerID0], ROW_NUMBER() OVER(PARTITION BY [o].[CustomerID] ORDER BY [o].[OrderID], [c0].[CustomerID]) AS [row]
FROM [Orders] AS [o]
LEFT JOIN [Customers] AS [c0] ON [o].[CustomerID] = [c0].[CustomerID]
- WHERE [o].[OrderID] IN (@orderIds1, @orderIds2, @orderIds3, @orderIds4, @orderIds5, @orderIds6)
+ WHERE [o].[OrderID] IN (@orderIds1, @orderIds2, @orderIds3, @orderIds4, @orderIds5, @orderIds6, @orderIds7, @orderIds8, @orderIds9, @orderIds10)
) AS [s]
WHERE [s].[row] <= 1
) AS [s0] ON [c].[CustomerID] = [s0].[CustomerID0]
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindWhereQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindWhereQuerySqlServerTest.cs
index bb81e7cd85e..bd0137646c4 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindWhereQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindWhereQuerySqlServerTest.cs
@@ -1470,11 +1470,15 @@ ORDER BY [c0].[CustomerID]
@entity_equality_customer_Orders_OrderID4='10835'
@entity_equality_customer_Orders_OrderID5='10952'
@entity_equality_customer_Orders_OrderID6='11011'
+@entity_equality_customer_Orders_OrderID7='11011'
+@entity_equality_customer_Orders_OrderID8='11011'
+@entity_equality_customer_Orders_OrderID9='11011'
+@entity_equality_customer_Orders_OrderID10='11011'
SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice]
FROM [Order Details] AS [o]
INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID]
-WHERE [o0].[OrderID] IN (@entity_equality_customer_Orders_OrderID1, @entity_equality_customer_Orders_OrderID2, @entity_equality_customer_Orders_OrderID3, @entity_equality_customer_Orders_OrderID4, @entity_equality_customer_Orders_OrderID5, @entity_equality_customer_Orders_OrderID6)
+WHERE [o0].[OrderID] IN (@entity_equality_customer_Orders_OrderID1, @entity_equality_customer_Orders_OrderID2, @entity_equality_customer_Orders_OrderID3, @entity_equality_customer_Orders_OrderID4, @entity_equality_customer_Orders_OrderID5, @entity_equality_customer_Orders_OrderID6, @entity_equality_customer_Orders_OrderID7, @entity_equality_customer_Orders_OrderID8, @entity_equality_customer_Orders_OrderID9, @entity_equality_customer_Orders_OrderID10)
""");
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/TPCGearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/TPCGearsOfWarQuerySqlServerTest.cs
index c5ffaa7b94b..f1c31a3f0a0 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/TPCGearsOfWarQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/TPCGearsOfWarQuerySqlServerTest.cs
@@ -319,6 +319,10 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [u].[Nickname], [u].[SquadId], [u].[AssignedCityName], [u].[CityOfBirthName], [u].[FullName], [u].[HasSoulPatch], [u].[LeaderNickname], [u].[LeaderSquadId], [u].[Rank], [u].[Discriminator], [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note]
FROM (
@@ -329,7 +333,7 @@ UNION ALL
FROM [Officers] AS [o]
) AS [u]
LEFT JOIN [Tags] AS [t] ON [u].[Nickname] = [t].[GearNickName] AND [u].[SquadId] = [t].[GearSquadId]
-WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -350,6 +354,10 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [u].[Nickname], [u].[SquadId], [u].[AssignedCityName], [u].[CityOfBirthName], [u].[FullName], [u].[HasSoulPatch], [u].[LeaderNickname], [u].[LeaderSquadId], [u].[Rank], [u].[Discriminator], [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note]
FROM (
@@ -361,7 +369,7 @@ FROM [Officers] AS [o]
) AS [u]
INNER JOIN [Cities] AS [c] ON [u].[CityOfBirthName] = [c].[Name]
LEFT JOIN [Tags] AS [t] ON [u].[Nickname] = [t].[GearNickName] AND [u].[SquadId] = [t].[GearSquadId]
-WHERE [c].[Location] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [c].[Location] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -382,6 +390,10 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [u].[Nickname], [u].[SquadId], [u].[AssignedCityName], [u].[CityOfBirthName], [u].[FullName], [u].[HasSoulPatch], [u].[LeaderNickname], [u].[LeaderSquadId], [u].[Rank], [u].[Discriminator]
FROM (
@@ -392,7 +404,7 @@ UNION ALL
FROM [Officers] AS [o]
) AS [u]
LEFT JOIN [Tags] AS [t] ON [u].[Nickname] = [t].[GearNickName] AND [u].[SquadId] = [t].[GearSquadId]
-WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/TPTGearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/TPTGearsOfWarQuerySqlServerTest.cs
index f245453c24b..0bb1721925f 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Query/TPTGearsOfWarQuerySqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Query/TPTGearsOfWarQuerySqlServerTest.cs
@@ -303,6 +303,10 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE
WHEN [o].[Nickname] IS NOT NULL THEN N'Officer'
@@ -310,7 +314,7 @@ WHEN [o].[Nickname] IS NOT NULL THEN N'Officer'
FROM [Gears] AS [g]
LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId]
LEFT JOIN [Tags] AS [t] ON [g].[Nickname] = [t].[GearNickName] AND [g].[SquadId] = [t].[GearSquadId]
-WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -331,6 +335,10 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE
WHEN [o].[Nickname] IS NOT NULL THEN N'Officer'
@@ -339,7 +347,7 @@ FROM [Gears] AS [g]
LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId]
INNER JOIN [Cities] AS [c] ON [g].[CityOfBirthName] = [c].[Name]
LEFT JOIN [Tags] AS [t] ON [g].[Nickname] = [t].[GearNickName] AND [g].[SquadId] = [t].[GearSquadId]
-WHERE [c].[Location] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [c].[Location] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -360,6 +368,10 @@ FROM [Tags] AS [t]
@tags4='70534e05-782c-4052-8720-c2c54481ce5f'
@tags5='a7be028a-0cf2-448f-ab55-ce8bc5d8cf69'
@tags6='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags7='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags8='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags9='b39a6fba-9026-4d69-828e-fd7068673e57'
+@tags10='b39a6fba-9026-4d69-828e-fd7068673e57'
SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE
WHEN [o].[Nickname] IS NOT NULL THEN N'Officer'
@@ -367,7 +379,7 @@ END AS [Discriminator]
FROM [Gears] AS [g]
LEFT JOIN [Officers] AS [o] ON [g].[Nickname] = [o].[Nickname] AND [g].[SquadId] = [o].[SquadId]
LEFT JOIN [Tags] AS [t] ON [g].[Nickname] = [t].[GearNickName] AND [g].[SquadId] = [t].[GearSquadId]
-WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE [t].[Id] IS NOT NULL AND [t].[Id] IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs
index 03521e1be02..728045eb5c2 100644
--- a/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs
+++ b/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs
@@ -406,12 +406,16 @@ public override async Task Include_where_list_contains_navigation2(bool async)
@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34'
@tags5='b39a6fba-9026-4d69-828e-fd7068673e57'
@tags6='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags7='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags8='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags9='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags10='df36f493-463f-4123-83f9-6b135deeb7ba'
SELECT "g"."Nickname", "g"."SquadId", "g"."AssignedCityName", "g"."CityOfBirthName", "g"."Discriminator", "g"."FullName", "g"."HasSoulPatch", "g"."LeaderNickname", "g"."LeaderSquadId", "g"."Rank", "t"."Id", "t"."GearNickName", "t"."GearSquadId", "t"."IssueDate", "t"."Note"
FROM "Gears" AS "g"
INNER JOIN "Cities" AS "c" ON "g"."CityOfBirthName" = "c"."Name"
LEFT JOIN "Tags" AS "t" ON "g"."Nickname" = "t"."GearNickName" AND "g"."SquadId" = "t"."GearSquadId"
-WHERE "c"."Location" IS NOT NULL AND "t"."Id" IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE "c"."Location" IS NOT NULL AND "t"."Id" IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -3124,11 +3128,15 @@ public override async Task Navigation_accessed_twice_outside_and_inside_subquery
@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34'
@tags5='b39a6fba-9026-4d69-828e-fd7068673e57'
@tags6='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags7='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags8='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags9='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags10='df36f493-463f-4123-83f9-6b135deeb7ba'
SELECT "g"."Nickname", "g"."SquadId", "g"."AssignedCityName", "g"."CityOfBirthName", "g"."Discriminator", "g"."FullName", "g"."HasSoulPatch", "g"."LeaderNickname", "g"."LeaderSquadId", "g"."Rank"
FROM "Gears" AS "g"
LEFT JOIN "Tags" AS "t" ON "g"."Nickname" = "t"."GearNickName" AND "g"."SquadId" = "t"."GearSquadId"
-WHERE "t"."Id" IS NOT NULL AND "t"."Id" IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE "t"."Id" IS NOT NULL AND "t"."Id" IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
@@ -4197,11 +4205,15 @@ public override async Task Include_where_list_contains_navigation(bool async)
@tags4='a8ad98f9-e023-4e2a-9a70-c2728455bd34'
@tags5='b39a6fba-9026-4d69-828e-fd7068673e57'
@tags6='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags7='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags8='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags9='df36f493-463f-4123-83f9-6b135deeb7ba'
+@tags10='df36f493-463f-4123-83f9-6b135deeb7ba'
SELECT "g"."Nickname", "g"."SquadId", "g"."AssignedCityName", "g"."CityOfBirthName", "g"."Discriminator", "g"."FullName", "g"."HasSoulPatch", "g"."LeaderNickname", "g"."LeaderSquadId", "g"."Rank", "t"."Id", "t"."GearNickName", "t"."GearSquadId", "t"."IssueDate", "t"."Note"
FROM "Gears" AS "g"
LEFT JOIN "Tags" AS "t" ON "g"."Nickname" = "t"."GearNickName" AND "g"."SquadId" = "t"."GearSquadId"
-WHERE "t"."Id" IS NOT NULL AND "t"."Id" IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6)
+WHERE "t"."Id" IS NOT NULL AND "t"."Id" IN (@tags1, @tags2, @tags3, @tags4, @tags5, @tags6, @tags7, @tags8, @tags9, @tags10)
""");
}
diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs
index 2f0eca42149..2ec5a9e8044 100644
--- a/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs
+++ b/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs
@@ -533,6 +533,39 @@ public override async Task Parameter_collection_Contains_with_default_mode_EF_Mu
""");
}
+ public override async Task Parameter_collection_Contains_parameter_bucketization()
+ {
+ await base.Parameter_collection_Contains_parameter_bucketization();
+
+ AssertSql(
+ """
+@ints1='2'
+@ints2='999'
+@ints3='2'
+@ints4='2'
+@ints5='2'
+@ints6='2'
+@ints7='2'
+@ints8='2'
+@ints9='2'
+@ints10='2'
+@ints11='2'
+@ints12='2'
+@ints13='2'
+@ints14='2'
+@ints15='2'
+@ints16='2'
+@ints17='2'
+@ints18='2'
+@ints19='2'
+@ints20='2'
+
+SELECT "t"."Id"
+FROM "TestEntity" AS "t"
+WHERE "t"."Id" IN (@ints1, @ints2, @ints3, @ints4, @ints5, @ints6, @ints7, @ints8, @ints9, @ints10, @ints11, @ints12, @ints13, @ints14, @ints15, @ints16, @ints17, @ints18, @ints19, @ints20)
+""");
+ }
+
protected override ITestStoreFactory TestStoreFactory
=> SqliteTestStoreFactory.Instance;
}