@@ -340,6 +340,66 @@ public void testScrollingJoinFetchesReverse(SessionFactoryScope scope) {
340
340
);
341
341
}
342
342
343
+ @ Test
344
+ @ RequiresDialectFeature (feature = DialectFeatureChecks .SupportsTemporaryTable .class )
345
+ @ SkipForDialect (dialectClass = HANADialect .class , matchSubTypes = true , reason = "HANA only supports forward-only cursors." )
346
+ public void testScrollingJoinFetchesWithNext (SessionFactoryScope scope ) {
347
+ TestData data = new TestData ();
348
+ data .prepare ( scope );
349
+
350
+ scope .inTransaction (
351
+ session -> {
352
+ try (ScrollableResults results = session
353
+ .createQuery ("from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
354
+ .setParameter ( "desc" , "root%" )
355
+ .scroll ()) {
356
+
357
+ assertTrue ( results .next () );
358
+ Animal animal = (Animal ) results .get ();
359
+ assertEquals ( data .root1Id , animal .getId (), "next() did not return expected row" );
360
+ assertEquals ( 1 , results .getRowNumber () );
361
+
362
+ assertTrue ( results .next () );
363
+ animal = (Animal ) results .get ();
364
+ assertEquals ( data .root2Id , animal .getId (), "next() did not return expected row" );
365
+ assertEquals ( 2 , results .getRowNumber () );
366
+
367
+ assertFalse ( results .next () );
368
+ }
369
+ }
370
+ );
371
+ }
372
+
373
+ @ Test
374
+ @ RequiresDialectFeature (feature = DialectFeatureChecks .SupportsTemporaryTable .class )
375
+ @ SkipForDialect (dialectClass = HANADialect .class , matchSubTypes = true , reason = "HANA only supports forward-only cursors." )
376
+ public void testScrollingNoJoinFetchesWithNext (SessionFactoryScope scope ) {
377
+ TestData data = new TestData ();
378
+ data .prepare ( scope );
379
+
380
+ scope .inTransaction (
381
+ session -> {
382
+ try (ScrollableResults results = session
383
+ .createQuery ("from Animal a where a.description like :desc order by a.id" )
384
+ .setParameter ( "desc" , "root%" )
385
+ .scroll ()) {
386
+
387
+ assertTrue ( results .next () );
388
+ Animal animal = (Animal ) results .get ();
389
+ assertEquals ( data .root1Id , animal .getId (), "next() did not return expected row" );
390
+ assertEquals ( 1 , results .getRowNumber () );
391
+
392
+ assertTrue ( results .next () );
393
+ animal = (Animal ) results .get ();
394
+ assertEquals ( data .root2Id , animal .getId (), "next() did not return expected row" );
395
+ assertEquals ( 2 , results .getRowNumber () );
396
+
397
+ assertFalse ( results .next () );
398
+ }
399
+ }
400
+ );
401
+ }
402
+
343
403
@ Test
344
404
@ RequiresDialectFeature (feature = DialectFeatureChecks .SupportsTemporaryTable .class )
345
405
@ SkipForDialect (dialectClass = HANADialect .class , matchSubTypes = true , reason = "HANA only supports forward-only cursors." )
@@ -350,30 +410,127 @@ public void testScrollingJoinFetchesPositioning(SessionFactoryScope scope) {
350
410
scope .inTransaction (
351
411
session -> {
352
412
try (ScrollableResults results = session
353
- .createQuery (
354
- "from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
413
+ .createQuery ("from Animal a left join fetch a.offspring where a.description like :desc order by a.id" )
414
+ .setParameter ( "desc" , "root%" )
415
+ .scroll ()) {
416
+
417
+ results .first ();
418
+ Animal animal = (Animal ) results .get ();
419
+ assertEquals ( data .root1Id , animal .getId (), "first() did not return expected row" );
420
+ assertEquals ( 1 , results .getRowNumber () );
421
+
422
+ results .scroll ( 1 );
423
+ animal = (Animal ) results .get ();
424
+ assertEquals ( data .root2Id , animal .getId (), "scroll(1) did not return expected row" );
425
+ assertEquals ( 2 , results .getRowNumber () );
426
+
427
+ results .scroll ( -1 );
428
+ animal = (Animal ) results .get ();
429
+ assertEquals ( data .root1Id , animal .getId (), "scroll(-1) did not return expected row" );
430
+ assertEquals ( 1 , results .getRowNumber () );
431
+
432
+ results .next ();
433
+ animal = (Animal ) results .get ();
434
+ assertEquals ( data .root2Id , animal .getId (), "next() did not return expected row" );
435
+ assertEquals ( 2 , results .getRowNumber () );
436
+
437
+ results .setRowNumber ( 1 );
438
+ animal = (Animal ) results .get ();
439
+ assertEquals ( data .root1Id , animal .getId (), "setRowNumber(1) did not return expected row" );
440
+ assertEquals ( 1 , results .getRowNumber () );
441
+
442
+ results .setRowNumber ( 2 );
443
+ animal = (Animal ) results .get ();
444
+ assertEquals ( data .root2Id , animal .getId (), "setRowNumber(2) did not return expected row" );
445
+ assertEquals ( 2 , results .getRowNumber () );
446
+
447
+ results .setRowNumber ( -2 );
448
+ animal = (Animal ) results .get ();
449
+ assertEquals ( data .root1Id , animal .getId (), "setRowNumber(-2) did not return expected row" );
450
+ assertEquals ( 1 , results .getRowNumber () );
451
+
452
+ results .setRowNumber ( -1 );
453
+ animal = (Animal ) results .get ();
454
+ assertEquals ( data .root2Id , animal .getId (), "setRowNumber(-1) did not return expected row" );
455
+ assertEquals ( 2 , results .getRowNumber () );
456
+
457
+ results .position ( 1 );
458
+ animal = (Animal ) results .get ();
459
+ assertEquals ( data .root1Id , animal .getId (), "position(1) did not return expected row" );
460
+ assertEquals ( 1 , results .getRowNumber () );
461
+
462
+ results .position ( 2 );
463
+ animal = (Animal ) results .get ();
464
+ assertEquals ( data .root2Id , animal .getId (), "position(2) did not return expected row" );
465
+ assertEquals ( 2 , results .getRowNumber () );
466
+ }
467
+ }
468
+ );
469
+ }
470
+
471
+ @ Test
472
+ @ RequiresDialectFeature (feature = DialectFeatureChecks .SupportsTemporaryTable .class )
473
+ @ SkipForDialect (dialectClass = HANADialect .class , matchSubTypes = true , reason = "HANA only supports forward-only cursors." )
474
+ public void testScrollingNoJoinFetchesPositioning (SessionFactoryScope scope ) {
475
+ TestData data = new TestData ();
476
+ data .prepare ( scope );
477
+
478
+ scope .inTransaction (
479
+ session -> {
480
+ try (ScrollableResults results = session
481
+ .createQuery ("from Animal a where a.description like :desc order by a.id" )
355
482
.setParameter ( "desc" , "root%" )
356
483
.scroll ()) {
357
484
358
485
results .first ();
359
486
Animal animal = (Animal ) results .get ();
360
487
assertEquals ( data .root1Id , animal .getId (), "first() did not return expected row" );
488
+ assertEquals ( 1 , results .getRowNumber () );
361
489
362
490
results .scroll ( 1 );
363
491
animal = (Animal ) results .get ();
364
492
assertEquals ( data .root2Id , animal .getId (), "scroll(1) did not return expected row" );
493
+ assertEquals ( 2 , results .getRowNumber () );
365
494
366
495
results .scroll ( -1 );
367
496
animal = (Animal ) results .get ();
368
497
assertEquals ( data .root1Id , animal .getId (), "scroll(-1) did not return expected row" );
498
+ assertEquals ( 1 , results .getRowNumber () );
499
+
500
+ results .next ();
501
+ animal = (Animal ) results .get ();
502
+ assertEquals ( data .root2Id , animal .getId (), "next() did not return expected row" );
503
+ assertEquals ( 2 , results .getRowNumber () );
369
504
370
505
results .setRowNumber ( 1 );
371
506
animal = (Animal ) results .get ();
372
507
assertEquals ( data .root1Id , animal .getId (), "setRowNumber(1) did not return expected row" );
508
+ assertEquals ( 1 , results .getRowNumber () );
373
509
374
510
results .setRowNumber ( 2 );
375
511
animal = (Animal ) results .get ();
376
512
assertEquals ( data .root2Id , animal .getId (), "setRowNumber(2) did not return expected row" );
513
+ assertEquals ( 2 , results .getRowNumber () );
514
+
515
+ results .setRowNumber ( -2 );
516
+ animal = (Animal ) results .get ();
517
+ assertEquals ( data .root1Id , animal .getId (), "setRowNumber(-2) did not return expected row" );
518
+ assertEquals ( 1 , results .getRowNumber () );
519
+
520
+ results .setRowNumber ( -1 );
521
+ animal = (Animal ) results .get ();
522
+ assertEquals ( data .root2Id , animal .getId (), "setRowNumber(-1) did not return expected row" );
523
+ assertEquals ( 2 , results .getRowNumber () );
524
+
525
+ results .position ( 1 );
526
+ animal = (Animal ) results .get ();
527
+ assertEquals ( data .root1Id , animal .getId (), "position(1) did not return expected row" );
528
+ assertEquals ( 1 , results .getRowNumber () );
529
+
530
+ results .position ( 2 );
531
+ animal = (Animal ) results .get ();
532
+ assertEquals ( data .root2Id , animal .getId (), "position(2) did not return expected row" );
533
+ assertEquals ( 2 , results .getRowNumber () );
377
534
}
378
535
}
379
536
);
0 commit comments