From ae38672e02c1fdaac65b4758040feeed33f90235 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Sat, 13 Feb 2016 12:30:00 +1300 Subject: [PATCH] #565 - Query plan hash collision on firstRow/maxRows combinations - tests --- .../api/HashQueryPlanBuilderTest.java | 39 +++++++++++++++++++ .../server/querydefn/DefaultOrmQueryTest.java | 24 ++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/test/java/com/avaje/ebeaninternal/api/HashQueryPlanBuilderTest.java diff --git a/src/test/java/com/avaje/ebeaninternal/api/HashQueryPlanBuilderTest.java b/src/test/java/com/avaje/ebeaninternal/api/HashQueryPlanBuilderTest.java new file mode 100644 index 000000000..bcefc1289 --- /dev/null +++ b/src/test/java/com/avaje/ebeaninternal/api/HashQueryPlanBuilderTest.java @@ -0,0 +1,39 @@ +package com.avaje.ebeaninternal.api; + + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class HashQueryPlanBuilderTest { + + int combine(int v0, int v1) { + return new HashQueryPlanBuilder().add(v0).add(v1).build().hashCode(); + } + + @Test + public void test_pair_0_1() { + assertThat(combine(0, 31)).isNotEqualTo(combine(1,0)); + } + + @Test + public void test_pair_0_10_adjust_0() { + assertThat(combine(0, 310)).isNotEqualTo(combine(10,0)); + } + + @Test + public void test_pair_0_10_adjust_10() { + assertThat(combine(0, 320)).isNotEqualTo(combine(10,10)); + } + + @Test + public void test_pair_0_10_adjust_40() { + assertThat(combine(0, 350)).isNotEqualTo(combine(10,40)); + } + + @Test + public void test_pair_0_10_adjust_90() { + assertThat(combine(0, 400)).isNotEqualTo(combine(10,90)); + } + +} \ No newline at end of file diff --git a/src/test/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java b/src/test/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java index 4f666e78e..6539e9b3c 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java +++ b/src/test/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java @@ -37,4 +37,28 @@ public class DefaultOrmQueryTest { assertThat(hash1).isNotEqualTo(hash2); } + + @Test + public void test_AutofetchHash_diffFirstRows() throws Exception { + + SpiQuery query1 = (SpiQuery)Ebean.find(Order.class) + .setFirstRow(0) + .setMaxRows(31); + + HashQueryPlanBuilder b1 = new HashQueryPlanBuilder(); + query1.queryAutoTuneHash(b1); + HashQueryPlan hash1 = b1.build(); + + SpiQuery query2 = (SpiQuery)Ebean.find(Order.class) + .setFirstRow(1) + .setMaxRows(0); + + HashQueryPlanBuilder b2 = new HashQueryPlanBuilder(); + query2.queryAutoTuneHash(b2); + HashQueryPlan hash2 = b2.build(); + + assertThat(hash1).isNotEqualTo(hash2); + + } + } \ No newline at end of file