Skip to content

Commit 4be6cd2

Browse files
committed
Refactor ExpandBatchIdPlaceholder
1 parent b813818 commit 4be6cd2

File tree

4 files changed

+17
-29
lines changed

4 files changed

+17
-29
lines changed

src/NHibernate/Criterion/InExpression.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,18 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
6767
list.AddRange(criteriaQuery.NewQueryParameter(typedValue));
6868
}
6969

70-
var bogusParam = Parameter.Placeholder;
71-
72-
var sqlString = GetSqlString(criteriaQuery, columns, bogusParam);
73-
sqlString.SubstituteBogusParameters(list, bogusParam);
74-
return sqlString;
70+
return GetSqlString(columns, Values.Length, list, criteriaQuery.Factory.Dialect);
7571
}
7672

77-
private SqlString GetSqlString(ICriteriaQuery criteriaQuery, SqlString[] columns, Parameter bogusParam)
73+
internal static SqlString GetSqlString(object[] columns, int paramsCount, IReadOnlyList<Parameter> parameters, Dialect.Dialect dialect)
7874
{
79-
return GetSqlString(columns, Values.Length, criteriaQuery.Factory.Dialect, bogusParam);
75+
var bogusParam = Parameter.Placeholder;
76+
var sqlString = GetSqlString(columns, paramsCount, bogusParam, dialect);
77+
sqlString.SubstituteBogusParameters(parameters, bogusParam);
78+
return sqlString;
8079
}
81-
82-
internal static SqlString GetSqlString(object[] columns, int paramsCount, Dialect.Dialect dialect, Parameter bogusParam)
80+
81+
private static SqlString GetSqlString(object[] columns, int paramsCount, Parameter bogusParam, Dialect.Dialect dialect)
8382
{
8483
if (columns.Length <= 1 || dialect.SupportsRowValueConstructorSyntaxInInList)
8584
{

src/NHibernate/Loader/Collection/DynamicBatchingCollectionLoader.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ private JoinWalker BuildJoinWalker(IQueryableCollection collectionPersister, ISe
3030
private protected override SqlString TransformSql(SqlString sqlString, QueryParameters queryParameters, HashSet<IParameterSpecification> parameterSpecifications)
3131
{
3232
var columns = StringHelper.Qualify(_alias, CollectionPersister.KeyColumnNames);
33-
DynamicBatchingHelper.ExpandBatchIdPlaceholder(sqlString, queryParameters, columns, Factory.Dialect, out var result, out var parameters);
33+
var paramsCount = queryParameters.PositionalParameterValues.Length;
34+
var parameters = Parameter.GenerateParameters(paramsCount * columns.Length);
35+
var result = DynamicBatchingHelper.ExpandBatchIdPlaceholder(sqlString, columns, paramsCount, parameters, Factory.Dialect);
3436
parameterSpecifications.UnionWith(CreateParameterSpecificationsAndAssignBackTrack(parameters));
3537
return result;
3638
}

src/NHibernate/Loader/DynamicBatchingHelper.cs

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using NHibernate.Criterion;
3-
using NHibernate.Engine;
43
using NHibernate.SqlCommand;
54

65
namespace NHibernate.Loader
@@ -14,25 +13,11 @@ public static SqlStringBuilder BuildBatchFetchRestrictionFragment()
1413
return new SqlStringBuilder(1).Add(BatchIdPlaceholder);
1514
}
1615

17-
public static void ExpandBatchIdPlaceholder(SqlString sqlString, QueryParameters queryParameters, string[] columns, Dialect.Dialect dialect, out SqlString result, out Parameter[] parameters)
16+
public static SqlString ExpandBatchIdPlaceholder(SqlString sqlString, string[] columns, int paramsCount, Parameter[] parameters, Dialect.Dialect dialect)
1817
{
19-
var wherePart = GenerateWherePart(queryParameters, columns, dialect, out parameters);
20-
result = sqlString.ReplaceLast(BatchIdPlaceholder, wherePart);
21-
}
22-
23-
private static SqlString GenerateWherePart(QueryParameters queryParameters, string[] columns, Dialect.Dialect dialect, out Parameter[] parameters)
24-
{
25-
var bogusParam = Parameter.Placeholder;
26-
var wherePart = InExpression.GetSqlString(columns, queryParameters.PositionalParameterValues.Length, dialect, bogusParam);
27-
var paramsCount = wherePart.GetParameterCount();
28-
parameters = new Parameter[paramsCount];
29-
for (var i = 0; i < parameters.Length; i++)
30-
{
31-
parameters[i] = Parameter.Placeholder;
32-
}
18+
var wherePart = InExpression.GetSqlString(columns, paramsCount, parameters, dialect);
3319

34-
wherePart.SubstituteBogusParameters(parameters, bogusParam);
35-
return wherePart;
20+
return sqlString.ReplaceLast(BatchIdPlaceholder, wherePart);
3621
}
3722

3823
public static int GetIdsToLoad(object[] batch, out object[] idsToLoad)

src/NHibernate/Loader/Entity/DynamicEntityLoader.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public virtual IList DoEntityBatchFetch(ISessionImplementor session, QueryParame
3131
private protected override SqlString TransformSql(SqlString sqlString, QueryParameters queryParameters, HashSet<IParameterSpecification> parameterSpecifications)
3232
{
3333
var columns = StringHelper.Qualify(_alias, persister.KeyColumnNames);
34-
DynamicBatchingHelper.ExpandBatchIdPlaceholder(sqlString, queryParameters, columns, Factory.Dialect, out var result, out var parameters);
34+
var paramsCount = queryParameters.PositionalParameterValues.Length;
35+
var parameters = Parameter.GenerateParameters(paramsCount * columns.Length);
36+
var result = DynamicBatchingHelper.ExpandBatchIdPlaceholder(sqlString, columns, paramsCount, parameters, Factory.Dialect);
3537
parameterSpecifications.UnionWith(CreateParameterSpecificationsAndAssignBackTrack(parameters));
3638
return result;
3739
}

0 commit comments

Comments
 (0)