This is an automated email from the ASF dual-hosted git repository.

jackie 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 3224b36602 Make 'valueIn' MV transform function work with the 
multi-stage query engine (#13443)
3224b36602 is described below

commit 3224b36602c9da0b18a24a0f508a5b2baa9198df
Author: Yash Mayya <[email protected]>
AuthorDate: Thu Jun 20 18:15:30 2024 +0200

    Make 'valueIn' MV transform function work with the multi-stage query engine 
(#13443)
---
 .../apache/pinot/common/function/TransformFunctionType.java   |  4 +++-
 .../operator/transform/function/ValueInTransformFunction.java |  5 +++++
 .../integration/tests/MultiStageEngineIntegrationTest.java    | 11 +++++++++++
 3 files changed, 19 insertions(+), 1 deletion(-)

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 b134365f17..d2c5c8127c 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
@@ -30,6 +30,7 @@ import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlOperatorBinding;
 import org.apache.calcite.sql.type.OperandTypes;
 import org.apache.calcite.sql.type.ReturnTypes;
+import org.apache.calcite.sql.type.SqlOperandCountRanges;
 import org.apache.calcite.sql.type.SqlOperandTypeChecker;
 import org.apache.calcite.sql.type.SqlReturnTypeInference;
 import org.apache.calcite.sql.type.SqlTypeFamily;
@@ -196,7 +197,8 @@ public enum TransformFunctionType {
   ARRAY_SUM_INT("arraySumInt", ReturnTypes.INTEGER, 
OperandTypes.family(SqlTypeFamily.ARRAY), "array_sum_int"),
   ARRAY_SUM_LONG("arraySumLong", ReturnTypes.BIGINT, 
OperandTypes.family(SqlTypeFamily.ARRAY), "array_sum_long"),
 
-  VALUE_IN("valueIn", "value_in"),
+  VALUE_IN("valueIn", ReturnTypes.ARG0_FORCE_NULLABLE, 
OperandTypes.variadic(SqlOperandCountRanges.from(2)),
+      "value_in"),
   MAP_VALUE("mapValue", ReturnTypes.cascade(opBinding ->
       opBinding.getOperandType(2).getComponentType(), 
SqlTypeTransforms.FORCE_NULLABLE),
       OperandTypes.family(ImmutableList.of(SqlTypeFamily.ANY, 
SqlTypeFamily.ANY, SqlTypeFamily.ANY)),
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/ValueInTransformFunction.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/ValueInTransformFunction.java
index 53584bcf4a..c46f894d5a 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/ValueInTransformFunction.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/ValueInTransformFunction.java
@@ -47,6 +47,11 @@ import org.apache.pinot.segment.spi.index.reader.Dictionary;
 import org.apache.pinot.spi.data.FieldSpec.DataType;
 
 
+/**
+ * This class implements the valueIn function for multi-valued columns. It 
takes at least 2 arguments, where the first
+ * argument is a multi-valued column, and the following arguments are constant 
values. The transform function will
+ * filter the values from the multi-valued column with the given constant 
values.
+ */
 public class ValueInTransformFunction extends BaseTransformFunction {
   public static final String FUNCTION_NAME = "valueIn";
 
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 cc96803f61..0840f28c4a 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
@@ -693,6 +693,17 @@ public class MultiStageEngineIntegrationTest extends 
BaseClusterIntegrationTestS
     Assert.assertEquals(jsonNode.get("resultTable").get("rows").size(), 154);
   }
 
+  @Test
+  public void testVariadicFunction() throws Exception {
+    String sqlQuery = "SELECT ARRAY_TO_MV(VALUE_IN(RandomAirports, 'MFR', 
'SUN', 'GTR')) as airport, count(*) "
+        + "FROM mytable WHERE ARRAY_TO_MV(RandomAirports) IN ('MFR', 'SUN', 
'GTR') GROUP BY airport";
+    JsonNode jsonNode = postQuery(sqlQuery);
+    assertNoError(jsonNode);
+    
assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(0).asText(),
 "STRING");
+    
assertEquals(jsonNode.get("resultTable").get("dataSchema").get("columnDataTypes").get(1).asText(),
 "LONG");
+    assertEquals(jsonNode.get("numRowsResultSet").asInt(), 3);
+  }
+
   @Test
   public void testMultiValueColumnGroupByOrderBy()
       throws Exception {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to