Skip to content

Commit 2845a28

Browse files
committed
Insert underscore in combined parameter name
1 parent 8da7a19 commit 2845a28

File tree

6 files changed

+157
-9
lines changed

6 files changed

+157
-9
lines changed

src/NHibernate.Test/Async/Futures/LinqFutureFixture.cs

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
//------------------------------------------------------------------------------
99

1010

11+
using System.Collections.Generic;
1112
using NHibernate.Driver;
1213
using NHibernate.Linq;
1314
using NUnit.Framework;
@@ -205,7 +206,7 @@ public async Task CanUseFutureQueryWithAnonymousTypeAsync()
205206
public async Task CanUseFutureFetchQueryAsync()
206207
{
207208
IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
208-
209+
209210
using (var s = Sfi.OpenSession())
210211
using (var tx = s.BeginTransaction())
211212
{
@@ -279,7 +280,7 @@ public async Task TwoFuturesRunInTwoRoundTripsAsync()
279280
public async Task CanCombineSingleFutureValueWithEnumerableFuturesAsync()
280281
{
281282
IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
282-
283+
283284
using (var s = Sfi.OpenSession())
284285
{
285286
var persons = s.Query<Person>()
@@ -364,12 +365,52 @@ public async Task CanExecuteMultipleQueriesOnSameExpressionAsync()
364365
var events = logSpy.Appender.GetEvents();
365366
Assert.AreEqual(1, events.Length);
366367
var wholeLog = logSpy.GetWholeLog();
367-
string paramPrefix = ((DriverBase)Sfi.ConnectionProvider.Driver).NamedPrefix;
368+
string paramPrefix = ((DriverBase) Sfi.ConnectionProvider.Driver).NamedPrefix;
368369
Assert.That(
369370
wholeLog,
370371
Does.Contain(paramPrefix + "p0 = 1 [Type: Int32 (0:0:0)], " + paramPrefix + "p1 = 2 [Type: Int32 (0:0:0)]"));
371372
}
372373
}
373374
}
375+
376+
[Test]
377+
public async Task UseManyParametersAndQueries_DoesNotCauseParameterNameCollisionsAsync()
378+
{
379+
//GH-1357
380+
using (var s = OpenSession())
381+
using (var tx = s.BeginTransaction())
382+
{
383+
var p1 = new Person { Name = "Person name", Age = 15};
384+
var p2 = new Person { Name = "Person name", Age = 5 };
385+
386+
await (s.SaveAsync(p1));
387+
await (s.SaveAsync(p2));
388+
await (tx.CommitAsync());
389+
}
390+
using (var s = Sfi.OpenSession())
391+
{
392+
var list = new List<IFutureEnumerable<Person>>();
393+
for (var i = 0; i < 12; i++)
394+
{
395+
var query = s.Query<Person>();
396+
for (var j = 0; j < 12; j++)
397+
{
398+
query = query.Where(x => x.Age > j);
399+
}
400+
list.Add(query.ToFuture());
401+
}
402+
foreach (var query in list)
403+
{
404+
var result = query.ToList();
405+
Assert.That(result.Count,Is.EqualTo(1));
406+
}
407+
}
408+
using (var s = OpenSession())
409+
using (var tx = s.BeginTransaction())
410+
{
411+
await (s.DeleteAsync("from Person"));
412+
await (tx.CommitAsync());
413+
}
414+
}
374415
}
375416
}

src/NHibernate.Test/Async/QueryTest/MultiCriteriaFixture.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,5 +441,38 @@ public async Task CanGetResultInAGenericListAsync()
441441
Assert.That(results[1], Is.InstanceOf<List<int>>());
442442
}
443443
}
444+
445+
[Test]
446+
public async Task UseManyParametersAndQueries_DoesNotCauseParameterNameCollisionsAsync()
447+
{
448+
//GH-1357
449+
using (var s = OpenSession())
450+
{
451+
var item = new Item {Id = 15};
452+
await (s.SaveAsync(item));
453+
await (s.FlushAsync());
454+
}
455+
456+
using (var s = OpenSession())
457+
{
458+
var multi = s.CreateMultiCriteria();
459+
460+
for (var i = 0; i < 12; i++)
461+
{
462+
var criteria = s.CreateCriteria(typeof(Item));
463+
for (var j = 0; j < 12; j++)
464+
{
465+
criteria = criteria.Add(Restrictions.Gt("id", j));
466+
}
467+
multi.Add(criteria);
468+
}
469+
//Paramater combining is only used for cacheable queries
470+
multi.SetCacheable(true);
471+
foreach (IList result in await (multi.ListAsync()))
472+
{
473+
Assert.That(result.Count, Is.EqualTo(1));
474+
}
475+
}
476+
}
444477
}
445478
}

