This is an automated email from the ASF dual-hosted git repository.
saurabhd336 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new b2eb24a9a7 Fix return type for arrayLength (#11498)
b2eb24a9a7 is described below
commit b2eb24a9a721efed3c952750fed16dbe76d1cc21
Author: Saurabh Dubey <[email protected]>
AuthorDate: Mon Sep 4 11:35:56 2023 +0530
Fix return type for arrayLength (#11498)
Co-authored-by: Saurabh Dubey <[email protected]>
---
.../common/function/TransformFunctionType.java | 2 +-
.../tests/MultiStageEngineIntegrationTest.java | 54 ++++++++++++++++++++--
2 files changed, 52 insertions(+), 4 deletions(-)
diff --git
a/pinot-common/src/main/java/org/apache/pinot/common/function/TransformFunctionType.java
b/pinot-common/src/main/java/org/apache/pinot/common/function/TransformFunctionType.java
index a02a8c8277..89ed66daad 100644
---
a/pinot-common/src/main/java/org/apache/pinot/common/function/TransformFunctionType.java
+++
b/pinot-common/src/main/java/org/apache/pinot/common/function/TransformFunctionType.java
@@ -162,7 +162,7 @@ public enum TransformFunctionType {
// array functions
// The only column accepted by "cardinality" function is multi-value array,
thus putting "cardinality" as alias.
// TODO: once we support other types of multiset, we should make CARDINALITY
its own function
- ARRAYLENGTH("arrayLength", "cardinality"),
+ ARRAYLENGTH("arrayLength", ReturnTypes.INTEGER,
OperandTypes.family(SqlTypeFamily.ARRAY), "cardinality"),
ARRAYAVERAGE("arrayAverage", ReturnTypes.DOUBLE,
OperandTypes.family(SqlTypeFamily.ARRAY)),
ARRAYMIN("arrayMin", ReturnTypes.cascade(opBinding ->
positionalComponentReturnType(opBinding, 0),
SqlTypeTransforms.FORCE_NULLABLE),
OperandTypes.family(SqlTypeFamily.ARRAY)),
diff --git
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
index 826240ef36..28ba7be826 100644
---
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
+++
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/MultiStageEngineIntegrationTest.java
@@ -619,13 +619,61 @@ public class MultiStageEngineIntegrationTest extends
BaseClusterIntegrationTestS
@Test
public void testMultiValueColumnGroupByOrderBy()
throws Exception {
- String pinotQuery = "SELECT count(*), arrayToMV(RandomAirports) FROM
mytable "
- + "GROUP BY arrayToMV(RandomAirports) "
- + "ORDER BY arrayToMV(RandomAirports) DESC";
+ String pinotQuery =
+ "SELECT count(*), arrayToMV(RandomAirports) FROM mytable " + "GROUP BY
arrayToMV(RandomAirports) "
+ + "ORDER BY arrayToMV(RandomAirports) DESC";
JsonNode jsonNode = postQuery(pinotQuery);
Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 154);
}
+ @Test
+ public void testMultiValueColumnTransforms()
+ throws Exception {
+ String pinotQuery = "SELECT arrayLength(RandomAirports) FROM mytable limit
10";
+ JsonNode jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 10);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"INT");
+
+ pinotQuery = "SELECT cardinality(DivAirportIDs) FROM mytable limit 10";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 10);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"INT");
+
+ // arrayMin dataType should be same as the column dataType
+ pinotQuery = "SELECT arrayMin(DivAirports) FROM mytable limit 10";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 10);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"STRING");
+
+ pinotQuery = "SELECT arrayMin(DivAirportIDs) FROM mytable limit 10";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 10);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"INT");
+
+ // arrayMax dataType should be same as the column dataType
+ pinotQuery = "SELECT arrayMax(DivAirports) FROM mytable limit 10";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 10);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"STRING");
+
+ pinotQuery = "SELECT arrayMax(DivAirportIDs) FROM mytable limit 10";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 10);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"INT");
+
+ // arraySum
+ pinotQuery = "SELECT arraySum(DivAirportIDs) FROM mytable limit 1";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 1);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"DOUBLE");
+
+ // arraySum
+ pinotQuery = "SELECT arrayAverage(DivAirportIDs) FROM mytable limit 1";
+ jsonNode = postQuery(pinotQuery);
+ Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 1);
+
Assert.assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
"DOUBLE");
+ }
+
@AfterClass
public void tearDown()
throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]