@@ -61,7 +61,7 @@ public void Can_compare_null_constant_in_subquery_nested_in_SqlExpression()
61
61
{
62
62
RecreateAnyObjectTables ( db ) ;
63
63
64
- var q = db . From < AnyObjectClass > ( ) . Where ( x => Sql . In ( x . Identity ,
64
+ var q = db . From < AnyObjectClass > ( ) . Where ( x => Sql . In ( x . Identity ,
65
65
db . From < AnyObjectClass > ( )
66
66
. Where ( y => y . Identity != null )
67
67
. Select ( y => y . Identity . Value ) ) ) ;
@@ -162,10 +162,177 @@ public void Can_select_sub_expression_when_called_within_a_datamodel()
162
162
var model = new AnyObjectClass { db = db } ;
163
163
var result = model . CustomProperty ;
164
164
165
- db . GetLastSql ( ) . Print ( ) ;
165
+ result . PrintDump ( ) ;
166
+ db . GetLastSql ( ) . PrintDump ( ) ;
167
+ Assert . That ( db . GetLastSql ( ) . NormalizeSql ( ) , Is . StringContaining ( "is null" ) ) ;
168
+
169
+ model = new AnyObjectClass { db = db , Identity = Guid . Parse ( "104ECE6A-7117-4205-961C-126AD276565C" ) } ;
170
+ result = model . CustomProperty ;
166
171
167
172
result . PrintDump ( ) ;
173
+ db . GetLastSql ( ) . PrintDump ( ) ;
174
+ Assert . That ( db . GetLastSql ( ) . NormalizeSql ( ) , Is . StringContaining ( "@" ) ) ;
175
+ }
176
+ }
177
+
178
+ [ Test ]
179
+ public void SubExpressions2 ( )
180
+ {
181
+ int orderTypeId = 2 ;
182
+ using ( var db = OpenDbConnection ( ) )
183
+ {
184
+ var subExpr = db . From < Order3 > ( )
185
+ . Where ( y => y . Order2TypeId == orderTypeId )
186
+ . Select ( y => y . Person2Id ) ;
187
+
188
+ Assert . That ( subExpr . ToSelectStatement ( ) . NormalizeSql ( ) , Is . StringContaining ( "@" ) ) ;
189
+
190
+ var expr = db . From < Person2 > ( )
191
+ . Where ( x => Sql . In ( x . Id , subExpr ) ) ;
192
+
193
+ Assert . That ( subExpr . ToSelectStatement ( ) . NormalizeSql ( ) , Is . StringContaining ( "@" ) ) ;
168
194
}
169
195
}
196
+
197
+ [ Test ]
198
+ public void SubExpressions_TestMethod1 ( )
199
+ {
200
+ using ( var db = OpenDbConnection ( ) )
201
+ {
202
+ var w = new Waybill ( db )
203
+ {
204
+ Identity = Guid . Empty ,
205
+ Name = "WaybillTest"
206
+ } ;
207
+
208
+ w . TestMethod1 ( ) ;
209
+ }
210
+ }
211
+
212
+ [ Test ]
213
+ public void SubExpressions_TestMethod2 ( )
214
+ {
215
+ using ( var db = OpenDbConnection ( ) )
216
+ {
217
+ var w = new Waybill ( db )
218
+ {
219
+ Identity = Guid . Empty ,
220
+ Name = "WaybillTest"
221
+ } ;
222
+
223
+ w . TestMethod2 ( ) ;
224
+ }
225
+ }
226
+
227
+ [ Test ]
228
+ public void SubExpressions_TestMethod3 ( )
229
+ {
230
+ using ( var db = OpenDbConnection ( ) )
231
+ {
232
+ var w = new Waybill ( db )
233
+ {
234
+ Identity = Guid . Empty ,
235
+ Name = "WaybillTest"
236
+ } ;
237
+
238
+ w . TestMethod3 ( ) ;
239
+ }
240
+ }
241
+ }
242
+
243
+ public class WaybillItem : BaseObject
244
+ {
245
+ public string WbItemName { get ; set ; }
246
+
247
+ [ ForeignKey ( typeof ( Waybill ) ) ]
248
+ public Guid WaybillId { get ; set ; }
249
+
250
+ [ ForeignKey ( typeof ( MarginItem ) ) ]
251
+ public Guid ? MarginItemId { get ; set ; }
252
+ }
253
+
254
+ public class MarginItem : BaseObject
255
+ {
256
+ public string MarginName { get ; set ; }
257
+ }
258
+
259
+
260
+ //-------------------------
261
+ public class Person3
262
+ {
263
+ [ AutoIncrement ]
264
+ public int Id { get ; set ; }
265
+
266
+ public string Name { get ; set ; }
267
+ }
268
+
269
+ public class Order3
270
+ {
271
+ [ AutoIncrement ]
272
+ public int Id { get ; set ; }
273
+
274
+ [ References ( typeof ( Person3 ) ) ]
275
+ public int Person2Id { get ; set ; }
276
+
277
+ public DateTime Order2Date { get ; set ; }
278
+
279
+ public int Order2TypeId { get ; set ; }
280
+ }
281
+
282
+ public class BaseObject
283
+ {
284
+ public Guid ? Identity { get ; set ; }
285
+ }
286
+
287
+ public class Waybill : BaseObject
288
+ {
289
+ private readonly IDbConnection db ;
290
+
291
+ public string Name { get ; set ; }
292
+
293
+ public Waybill ( IDbConnection db )
294
+ {
295
+ this . db = db ;
296
+ }
297
+
298
+ public void TestMethod1 ( )
299
+ {
300
+ var localIdentity = this . Identity ;
301
+
302
+ var q = this . db . From < MarginItem > ( )
303
+ . Where ( s => Sql . In ( s . Identity ,
304
+ this . db . From < WaybillItem > ( )
305
+ . Where ( b => b . WaybillId == localIdentity )
306
+ . Select ( b => b . MarginItemId ) ) ) ;
307
+
308
+ q . ToSelectStatement ( ) . PrintDump ( ) ;
309
+ Assert . That ( q . ToSelectStatement ( ) . NormalizeSql ( ) , Is . StringContaining ( "@" ) ) ;
310
+ }
311
+
312
+ public void TestMethod2 ( )
313
+ {
314
+ var q = db . From < MarginItem > ( )
315
+ . Where ( s => Sql . In ( s . Identity ,
316
+ db . From < WaybillItem > ( )
317
+ . Where ( b => b . WaybillId == this . Identity )
318
+ . Select ( b => b . MarginItemId ) ) ) ;
319
+
320
+ q . ToSelectStatement ( ) . PrintDump ( ) ;
321
+ Assert . That ( q . ToSelectStatement ( ) . NormalizeSql ( ) , Is . StringContaining ( "@" ) ) ;
322
+ }
323
+
324
+ public void TestMethod3 ( )
325
+ {
326
+ var q = db . From < MarginItem > ( )
327
+ . Where ( s => Sql . In ( s . Identity ,
328
+ db . From < WaybillItem > ( )
329
+ . LeftJoin < MarginItem > ( ( wi , mi ) => wi . MarginItemId == mi . Identity )
330
+ . Where ( b => b . WaybillId == this . Identity )
331
+ . And < MarginItem > ( b => b . MarginName == this . Name )
332
+ . Select ( b => b . MarginItemId ) ) ) ;
333
+
334
+ q . ToSelectStatement ( ) . PrintDump ( ) ;
335
+ Assert . That ( q . ToSelectStatement ( ) . NormalizeSql ( ) , Is . StringContaining ( "@" ) ) ;
336
+ }
170
337
}
171
338
}
0 commit comments