@@ -187,7 +187,20 @@ public void SimpleInsert()
187
187
using ( var s = OpenSession ( ) )
188
188
using ( var t = s . BeginTransaction ( ) )
189
189
{
190
- var count = s . Query < Car > ( ) . Insert ( ) . As ( x => new Pickup { Id = x . Id , Vin = x . Vin , Owner = x . Owner } ) ;
190
+ var count = s . Query < Car > ( ) . Insert ( ) . As ( x => new Pickup { Id = - x . Id , Vin = x . Vin , Owner = x . Owner } ) ;
191
+ Assert . AreEqual ( 1 , count ) ;
192
+
193
+ t . Commit ( ) ;
194
+ }
195
+ }
196
+
197
+ [ Test ]
198
+ public void SimpleAnonymousInsert ( )
199
+ {
200
+ using ( var s = OpenSession ( ) )
201
+ using ( var t = s . BeginTransaction ( ) )
202
+ {
203
+ var count = s . Query < Car > ( ) . Insert ( ) . As < Pickup > ( x => new { Id = - x . Id , x . Vin , x . Owner } ) ;
191
204
Assert . AreEqual ( 1 , count ) ;
192
205
193
206
t . Commit ( ) ;
@@ -200,10 +213,11 @@ public void SimpleInsertFromAggregate()
200
213
using ( var s = OpenSession ( ) )
201
214
using ( var t = s . BeginTransaction ( ) )
202
215
{
203
- var count = s . Query < Car > ( )
216
+ var count = s
217
+ . Query < Car > ( )
204
218
. GroupBy ( x => x . Id )
205
219
. Select ( x => new { Id = x . Key , Vin = x . Max ( y => y . Vin ) , Owner = x . Max ( y => y . Owner ) } )
206
- . Insert ( ) . As ( x => new Pickup { Id = x . Id , Vin = x . Vin , Owner = x . Owner } ) ;
220
+ . Insert ( ) . As ( x => new Pickup { Id = - x . Id , Vin = x . Vin , Owner = x . Owner } ) ;
207
221
Assert . AreEqual ( 1 , count ) ;
208
222
209
223
t . Commit ( ) ;
@@ -216,7 +230,8 @@ public void SimpleInsertFromLimited()
216
230
using ( var s = OpenSession ( ) )
217
231
using ( var t = s . BeginTransaction ( ) )
218
232
{
219
- var count = s . Query < Vehicle > ( )
233
+ var count = s
234
+ . Query < Vehicle > ( )
220
235
. Skip ( 1 )
221
236
. Take ( 1 )
222
237
. Insert ( ) . As ( x => new Pickup { Id = - x . Id , Vin = x . Vin , Owner = x . Owner } ) ;
@@ -232,8 +247,9 @@ public void SimpleInsertWithConstants()
232
247
using ( var s = OpenSession ( ) )
233
248
using ( var t = s . BeginTransaction ( ) )
234
249
{
235
- var count = s . Query < Car > ( )
236
- . Insert ( ) . Into < Pickup > ( x => x . Set ( y => y . Id , y => y . Id ) . Set ( y => y . Vin , y => y . Vin ) . Set ( y => y . Owner , "The owner" ) ) ;
250
+ var count = s
251
+ . Query < Car > ( )
252
+ . Insert ( ) . Into < Pickup > ( x => x . Set ( y => y . Id , y => - y . Id ) . Set ( y => y . Vin , y => y . Vin ) . Set ( y => y . Owner , "The owner" ) ) ;
237
253
Assert . AreEqual ( 1 , count ) ;
238
254
239
255
t . Commit ( ) ;
@@ -246,9 +262,10 @@ public void SimpleInsertFromProjection()
246
262
using ( var s = OpenSession ( ) )
247
263
using ( var t = s . BeginTransaction ( ) )
248
264
{
249
- var count = s . Query < Car > ( )
265
+ var count = s
266
+ . Query < Car > ( )
250
267
. Select ( x => new { x . Id , x . Owner , UpperOwner = x . Owner . ToUpper ( ) } )
251
- . Insert ( ) . Into < Pickup > ( x => x . Set ( y => y . Id , y => y . Id ) . Set ( y => y . Vin , y => y . UpperOwner ) ) ;
268
+ . Insert ( ) . Into < Pickup > ( x => x . Set ( y => y . Id , y => - y . Id ) . Set ( y => y . Vin , y => y . UpperOwner ) ) ;
252
269
Assert . AreEqual ( 1 , count ) ;
253
270
254
271
t . Commit ( ) ;
@@ -261,9 +278,10 @@ public void InsertWithClientSideRequirementsThrowsException()
261
278
using ( var s = OpenSession ( ) )
262
279
using ( var t = s . BeginTransaction ( ) )
263
280
{
264
- Assert . Throws < NotSupportedException > ( ( ) =>
265
- s . Query < Car > ( )
266
- . Insert ( ) . As ( x => new Pickup { Id = x . Id , Vin = x . Vin , Owner = x . Owner . PadRight ( 200 ) } ) ) ;
281
+ Assert . Throws < NotSupportedException > (
282
+ ( ) => s
283
+ . Query < Car > ( )
284
+ . Insert ( ) . As ( x => new Pickup { Id = - x . Id , Vin = x . Vin , Owner = x . Owner . PadRight ( 200 ) } ) ) ;
267
285
268
286
t . Commit ( ) ;
269
287
}
@@ -277,7 +295,8 @@ public void InsertWithManyToOne()
277
295
using ( var s = OpenSession ( ) )
278
296
using ( var t = s . BeginTransaction ( ) )
279
297
{
280
- var count = s . Query < Human > ( )
298
+ var count = s
299
+ . Query < Human > ( )
281
300
. Insert ( ) . As ( x => new Animal { Description = x . Description , BodyWeight = x . BodyWeight , Mother = x . Mother } ) ;
282
301
Assert . AreEqual ( 3 , count ) ;
283
302
@@ -293,7 +312,8 @@ public void InsertWithManyToOneAsParameter()
293
312
using ( var s = OpenSession ( ) )
294
313
using ( var t = s . BeginTransaction ( ) )
295
314
{
296
- var count = s . Query < Human > ( )
315
+ var count = s
316
+ . Query < Human > ( )
297
317
. Insert ( ) . As ( x => new Animal { Description = x . Description , BodyWeight = x . BodyWeight , Mother = _butterfly } ) ;
298
318
Assert . AreEqual ( 3 , count ) ;
299
319
@@ -309,7 +329,8 @@ public void InsertWithManyToOneWithCompositeKey()
309
329
using ( var s = OpenSession ( ) )
310
330
using ( var t = s . BeginTransaction ( ) )
311
331
{
312
- var count = s . Query < EntityWithCrazyCompositeKey > ( )
332
+ var count = s
333
+ . Query < EntityWithCrazyCompositeKey > ( )
313
334
. Insert ( ) . As ( x => new EntityReferencingEntityWithCrazyCompositeKey { Name = "Child" , Parent = x } ) ;
314
335
Assert . AreEqual ( 1 , count ) ;
315
336
@@ -324,7 +345,7 @@ public void InsertIntoSuperclassPropertiesFails()
324
345
using ( var t = s . BeginTransaction ( ) )
325
346
{
326
347
Assert . Throws < QueryException > (
327
- ( ) => s . Query < Lizard > ( ) . Insert ( ) . As ( x => new Human { Id = x . Id , BodyWeight = x . BodyWeight } ) ,
348
+ ( ) => s . Query < Lizard > ( ) . Insert ( ) . As ( x => new Human { Id = - x . Id , BodyWeight = x . BodyWeight } ) ,
328
349
"superclass prop insertion did not error" ) ;
329
350
330
351
t . Commit ( ) ;
@@ -381,10 +402,10 @@ public void InsertWithGeneratedVersionAndId()
381
402
using ( var s = OpenSession ( ) )
382
403
using ( var t = s . BeginTransaction ( ) )
383
404
{
384
- var count =
385
- s . Query < IntegerVersioned > ( )
386
- . Where ( x => x . Id == initialId )
387
- . Insert ( ) . As ( x => new IntegerVersioned { Name = x . Name , Data = x . Data } ) ;
405
+ var count = s
406
+ . Query < IntegerVersioned > ( )
407
+ . Where ( x => x . Id == initialId )
408
+ . Insert ( ) . As ( x => new IntegerVersioned { Name = x . Name , Data = x . Data } ) ;
388
409
Assert . That ( count , Is . EqualTo ( 1 ) , "unexpected insertion count" ) ;
389
410
t . Commit ( ) ;
390
411
}
@@ -408,10 +429,10 @@ public void InsertWithGeneratedTimestampVersion()
408
429
using ( var s = OpenSession ( ) )
409
430
using ( var t = s . BeginTransaction ( ) )
410
431
{
411
- var count =
412
- s . Query < TimestampVersioned > ( )
413
- . Where ( x => x . Id == initialId )
414
- . Insert ( ) . As ( x => new TimestampVersioned { Name = x . Name , Data = x . Data } ) ;
432
+ var count = s
433
+ . Query < TimestampVersioned > ( )
434
+ . Where ( x => x . Id == initialId )
435
+ . Insert ( ) . As ( x => new TimestampVersioned { Name = x . Name , Data = x . Data } ) ;
415
436
Assert . That ( count , Is . EqualTo ( 1 ) , "unexpected insertion count" ) ;
416
437
417
438
t . Commit ( ) ;
@@ -438,7 +459,8 @@ public void InsertWithSelectListUsingJoins()
438
459
439
460
Assert . DoesNotThrow ( ( ) =>
440
461
{
441
- s . Query < Human > ( ) . Where ( x => x . Mother . Mother != null )
462
+ s
463
+ . Query < Human > ( ) . Where ( x => x . Mother . Mother != null )
442
464
. Insert ( ) . As ( x => new Animal { Description = x . Description , BodyWeight = x . BodyWeight } ) ;
443
465
} ) ;
444
466
@@ -462,13 +484,25 @@ public void InsertToComponent()
462
484
// https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-dml-insert.html#fblangref25-dml-insert-select-unstable
463
485
. Where ( sc => sc . Name . First != correctName )
464
486
. Insert ( ) . Into < SimpleClassWithComponent > ( x => x . Set ( y => y . Name . First , y => correctName ) ) ;
465
- Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect insert count" ) ;
487
+ Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect insert count from individual setters " ) ;
466
488
467
- count =
468
- s . Query < SimpleClassWithComponent > ( )
469
- . Where ( x => x . Name . First == correctName && x . Name . Initial != 'Z' )
470
- . Insert ( ) . As ( x => new SimpleClassWithComponent { Name = new Name { First = x . Name . First , Last = x . Name . Last , Initial = 'Z' } } ) ;
471
- Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect insert from corrected count" ) ;
489
+ count = s
490
+ . Query < SimpleClassWithComponent > ( )
491
+ . Where ( x => x . Name . First == correctName && x . Name . Initial != 'Z' )
492
+ . Insert ( ) . As ( x => new SimpleClassWithComponent { Name = new Name { First = x . Name . First , Last = x . Name . Last , Initial = 'Z' } } ) ;
493
+ Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect insert from non anonymous selector" ) ;
494
+
495
+ count = s
496
+ . Query < SimpleClassWithComponent > ( )
497
+ . Where ( x => x . Name . First == correctName && x . Name . Initial == 'Z' )
498
+ . Insert ( ) . As < SimpleClassWithComponent > ( x => new { Name = new { x . Name . First , x . Name . Last , Initial = 'W' } } ) ;
499
+ Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect insert from anonymous selector" ) ;
500
+
501
+ count = s
502
+ . Query < SimpleClassWithComponent > ( )
503
+ . Where ( x => x . Name . First == correctName && x . Name . Initial == 'Z' )
504
+ . Insert ( ) . As < SimpleClassWithComponent > ( x => new { Name = new Name { First = x . Name . First , Last = x . Name . Last , Initial = 'V' } } ) ;
505
+ Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect insert from hybrid selector" ) ;
472
506
t . Commit ( ) ;
473
507
}
474
508
}
@@ -488,6 +522,34 @@ private void CheckSupportOfBulkInsertionWithGeneratedId<T>()
488
522
489
523
#region UPDATES
490
524
525
+ [ Test ]
526
+ public void SimpleUpdate ( )
527
+ {
528
+ using ( var s = OpenSession ( ) )
529
+ using ( s . BeginTransaction ( ) )
530
+ {
531
+ var count = s
532
+ . Query < Car > ( )
533
+ . Update ( )
534
+ . As ( a => new Car { Owner = a . Owner + " a" } ) ;
535
+ Assert . AreEqual ( 1 , count ) ;
536
+ }
537
+ }
538
+
539
+ [ Test ]
540
+ public void SimpleAnonymousUpdate ( )
541
+ {
542
+ using ( var s = OpenSession ( ) )
543
+ using ( s . BeginTransaction ( ) )
544
+ {
545
+ var count = s
546
+ . Query < Car > ( )
547
+ . Update ( )
548
+ . As ( a => new { Owner = a . Owner + " a" } ) ;
549
+ Assert . AreEqual ( 1 , count ) ;
550
+ }
551
+ }
552
+
491
553
[ Test ]
492
554
public void UpdateWithWhereExistsSubquery ( )
493
555
{
@@ -501,7 +563,8 @@ public void UpdateWithWhereExistsSubquery()
501
563
using ( var s = OpenSession ( ) )
502
564
using ( var t = s . BeginTransaction ( ) )
503
565
{
504
- var count = s . Query < Human > ( )
566
+ var count = s
567
+ . Query < Human > ( )
505
568
. Where ( x => x . Friends . OfType < Human > ( ) . Any ( f => f . Name . Last == "Public" ) )
506
569
. Update ( ) . Assign ( x => x . Set ( y => y . Description , "updated" ) ) ;
507
570
Assert . That ( count , Is . EqualTo ( 1 ) ) ;
@@ -513,14 +576,16 @@ public void UpdateWithWhereExistsSubquery()
513
576
using ( var t = s . BeginTransaction ( ) )
514
577
{
515
578
// one-to-many test
516
- var count = s . Query < SimpleEntityWithAssociation > ( )
579
+ var count = s
580
+ . Query < SimpleEntityWithAssociation > ( )
517
581
. Where ( x => x . AssociatedEntities . Any ( a => a . Name == "one-to-many-association" ) )
518
582
. Update ( ) . Assign ( x => x . Set ( y => y . Name , "updated" ) ) ;
519
583
Assert . That ( count , Is . EqualTo ( 1 ) ) ;
520
584
// many-to-many test
521
585
if ( Dialect . SupportsSubqueryOnMutatingTable )
522
586
{
523
- count = s . Query < SimpleEntityWithAssociation > ( )
587
+ count = s
588
+ . Query < SimpleEntityWithAssociation > ( )
524
589
. Where ( x => x . ManyToManyAssociatedEntities . Any ( a => a . Name == "many-to-many-association" ) )
525
590
. Update ( ) . Assign ( x => x . Set ( y => y . Name , "updated" ) ) ;
526
591
@@ -540,9 +605,9 @@ public void IncrementCounterVersion()
540
605
using ( var t = s . BeginTransaction ( ) )
541
606
{
542
607
// Note: Update more than one column to showcase NH-3624, which involved losing some columns. /2014-07-26
543
- var count =
544
- s . Query < IntegerVersioned > ( )
545
- . UpdateVersioned ( ) . Assign ( x => x . Set ( y => y . Name , y => y . Name + "upd" ) . Set ( y => y . Data , y => y . Data + "upd" ) ) ;
608
+ var count = s
609
+ . Query < IntegerVersioned > ( )
610
+ . UpdateVersioned ( ) . Assign ( x => x . Set ( y => y . Name , y => y . Name + "upd" ) . Set ( y => y . Data , y => y . Data + "upd" ) ) ;
546
611
Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect exec count" ) ;
547
612
t . Commit ( ) ;
548
613
}
@@ -570,7 +635,8 @@ public void IncrementTimestampVersion()
570
635
using ( var t = s . BeginTransaction ( ) )
571
636
{
572
637
// Note: Update more than one column to showcase NH-3624, which involved losing some columns. /2014-07-26
573
- var count = s . Query < TimestampVersioned > ( )
638
+ var count = s
639
+ . Query < TimestampVersioned > ( )
574
640
. UpdateVersioned ( ) . Assign ( x => x . Set ( y => y . Name , y => y . Name + "upd" ) . Set ( y => y . Data , y => y . Data + "upd" ) ) ;
575
641
Assert . That ( count , Is . EqualTo ( 1 ) , "incorrect exec count" ) ;
576
642
t . Commit ( ) ;
@@ -625,8 +691,8 @@ public void UpdateWithClientSideRequirementsThrowsException()
625
691
using ( var s = OpenSession ( ) )
626
692
using ( var t = s . BeginTransaction ( ) )
627
693
{
628
- Assert . Throws < NotSupportedException > ( ( ) =>
629
- s . Query < Human > ( ) . Where ( x => x . Id == _stevee . Id ) . Update ( ) . As ( x => new Human { Name = { First = x . Name . First . PadLeft ( 200 ) } } )
694
+ Assert . Throws < NotSupportedException > (
695
+ ( ) => s . Query < Human > ( ) . Where ( x => x . Id == _stevee . Id ) . Update ( ) . As ( x => new Human { Name = { First = x . Name . First . PadLeft ( 200 ) } } )
630
696
) ;
631
697
632
698
t . Commit ( ) ;
0 commit comments