Repository: calcite Updated Branches: refs/heads/master b78dd4a7e -> b9da74ee3
[CALCITE-2591] EnumerableDefaults#mergeJoin should throw error and not return incorrect results when inputs are not ordered (Enrico Olivelli) fixes #859 Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/b9da74ee Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/b9da74ee Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/b9da74ee Branch: refs/heads/master Commit: b9da74ee3baed9ef6bd16472cf4a34515e3e29ab Parents: b78dd4a Author: Enrico Olivelli <[email protected]> Authored: Sun Sep 23 15:19:05 2018 +0200 Committer: Vladimir Sitnikov <[email protected]> Committed: Tue Sep 25 00:01:25 2018 +0300 ---------------------------------------------------------------------- .../calcite/linq4j/EnumerableDefaults.java | 22 ++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/b9da74ee/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java ---------------------------------------------------------------------- diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java b/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java index cb868ca..0f61f58 100644 --- a/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java +++ b/linq4j/src/main/java/org/apache/calcite/linq4j/EnumerableDefaults.java @@ -1368,8 +1368,14 @@ public abstract class EnumerableDefaults { final Function2<TSource, TInner, TResult> resultSelector, boolean generateNullsOnLeft, boolean generateNullsOnRight) { - assert !generateNullsOnLeft : "not implemented"; - assert !generateNullsOnRight : "not implemented"; + if (generateNullsOnLeft) { + throw new UnsupportedOperationException( + "not implemented, mergeJoin with generateNullsOnLeft"); + } + if (generateNullsOnRight) { + throw new UnsupportedOperationException( + "not implemented, mergeJoin with generateNullsOnRight"); + } return new AbstractEnumerable<TResult>() { public Enumerator<TResult> enumerator() { return new MergeJoinEnumerator<>(outer.enumerator(), @@ -3254,7 +3260,11 @@ public abstract class EnumerableDefaults { TKey leftKey2 = outerKeySelector.apply(left); int c = leftKey.compareTo(leftKey2); if (c != 0) { - assert c < 0 : "not sorted"; + if (c > 0) { + throw new IllegalStateException( + "mergeJoin assumes inputs sorted in ascending order, " + + "however " + leftKey + " is greater than " + leftKey2); + } break; } lefts.add(left); @@ -3270,7 +3280,11 @@ public abstract class EnumerableDefaults { TKey rightKey2 = innerKeySelector.apply(right); int c = rightKey.compareTo(rightKey2); if (c != 0) { - assert c < 0 : "not sorted"; + if (c > 0) { + throw new IllegalStateException( + "mergeJoin assumes input sorted in ascending order, " + + "however " + rightKey + " is greater than " + rightKey2); + } break; } rights.add(right);
