88//------------------------------------------------------------------------------
99
1010
11+ using System ;
1112using System . Collections . Generic ;
1213using System . Linq ;
14+ using System . Linq . Expressions ;
1315using System . Text . RegularExpressions ;
16+ using NHibernate . DomainModel . Northwind . Entities ;
1417using NUnit . Framework ;
1518using NHibernate . Linq ;
1619
@@ -22,7 +25,7 @@ namespace NHibernate.Test.Linq
2225 public class ParameterTestsAsync : LinqTestCase
2326 {
2427 [ Test ]
25- public async Task UsingSameArrayParameterTwiceAsync ( )
28+ public async Task UsingArrayParameterTwiceAsync ( )
2629 {
2730 var ids = new [ ] { 11008 , 11019 , 11039 } ;
2831 await ( AssertTotalParametersAsync (
@@ -31,36 +34,36 @@ public async Task UsingSameArrayParameterTwiceAsync()
3134 }
3235
3336 [ Test ]
34- public async Task UsingDifferentArrayParametersAsync ( )
37+ public async Task UsingTwoArrayParametersAsync ( )
3538 {
36- var ids = new [ ] { 11008 , 11019 , 11039 } ;
37- var ids2 = new [ ] { 11008 , 11019 , 11039 } ;
39+ var ids = new [ ] { 11008 , 11019 , 11039 } ;
40+ var ids2 = new [ ] { 11008 , 11019 , 11039 } ;
3841 await ( AssertTotalParametersAsync (
3942 db . Orders . Where ( o => ids . Contains ( o . OrderId ) && ids2 . Contains ( o . OrderId ) ) ,
4043 ids . Length + ids2 . Length ) ) ;
4144 }
4245
4346 [ Test ]
44- public async Task UsingSameListParameterTwiceAsync ( )
47+ public async Task UsingListParameterTwiceAsync ( )
4548 {
46- var ids = new List < int > { 11008 , 11019 , 11039 } ;
49+ var ids = new List < int > { 11008 , 11019 , 11039 } ;
4750 await ( AssertTotalParametersAsync (
4851 db . Orders . Where ( o => ids . Contains ( o . OrderId ) && ids . Contains ( o . OrderId ) ) ,
4952 ids . Count ) ) ;
5053 }
5154
5255 [ Test ]
53- public async Task UsingDifferentListParametersAsync ( )
56+ public async Task UsingTwoListParametersAsync ( )
5457 {
55- var ids = new List < int > { 11008 , 11019 , 11039 } ;
56- var ids2 = new List < int > { 11008 , 11019 , 11039 } ;
58+ var ids = new List < int > { 11008 , 11019 , 11039 } ;
59+ var ids2 = new List < int > { 11008 , 11019 , 11039 } ;
5760 await ( AssertTotalParametersAsync (
5861 db . Orders . Where ( o => ids . Contains ( o . OrderId ) && ids2 . Contains ( o . OrderId ) ) ,
5962 ids . Count + ids2 . Count ) ) ;
6063 }
6164
6265 [ Test ]
63- public async Task UsingSameEntityParameterTwiceAsync ( )
66+ public async Task UsingEntityParameterTwiceAsync ( )
6467 {
6568 var order = await ( db . Orders . FirstAsync ( ) ) ;
6669 await ( AssertTotalParametersAsync (
@@ -69,17 +72,17 @@ public async Task UsingSameEntityParameterTwiceAsync()
6972 }
7073
7174 [ Test ]
72- public async Task UsingDifferentEntityParametersAsync ( )
75+ public async Task UsingTwoEntityParametersAsync ( )
7376 {
7477 var order = await ( db . Orders . FirstAsync ( ) ) ;
75- var order2 = await ( db . Orders . Skip ( 1 ) . FirstAsync ( ) ) ;
78+ var order2 = await ( db . Orders . FirstAsync ( ) ) ;
7679 await ( AssertTotalParametersAsync (
7780 db . Orders . Where ( o => o == order && o != order2 ) ,
7881 2 ) ) ;
7982 }
8083
8184 [ Test ]
82- public async Task UsingSameValueTypeParameterTwiceAsync ( )
85+ public async Task UsingValueTypeParameterTwiceAsync ( )
8386 {
8487 var value = 1 ;
8588 await ( AssertTotalParametersAsync (
@@ -88,17 +91,35 @@ public async Task UsingSameValueTypeParameterTwiceAsync()
8891 }
8992
9093 [ Test ]
91- public async Task UsingDifferentValueTypeParametersAsync ( )
94+ public async Task UsingNegateValueTypeParameterTwiceAsync ( )
95+ {
96+ var value = 1 ;
97+ await ( AssertTotalParametersAsync (
98+ db . Orders . Where ( o => o . OrderId == - value && o . OrderId != - value ) ,
99+ 1 ) ) ;
100+ }
101+
102+ [ Test ]
103+ public async Task UsingNegateValueTypeParameterAsync ( )
92104 {
93105 var value = 1 ;
94- var value2 = 2 ;
106+ await ( AssertTotalParametersAsync (
107+ db . Orders . Where ( o => o . OrderId == value && o . OrderId != - value ) ,
108+ 2 ) ) ;
109+ }
110+
111+ [ Test ]
112+ public async Task UsingTwoValueTypeParametersAsync ( )
113+ {
114+ var value = 1 ;
115+ var value2 = 1 ;
95116 await ( AssertTotalParametersAsync (
96117 db . Orders . Where ( o => o . OrderId == value && o . OrderId != value2 ) ,
97118 2 ) ) ;
98119 }
99120
100121 [ Test ]
101- public async Task UsingSameStringParameterTwiceAsync ( )
122+ public async Task UsingStringParameterTwiceAsync ( )
102123 {
103124 var value = "test" ;
104125 await ( AssertTotalParametersAsync (
@@ -107,15 +128,91 @@ public async Task UsingSameStringParameterTwiceAsync()
107128 }
108129
109130 [ Test ]
110- public async Task UsingDifferentStringParametersAsync ( )
131+ public async Task UsingTwoStringParametersAsync ( )
111132 {
112133 var value = "test" ;
113- var value2 = "test2 " ;
134+ var value2 = "test " ;
114135 await ( AssertTotalParametersAsync (
115136 db . Products . Where ( o => o . Name == value && o . Name != value2 ) ,
116137 2 ) ) ;
117138 }
118139
140+ [ Test ]
141+ public async Task UsingObjectPropertyParameterTwiceAsync ( )
142+ {
143+ var value = new Product { Name = "test" } ;
144+ await ( AssertTotalParametersAsync (
145+ db . Products . Where ( o => o . Name == value . Name && o . Name != value . Name ) ,
146+ 1 ) ) ;
147+ }
148+
149+ [ Test ]
150+ public async Task UsingTwoObjectPropertyParametersAsync ( )
151+ {
152+ var value = new Product { Name = "test" } ;
153+ var value2 = new Product { Name = "test" } ;
154+ await ( AssertTotalParametersAsync (
155+ db . Products . Where ( o => o . Name == value . Name && o . Name != value2 . Name ) ,
156+ 2 ) ) ;
157+ }
158+
159+ [ Test ]
160+ public async Task UsingObjectNestedPropertyParameterTwiceAsync ( )
161+ {
162+ var value = new Employee { Superior = new Employee { Superior = new Employee { FirstName = "test" } } } ;
163+ await ( AssertTotalParametersAsync (
164+ db . Employees . Where ( o => o . FirstName == value . Superior . Superior . FirstName && o . FirstName != value . Superior . Superior . FirstName ) ,
165+ 1 ) ) ;
166+ }
167+
168+ [ Test ]
169+ public async Task UsingDifferentObjectNestedPropertyParameterAsync ( )
170+ {
171+ var value = new Employee { Superior = new Employee { FirstName = "test" , Superior = new Employee { FirstName = "test" } } } ;
172+ await ( AssertTotalParametersAsync (
173+ db . Employees . Where ( o => o . FirstName == value . Superior . FirstName && o . FirstName != value . Superior . Superior . FirstName ) ,
174+ 2 ) ) ;
175+ }
176+
177+ [ Test ]
178+ public async Task UsingMethodObjectPropertyParameterTwiceAsync ( )
179+ {
180+ var value = new Product { Name = "test" } ;
181+ await ( AssertTotalParametersAsync (
182+ db . Products . Where ( o => o . Name == value . Name . Trim ( ) && o . Name != value . Name . Trim ( ) ) ,
183+ 2 ) ) ;
184+ }
185+
186+ [ Test ]
187+ public async Task UsingStaticMethodObjectPropertyParameterTwiceAsync ( )
188+ {
189+ var value = new Product { Name = "test" } ;
190+ await ( AssertTotalParametersAsync (
191+ db . Products . Where ( o => o . Name == string . Copy ( value . Name ) && o . Name != string . Copy ( value . Name ) ) ,
192+ 2 ) ) ;
193+ }
194+
195+ [ Test ]
196+ public async Task UsingObjectPropertyParameterWithSecondLevelClosureAsync ( )
197+ {
198+ var value = new Product { Name = "test" } ;
199+ Expression < Func < Product , bool > > predicate = o => o . Name == value . Name && o . Name != value . Name ;
200+ await ( AssertTotalParametersAsync (
201+ db . Products . Where ( predicate ) ,
202+ 1 ) ) ;
203+ }
204+
205+ [ Test ]
206+ public async Task UsingObjectPropertyParameterWithThirdLevelClosureAsync ( )
207+ {
208+ var value = new Product { Name = "test" } ;
209+ Expression < Func < OrderLine , bool > > orderLinePredicate = o => o . Order . ShippedTo == value . Name && o . Order . ShippedTo != value . Name ;
210+ Expression < Func < Product , bool > > predicate = o => o . Name == value . Name && o . OrderLines . AsQueryable ( ) . Any ( orderLinePredicate ) ;
211+ await ( AssertTotalParametersAsync (
212+ db . Products . Where ( predicate ) ,
213+ 1 ) ) ;
214+ }
215+
119216 private static async Task AssertTotalParametersAsync < T > ( IQueryable < T > query , int parameterNumber , CancellationToken cancellationToken = default ( CancellationToken ) )
120217 {
121218 using ( var sqlSpy = new SqlLogSpy ( ) )
0 commit comments