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);

Reply via email to