Skip to content

Commit 612ea36

Browse files
fredericDelaportehazzik
authored andcommitted
NH-3895 - Fix expand parameters too.
1 parent 472bad0 commit 612ea36

File tree

6 files changed

+13
-13
lines changed

6 files changed

+13
-13
lines changed

src/NHibernate.Test/NHSpecificTest/NH3567/Mappings.hbm.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@
2525

2626
<many-to-one name="Post" column="PostId" not-null="true"/>
2727
</class>
28-
</hibernate-mapping>
28+
</hibernate-mapping>

src/NHibernate.Test/TypesTest/DateTimeTypeFixture.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,9 @@ void IDriver.RemoveUnusedCommandParameters(DbCommand cmd, SqlString sqlString)
329329
_driverImplementation.RemoveUnusedCommandParameters(cmd, sqlString);
330330
}
331331

332-
void IDriver.ExpandQueryParameters(DbCommand cmd, SqlString sqlString)
332+
void IDriver.ExpandQueryParameters(DbCommand cmd, SqlString sqlString, SqlType[] parameterTypes)
333333
{
334-
_driverImplementation.ExpandQueryParameters(cmd, sqlString);
334+
_driverImplementation.ExpandQueryParameters(cmd, sqlString, parameterTypes);
335335
}
336336

337337
IResultSetsCommand IDriver.GetResultSetsCommand(ISessionImplementor session)

src/NHibernate/Async/Loader/Loader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ protected internal virtual async Task<DbCommand> PrepareQueryCommandAsync(QueryP
825825

826826
IDriver driver = _factory.ConnectionProvider.Driver;
827827
driver.RemoveUnusedCommandParameters(command, sqlString);
828-
driver.ExpandQueryParameters(command, sqlString);
828+
driver.ExpandQueryParameters(command, sqlString, sqlCommand.ParameterTypes);
829829
}
830830
catch (HibernateException)
831831
{

src/NHibernate/Driver/DriverBase.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ public void RemoveUnusedCommandParameters(DbCommand cmd, SqlString sqlString)
231231
.ForEach(unusedParameterName => cmd.Parameters.RemoveAt(unusedParameterName));
232232
}
233233

234-
public virtual void ExpandQueryParameters(DbCommand cmd, SqlString sqlString)
234+
public virtual void ExpandQueryParameters(DbCommand cmd, SqlString sqlString, SqlType[] parameterTypes)
235235
{
236236
if (UseNamedPrefixInSql)
237237
return; // named parameters are ok
@@ -242,8 +242,10 @@ public virtual void ExpandQueryParameters(DbCommand cmd, SqlString sqlString)
242242
var parameter = part as Parameter;
243243
if (parameter != null)
244244
{
245-
var originalParameter = cmd.Parameters[parameter.ParameterPosition.Value];
246-
expandedParameters.Add(CloneParameter(cmd, originalParameter));
245+
var index = parameter.ParameterPosition.Value;
246+
var originalParameter = cmd.Parameters[index];
247+
var originalType = parameterTypes[index];
248+
expandedParameters.Add(CloneParameter(cmd, originalParameter, originalType));
247249
}
248250
}
249251

@@ -262,11 +264,9 @@ public virtual bool SupportsMultipleQueries
262264
get { return false; }
263265
}
264266

265-
protected virtual DbParameter CloneParameter(DbCommand cmd, DbParameter originalParameter)
267+
protected virtual DbParameter CloneParameter(DbCommand cmd, DbParameter originalParameter, SqlType originalType)
266268
{
267-
var clone = cmd.CreateParameter();
268-
clone.DbType = originalParameter.DbType;
269-
clone.ParameterName = originalParameter.ParameterName;
269+
var clone = GenerateParameter(cmd, originalParameter.ParameterName, originalType);
270270
clone.Value = originalParameter.Value;
271271
return clone;
272272
}

src/NHibernate/Driver/IDriver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public interface IDriver
105105
/// for 'select ... from MyTable t where t.Col1 = @p0 and t.Col2 = @p0' we can issue
106106
/// 'select ... from MyTable t where t.Col1 = ? and t.Col2 = ?'
107107
/// </remarks>
108-
void ExpandQueryParameters(DbCommand cmd, SqlString sqlString);
108+
void ExpandQueryParameters(DbCommand cmd, SqlString sqlString, SqlType[] parameterTypes);
109109

110110
IResultSetsCommand GetResultSetsCommand(ISessionImplementor session);
111111
bool SupportsMultipleQueries { get; }

src/NHibernate/Loader/Loader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1206,7 +1206,7 @@ protected internal virtual DbCommand PrepareQueryCommand(QueryParameters queryPa
12061206

12071207
IDriver driver = _factory.ConnectionProvider.Driver;
12081208
driver.RemoveUnusedCommandParameters(command, sqlString);
1209-
driver.ExpandQueryParameters(command, sqlString);
1209+
driver.ExpandQueryParameters(command, sqlString, sqlCommand.ParameterTypes);
12101210
}
12111211
catch (HibernateException)
12121212
{

0 commit comments

Comments
 (0)