@@ -658,27 +658,34 @@ public void testCompletionStageOfPage() throws ExecutionException, InterruptedEx
658658 */
659659 @ Test
660660 public void testComputationInOrderArgOfMethodThatReturnsCursoredPage () {
661-
662- // prime bits sumOfbits numeral p/s p-2s
663- // ------ ------ --------- -------- ---- ----
664- // 3 000011 2 iii 1 -1
665- // 5 000101 2 v 2 1
666- // 7 000111 3 vii 2 1
667- // 11 001011 3 XI 3 5
668- // 13 001101 3 XIII 4 7
669- // 23 010111 4 XXIII 5 15
670- // 19 010011 3 XIX 6 13
671- // 31 011111 5 XXXI 6 21
672- // 29 011101 4 XXIX 7 21
673- // 17 010001 2 XVII 8 13
674- // 47 101111 5 XLVII 9 37
675- // 43 101011 4 XLIII 10 35
676- // 37 100101 3 XXXVII 12 31
677- // 41 101001 3 XLI 13 35
678-
679- Order <Prime > order = Order .by (Sort .asc ("numberId / sumOfBits" ),
680- Sort .asc ("numberId - 2 * sumOfBits" ),
681- Sort .asc (ID ));
661+ // SQLServer: java long (id) is stored as bigint on hibernate and number(19) eclipselink
662+ // Oracle: java long (id) is stored as number(19) hibernate and eclipselink
663+ // When these databases perform division on fields number(19) the result includes a fractional component
664+ // Avoid using division operations on long fields
665+
666+ //| prime | bits | sumOfBits | Numeral | p%s | p-2s |
667+ //|-------|--------|-----------|---------|-----|------|
668+ //| 3 | 000011 | 2 | III | 1 | -1 |
669+ //| 5 | 000101 | 2 | V | 1 | 1 |
670+ //| 7 | 000111 | 3 | VII | 1 | 1 |
671+ //| 13 | 001101 | 3 | XIII | 1 | 7 |
672+ //| 17 | 010001 | 2 | XVII | 1 | 13 |
673+ //| 19 | 010011 | 3 | XIX | 1 | 13 |
674+ //| 29 | 011101 | 4 | XXIX | 1 | 21 |
675+ //| 31 | 011111 | 5 | XXXI | 1 | 21 |
676+ //| 37 | 100101 | 3 | XXXVII | 1 | 31 |
677+ //| 11 | 001011 | 3 | XI | 2 | 5 |
678+ //| 41 | 101001 | 3 | XLI | 2 | 35 |
679+ //| 47 | 101111 | 5 | XLVII | 2 | 37 |
680+ //| 23 | 010111 | 4 | XXIII | 3 | 15 |
681+ //| 43 | 101011 | 4 | XLIII | 3 | 35 |
682+
683+ // 3 5 7 13 17 19 29 31 27 11 41 47 23 43
684+ // |________page 1_______| |________page 2___________|
685+ // |________page 3________|
686+ final Order <Prime > order = Order .by (Sort .asc ("MOD(numberId, sumOfBits)" ),
687+ Sort .asc ("numberId - 2 * sumOfBits" ),
688+ Sort .asc (ID ));
682689
683690 PageRequest page1Req = PageRequest .ofSize (7 );
684691
@@ -690,14 +697,14 @@ public void testComputationInOrderArgOfMethodThatReturnsCursoredPage() {
690697
691698 assertEquals (2 , page1 .totalPages ());
692699
693- assertEquals (List .of (3L , 5L , 7L , 11L , 13L , 23L , 19L ),
700+ assertEquals (List .of (3L , 5L , 7L , 13L , 17L , 19L , 29L ),
694701 page1 .stream ()
695702 .map (p -> p .numberId )
696703 .toList ());
697704
698705 Prime last = page1 .content ().get (page1 .numberOfElements () - 1 );
699706
700- Cursor cursorNext = Cursor .forKey (last .numberId / last .sumOfBits ,
707+ Cursor cursorNext = Cursor .forKey (last .numberId % last .sumOfBits ,
701708 last .numberId - 2 * last .sumOfBits ,
702709 last .numberId );
703710
@@ -711,30 +718,30 @@ public void testComputationInOrderArgOfMethodThatReturnsCursoredPage() {
711718
712719 assertEquals (14 , page2 .totalElements ());
713720
714- assertEquals (List .of (31L , 29L , 17L , 47L , 43L , 37L , 41L ),
721+ assertEquals (List .of (31L , 37L , 11L , 41L , 47L , 23L , 43L ),
715722 page2 .stream ()
716723 .map (p -> p .numberId )
717724 .toList ());
718725
719726 assertEquals (false , page2 .hasNext ());
720727
721- Prime prime29 = page2 .content ().get (1 );
722- assertEquals (29L , prime29 .numberId );
723- Cursor cursor29 = Cursor .forKey (prime29 .numberId / prime29 .sumOfBits ,
724- prime29 .numberId - 2 * prime29 .sumOfBits ,
725- prime29 .numberId );
728+ Prime prime37 = page2 .content ().get (1 );
729+ assertEquals (37L , prime37 .numberId );
730+ Cursor cursor37 = Cursor .forKey (prime37 .numberId % prime37 .sumOfBits ,
731+ prime37 .numberId - 2 * prime37 .sumOfBits ,
732+ prime37 .numberId );
726733
727- PageRequest before29Req = PageRequest .ofPage (2 ).size (7 ).beforeCursor (cursor29 );
734+ PageRequest before37Req = PageRequest .ofPage (2 ).size (7 ).beforeCursor (cursor37 );
728735
729736 Page <Prime > page = primes //
730737 .findByNumberIdBetweenAndEvenFalse (1 ,
731738 50 ,
732- before29Req ,
739+ before37Req ,
733740 order );
734741
735742 assertEquals (14 , page .totalElements ());
736743
737- assertEquals (List .of (5L , 7L , 11L , 13L , 23L , 19L , 31L ),
744+ assertEquals (List .of (5L , 7L , 13L , 17L , 19L , 29L , 31L ),
738745 page .stream ()
739746 .map (p -> p .numberId )
740747 .toList ());
0 commit comments