You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/12/12 06:53:13 UTC
[groovy] branch master updated: Tweak processing `null` in GINQ
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new d421c5d Tweak processing `null` in GINQ
d421c5d is described below
commit d421c5d14eb379fa58289ce784b333c635b65137
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Dec 12 14:52:05 2020 +0800
Tweak processing `null` in GINQ
`null = null` is `false` in SQL, but `null == null` is `true` in Groovy.
---
.../collection/runtime/QueryableCollection.java | 12 ++--
.../test/org/apache/groovy/ginq/GinqTest.groovy | 16 ++---
.../runtime/QueryableCollectionTest.groovy | 76 +++++++++++++++++++---
3 files changed, 79 insertions(+), 25 deletions(-)
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
index a73c276..2453666 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
@@ -359,11 +359,10 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
}
List<Tuple2<T, U>> joinResultList =
- null == p ? Collections.emptyList()
- : queryable2.stream()
- .filter(c -> joiner.test(p, c))
- .map(c -> tuple((T) p, (U) c))
- .collect(Collectors.toList());
+ queryable2.stream()
+ .filter(c -> joiner.test(p, c))
+ .map(c -> tuple((T) p, (U) c))
+ .collect(Collectors.toList());
return joinResultList.isEmpty() ? Stream.of(tuple(p, null)) : joinResultList.stream();
});
@@ -381,8 +380,7 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
// probe the hash table
List<Tuple2<T, U>> joinResultList =
- null == p ? Collections.emptyList()
- : probeHashTable(hashTable, (T) p, fieldsExtractor1, fieldsExtractor2).collect(Collectors.toList());
+ probeHashTable(hashTable, (T) p, fieldsExtractor1, fieldsExtractor2).collect(Collectors.toList());
return joinResultList.isEmpty() ? Stream.of(tuple(p, null)) : joinResultList.stream();
});
diff --git a/subprojects/groovy-ginq/src/spec/test/org/apache/groovy/ginq/GinqTest.groovy b/subprojects/groovy-ginq/src/spec/test/org/apache/groovy/ginq/GinqTest.groovy
index 14b19bb..69aabdf 100644
--- a/subprojects/groovy-ginq/src/spec/test/org/apache/groovy/ginq/GinqTest.groovy
+++ b/subprojects/groovy-ginq/src/spec/test/org/apache/groovy/ginq/GinqTest.groovy
@@ -1155,7 +1155,7 @@ class GinqTest {
assertGinqScript '''
def nums1 = [1, 2, 3, null, null]
def nums2 = [2, 3, 4, null, null]
- assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == GQ {
from n1 in nums1
leftjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1168,7 +1168,7 @@ class GinqTest {
assertGinqScript '''
def nums1 = [1, 2, 3, null]
def nums2 = [2, 3, 4, null, null]
- assert [[1, null], [2, 2], [3, 3], [null, null]] == GQ {
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
from n1 in nums1
leftjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1326,7 +1326,7 @@ class GinqTest {
assertGinqScript '''
def nums2 = [1, 2, 3, null, null]
def nums1 = [2, 3, 4, null, null]
- assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == GQ {
from n1 in nums1
rightjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1339,7 +1339,7 @@ class GinqTest {
assertGinqScript '''
def nums2 = [1, 2, 3, null]
def nums1 = [2, 3, 4, null, null]
- assert [[null, 1], [2, 2], [3, 3], [null, null]] == GQ {
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
from n1 in nums1
rightjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1484,7 +1484,7 @@ class GinqTest {
assertGinqScript '''
def nums1 = [1, 2, 3, null, null]
def nums2 = [2, 3, 4, null, null]
- assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == GQ {
from n1 in nums1
lefthashjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1497,7 +1497,7 @@ class GinqTest {
assertGinqScript '''
def nums1 = [1, 2, 3, null]
def nums2 = [2, 3, 4, null, null]
- assert [[1, null], [2, 2], [3, 3], [null, null]] == GQ {
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
from n1 in nums1
lefthashjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1655,7 +1655,7 @@ class GinqTest {
assertGinqScript '''
def nums2 = [1, 2, 3, null, null]
def nums1 = [2, 3, 4, null, null]
- assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == GQ {
from n1 in nums1
righthashjoin n2 in nums2 on n1 == n2
select n1, n2
@@ -1668,7 +1668,7 @@ class GinqTest {
assertGinqScript '''
def nums2 = [1, 2, 3, null]
def nums1 = [2, 3, 4, null, null]
- assert [[null, 1], [2, 2], [3, 3], [null, null]] == GQ {
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == GQ {
from n1 in nums1
righthashjoin n2 in nums2 on n1 == n2
select n1, n2
diff --git a/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollectionTest.groovy b/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollectionTest.groovy
index 378fd97..1613556 100644
--- a/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollectionTest.groovy
+++ b/subprojects/groovy-ginq/src/test/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollectionTest.groovy
@@ -64,6 +64,46 @@ class QueryableCollectionTest {
}
@Test
+ void testInnerJoin3() {
+ def nums1 = [1, 2, 3, null].stream()
+ def nums2 = [2, 3, 4].stream()
+ def result = from(nums1).innerJoin(from(nums2), (a, b) -> a == b).toList()
+ assert [[2, 2], [3, 3]] == result
+ }
+
+ @Test
+ void testInnerJoin4() {
+ def nums1 = [1, 2, 3].stream()
+ def nums2 = [2, 3, 4, null].stream()
+ def result = from(nums1).innerJoin(from(nums2), (a, b) -> a == b).toList()
+ assert [[2, 2], [3, 3]] == result
+ }
+
+ @Test
+ void testInnerJoin5() {
+ def nums1 = [1, 2, 3, null].stream()
+ def nums2 = [2, 3, 4, null].stream()
+ def result = from(nums1).innerJoin(from(nums2), (a, b) -> a == b).toList()
+ assert [[2, 2], [3, 3], [null, null]] == result
+ }
+
+ @Test
+ void testInnerJoin6() {
+ def nums1 = [1, 2, 3, null].stream()
+ def nums2 = [2, 3, 4, null, null].stream()
+ def result = from(nums1).innerJoin(from(nums2), (a, b) -> a == b).toList()
+ assert [[2, 2], [3, 3], [null, null], [null, null]] == result
+ }
+
+ @Test
+ void testInnerJoin7() {
+ def nums1 = [1, 2, 3, null, null].stream()
+ def nums2 = [2, 3, 4, null, null].stream()
+ def result = from(nums1).innerJoin(from(nums2), (a, b) -> a == b).toList()
+ assert [[2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == result
+ }
+
+ @Test
void testInnerHashJoin0() {
def nums1 = [1, 2, 3]
def nums2 = [1, 2, 3]
@@ -112,6 +152,22 @@ class QueryableCollectionTest {
}
@Test
+ void testInnerHashJoin6() {
+ def nums1 = [1, 2, 3, null]
+ def nums2 = [2, 3, 4, null, null]
+ def result = from(nums1).innerHashJoin(from(nums2), a -> a, b -> b).toList()
+ assert [[2, 2], [3, 3], [null, null], [null, null]] == result
+ }
+
+ @Test
+ void testInnerHashJoin7() {
+ def nums1 = [1, 2, 3, null, null]
+ def nums2 = [2, 3, 4, null, null]
+ def result = from(nums1).innerHashJoin(from(nums2), a -> a, b -> b).toList()
+ assert [[2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == result
+ }
+
+ @Test
void testLeftJoin0() {
def nums1 = [1, 2, 3]
def nums2 = [1, 2, 3]
@@ -228,7 +284,7 @@ class QueryableCollectionTest {
def nums1 = [1, 2, 3, null, null]
def nums2 = [2, 3, 4, null, null]
def result = from(nums1).leftJoin(from(nums2), (a, b) -> a == b).toList()
- assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == result
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == result
}
@Test
@@ -236,7 +292,7 @@ class QueryableCollectionTest {
def nums2 = [1, 2, 3, null, null]
def nums1 = [2, 3, 4, null, null]
def result = from(nums1).rightJoin(from(nums2), (a, b) -> a == b).toList()
- assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == result
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == result
}
@Test
@@ -244,7 +300,7 @@ class QueryableCollectionTest {
def nums1 = [1, 2, 3, null]
def nums2 = [2, 3, 4, null, null]
def result = from(nums1).leftJoin(from(nums2), (a, b) -> a == b).toList()
- assert [[1, null], [2, 2], [3, 3], [null, null]] == result
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == result
}
@Test
@@ -252,7 +308,7 @@ class QueryableCollectionTest {
def nums2 = [1, 2, 3, null]
def nums1 = [2, 3, 4, null, null]
def result = from(nums1).rightJoin(from(nums2), (a, b) -> a == b).toList()
- assert [[null, 1], [2, 2], [3, 3], [null, null]] == result
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == result
}
@Test
@@ -405,7 +461,7 @@ class QueryableCollectionTest {
def nums1 = [1, 2, 3, null, null]
def nums2 = [2, 3, 4, null, null]
def result = from(nums1).leftHashJoin(from(nums2), a -> a, b -> b).toList()
- assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == result
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == result
}
@Test
@@ -413,7 +469,7 @@ class QueryableCollectionTest {
def nums2 = [1, 2, 3, null, null]
def nums1 = [2, 3, 4, null, null]
def result = from(nums1).rightHashJoin(from(nums2), a -> a, b -> b).toList()
- assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == result
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null], [null, null], [null, null]] == result
}
@Test
@@ -421,7 +477,7 @@ class QueryableCollectionTest {
def nums1 = [1, 2, 3, null]
def nums2 = [2, 3, 4, null, null]
def result = from(nums1).leftHashJoin(from(nums2), a -> a, b -> b).toList()
- assert [[1, null], [2, 2], [3, 3], [null, null]] == result
+ assert [[1, null], [2, 2], [3, 3], [null, null], [null, null]] == result
}
@Test
@@ -429,7 +485,7 @@ class QueryableCollectionTest {
def nums2 = [1, 2, 3, null]
def nums1 = [2, 3, 4, null, null]
def result = from(nums1).rightHashJoin(from(nums2), a -> a, b -> b).toList()
- assert [[null, 1], [2, 2], [3, 3], [null, null]] == result
+ assert [[null, 1], [2, 2], [3, 3], [null, null], [null, null]] == result
}
@Test
@@ -469,7 +525,7 @@ class QueryableCollectionTest {
def nums1 = [1, 2, null, 3]
def nums2 = [2, null, 3, null, 4]
def result = from(nums1).leftHashJoin(from(nums2), a -> a, b -> b).toList()
- assert [[1, null], [2, 2], [null, null], [3, 3]] == result
+ assert [[1, null], [2, 2], [null, null], [null, null], [3, 3]] == result
}
@Test
@@ -477,7 +533,7 @@ class QueryableCollectionTest {
def nums2 = [1, 2, null, 3]
def nums1 = [2, null, 3, null, 4]
def result = from(nums1).rightHashJoin(from(nums2), a -> a, b -> b).toList()
- assert [[null, 1], [2, 2], [null, null], [3, 3]] == result
+ assert [[null, 1], [2, 2], [null, null], [null, null], [3, 3]] == result
}
@Test