liuyongvs commented on code in PR #3263:
URL: https://github.com/apache/calcite/pull/3263#discussion_r1229375318


##########
testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java:
##########
@@ -5594,6 +5619,86 @@ private static void checkIf(SqlOperatorFixture f) {
     f.checkNull("array_union(cast(null as integer array), cast(null as integer 
array))");
   }
 
+  /** Tests {@code ARRAYS_OVERLAP} function from Spark. */
+  @Test void testArraysOverlapFunc() {
+    final SqlOperatorFixture f0 = fixture();
+    f0.setFor(SqlLibraryOperators.ARRAYS_OVERLAP);
+    f0.checkFails("^arrays_overlap(array[1, 2], array[2])^",
+        "No match found for function signature ARRAYS_OVERLAP\\("
+            + "<INTEGER ARRAY>, <INTEGER ARRAY>\\)", false);
+
+    final SqlOperatorFixture f = f0.withLibrary(SqlLibrary.SPARK);
+    f.checkScalar("arrays_overlap(array[1, 2], array[2])", true,
+        "BOOLEAN NOT NULL");
+    f.checkScalar("arrays_overlap(array[1, 2], array[3])", false,
+        "BOOLEAN NOT NULL");
+    f.checkScalar("arrays_overlap(array[1, null], array[1])", true,
+        "BOOLEAN");
+    f.checkScalar("arrays_overlap(array(), array(2))", false,
+        "BOOLEAN NOT NULL");
+    f.checkScalar("arrays_overlap(array[array[1, 2], array[3, 4]], 
array[array[1, 2]])", true,
+        "BOOLEAN NOT NULL");
+    f.checkScalar("arrays_overlap(array[map[1, 'a'], map[2, 'b']], 
array[map[1, 'a']])", true,
+        "BOOLEAN NOT NULL");
+    f.checkNull("arrays_overlap(cast(null as integer array), array[1, 2])");
+    f.checkType("arrays_overlap(cast(null as integer array), array[1, 2])", 
"BOOLEAN");
+    f.checkNull("arrays_overlap(array[1, 2], cast(null as integer array))");
+    f.checkType("arrays_overlap(array[1, 2], cast(null as integer array))", 
"BOOLEAN");
+    f.checkNull("arrays_overlap(array[1], array[2, null])");
+    f.checkType("arrays_overlap(array[2, null], array[1])", "BOOLEAN");
+    f.checkFails("^arrays_overlap(array[1, 2], true)^",
+        "Cannot apply 'ARRAYS_OVERLAP' to arguments of type 'ARRAYS_OVERLAP\\("
+            + "<INTEGER ARRAY>, <BOOLEAN>\\)'. Supported form\\(s\\): 
'ARRAYS_OVERLAP\\("
+            + "<EQUIVALENT_TYPE>, <EQUIVALENT_TYPE>\\)'", false);
+  }
+
+  /** Tests {@code ARRAYS_ZIP} function from Spark. */
+  @Test void testArraysZipFunc() {
+    final SqlOperatorFixture f0 = fixture();
+    f0.setFor(SqlLibraryOperators.ARRAYS_ZIP);
+    f0.checkFails("^arrays_zip(array[1, 2], array[2])^",
+        "No match found for function signature ARRAYS_ZIP\\("
+            + "<INTEGER ARRAY>, <INTEGER ARRAY>\\)", false);
+
+    final SqlOperatorFixture f = f0.withLibrary(SqlLibrary.SPARK);
+    f.checkScalar("arrays_zip(array[1, 2], array[2, 3], array[3, 4])", "[{1, 
2, 3}, {2, 3, 4}]",
+        "RecordType(INTEGER NOT NULL 0, INTEGER NOT NULL 1, INTEGER NOT NULL 
2) "
+            + "NOT NULL ARRAY NOT NULL");
+    f.checkScalar("arrays_zip(array[1, 2], array[2])", "[{1, 2}, {2, null}]",
+        "RecordType(INTEGER NOT NULL 0, INTEGER NOT NULL 1) NOT NULL ARRAY NOT 
NULL");

Review Comment:
   comments: why the result is different . 
   ```
   -- spark
   spark-sql> select arrays_zip(array(1, 2), array(2));
   [{"0":1,"1":2},{"0":2,"1":null}]
   
   -- calcite
   f.checkScalar("arrays_zip(array[1, 2], array[2])", "[{1, 2}, {2, null}]",
   
   ```
   
   the reason is row print string is different with calcite for example, but it 
does impact the logical of this function
   
   ```
   -- spark 
   spark-sql> select struct(1, 2);
   {"col1":1,"col2":2}
   
   -- calcite 
   select row(1, 'a');
   [{1, 2}]
   ```
   
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to