src/NHibernate.Test/Futures/LinqFutureFixture.cs

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NHibernate.Driver;
1+
using System.Collections.Generic;
2+
using NHibernate.Driver;
23
using NHibernate.Linq;
34
using NUnit.Framework;
45
using System.Linq;
@@ -194,7 +195,7 @@ public void CanUseFutureQueryWithAnonymousType()
194195
public void CanUseFutureFetchQuery()
195196
{
196197
IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
197-
198+
198199
using (var s = Sfi.OpenSession())
199200
using (var tx = s.BeginTransaction())
200201
{
@@ -268,7 +269,7 @@ public void TwoFuturesRunInTwoRoundTrips()
268269
public void CanCombineSingleFutureValueWithEnumerableFutures()
269270
{
270271
IgnoreThisTestIfMultipleQueriesArentSupportedByDriver();
271-
272+
272273
using (var s = Sfi.OpenSession())
273274
{
274275
var persons = s.Query<Person>()
@@ -353,12 +354,52 @@ public void CanExecuteMultipleQueriesOnSameExpression()
353354
var events = logSpy.Appender.GetEvents();
354355
Assert.AreEqual(1, events.Length);
355356
var wholeLog = logSpy.GetWholeLog();
356-
string paramPrefix = ((DriverBase)Sfi.ConnectionProvider.Driver).NamedPrefix;
357+
string paramPrefix = ((DriverBase) Sfi.ConnectionProvider.Driver).NamedPrefix;
357358
Assert.That(
358359
wholeLog,
359360
Does.Contain(paramPrefix + "p0 = 1 [Type: Int32 (0:0:0)], " + paramPrefix + "p1 = 2 [Type: Int32 (0:0:0)]"));
360361
}
361362
}
362363
}
364+
365+
[Test]
366+
public void UseManyParametersAndQueries_DoesNotCauseParameterNameCollisions()
367+
{
368+
//GH-1357
369+
using (var s = OpenSession())
370+
using (var tx = s.BeginTransaction())
371+
{
372+
var p1 = new Person { Name = "Person name", Age = 15};
373+
var p2 = new Person { Name = "Person name", Age = 5 };
374+
375+
s.Save(p1);
376+
s.Save(p2);
377+
tx.Commit();
378+
}
379+
using (var s = Sfi.OpenSession())
380+
{
381+
var list = new List<IFutureEnumerable<Person>>();
382+
for (var i = 0; i < 12; i++)
383+
{
384+
var query = s.Query<Person>();
385+
for (var j = 0; j < 12; j++)
386+
{
387+
query = query.Where(x => x.Age > j);
388+
}
389+
list.Add(query.ToFuture());
390+
}
391+
foreach (var query in list)
392+
{
393+
var result = query.ToList();
394+
Assert.That(result.Count,Is.EqualTo(1));
395+
}
396+
}
397+
using (var s = OpenSession())
398+
using (var tx = s.BeginTransaction())
399+
{
400+
s.Delete("from Person");
401+
tx.Commit();
402+
}
403+
}
363404
}
364405
}

src/NHibernate.Test/QueryTest/MultiCriteriaFixture.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,5 +487,38 @@ public void CanGetResultInAGenericList()
487487
Assert.That(results[1], Is.InstanceOf<List<int>>());
488488
}
489489
}
490+
491+
[Test]
492+
public void UseManyParametersAndQueries_DoesNotCauseParameterNameCollisions()
493+
{
494+
//GH-1357
495+
using (var s = OpenSession())
496+
{
497+
var item = new Item {Id = 15};
498+
s.Save(item);
499+
s.Flush();
500+
}
501+
502+
using (var s = OpenSession())
503+
{
504+
var multi = s.CreateMultiCriteria();
505+
506+
for (var i = 0; i < 12; i++)
507+
{
508+
var criteria = s.CreateCriteria(typeof(Item));
509+
for (var j = 0; j < 12; j++)
510+
{
511+
criteria = criteria.Add(Restrictions.Gt("id", j));
512+
}
513+
multi.Add(criteria);
514+
}
515+
//Paramater combining is only used for cacheable queries
516+
multi.SetCacheable(true);
517+
foreach (IList result in multi.List())
518+
{
519+
Assert.That(result.Count, Is.EqualTo(1));
520+
}
521+
}
522+
}
490523
}
491524
}

src/NHibernate/Impl/MultiCriteriaImpl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ private QueryParameters CreateCombinedQueryParameters()
459459
{
460460
foreach (KeyValuePair<string, TypedValue> dictionaryEntry in queryParameters.NamedParameters)
461461
{
462-
combinedQueryParameters.NamedParameters.Add(dictionaryEntry.Key + index, dictionaryEntry.Value);
462+
combinedQueryParameters.NamedParameters.Add(dictionaryEntry.Key + "_" + index, dictionaryEntry.Value);
463463
}
464464
index += 1;
465465
positionalParameterTypes.AddRange(queryParameters.PositionalParameterTypes);

src/NHibernate/Impl/MultiQueryImpl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ private QueryParameters CreateCombinedQueryParameters()
752752
{
753753
foreach (KeyValuePair<string, TypedValue> dictionaryEntry in queryParameters.NamedParameters)
754754
{
755-
combinedQueryParameters.NamedParameters.Add(dictionaryEntry.Key + index, dictionaryEntry.Value);
755+
combinedQueryParameters.NamedParameters.Add(dictionaryEntry.Key + "_" + index, dictionaryEntry.Value);
756756
}
757757
index += 1;
758758
positionalParameterTypes.AddRange(queryParameters.PositionalParameterTypes);

0 commit comments

Comments
 (0)