Skip to content

Commit bc42090

Browse files
authored
Merge pull request #34024 from KyleAure/bb308456-data-array-ordering
2 parents 3da0bf7 + 2c2ba9e commit bc42090

File tree

1 file changed

+39
-32
lines changed
  • dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web

1 file changed

+39
-32
lines changed

dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)