From b6593b36259c93208e7f3161a7634bdfb5a788dc Mon Sep 17 00:00:00 2001 From: Logan Riggs Date: Thu, 16 Nov 2023 23:59:02 -0800 Subject: [PATCH] Return list parameter type information through the function registry. --- .../gandiva/evaluator/ExpressionRegistry.java | 14 +++++++++++--- .../gandiva/evaluator/FunctionSignature.java | 16 ++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/ExpressionRegistry.java b/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/ExpressionRegistry.java index c870cf8f9ab8e..6abc6719d63e6 100644 --- a/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/ExpressionRegistry.java +++ b/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/ExpressionRegistry.java @@ -17,9 +17,11 @@ package org.apache.arrow.gandiva.evaluator; +import java.util.ArrayList; import java.util.List; import java.util.Set; +import org.apache.arrow.flatbuf.Type; import org.apache.arrow.gandiva.exceptions.GandivaException; import org.apache.arrow.gandiva.ipc.GandivaTypes; import org.apache.arrow.gandiva.ipc.GandivaTypes.ExtGandivaType; @@ -32,7 +34,6 @@ import org.apache.arrow.vector.types.TimeUnit; import org.apache.arrow.vector.types.pojo.ArrowType; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.protobuf.InvalidProtocolBufferException; @@ -117,9 +118,16 @@ private static Set getSupportedFunctionsFromGandiva() throws String functionName = protoFunctionSignature.getName(); ArrowType returnType = getArrowType(protoFunctionSignature.getReturnType()); ArrowType returnListType = getArrowTypeSimple(protoFunctionSignature.getReturnType().getListType()); - List paramTypes = Lists.newArrayList(); + List> paramTypes = new ArrayList>(); for (ExtGandivaType type : protoFunctionSignature.getParamTypesList()) { - paramTypes.add(getArrowType(type)); + ArrowType paramType = getArrowType(type); + ArrowType paramListType = getArrowTypeSimple(type.getListType()); + List paramArrowList = new ArrayList(); + paramArrowList.add(paramType); + if (paramType.getTypeID().getFlatbufID() == Type.List) { + paramArrowList.add(paramListType); + } + paramTypes.add(paramArrowList); } FunctionSignature functionSignature = new FunctionSignature(functionName, returnType, returnListType, paramTypes); diff --git a/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/FunctionSignature.java b/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/FunctionSignature.java index 57fa1df1ab80c..c5c6aeb5372b8 100644 --- a/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/FunctionSignature.java +++ b/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/FunctionSignature.java @@ -17,6 +17,7 @@ package org.apache.arrow.gandiva.evaluator; +import java.util.ArrayList; import java.util.List; import org.apache.arrow.vector.types.pojo.ArrowType; @@ -31,7 +32,7 @@ public class FunctionSignature { private final String name; private final ArrowType returnType; private final ArrowType returnListType; - private final List paramTypes; + private final List> paramTypes; public ArrowType getReturnType() { return returnType; @@ -41,7 +42,7 @@ public ArrowType getReturnListType() { return returnListType; } - public List getParamTypes() { + public List> getParamTypes() { return paramTypes; } @@ -56,7 +57,8 @@ public String getName() { * @param returnListType optional list type * @param paramTypes - data type of input args. */ - public FunctionSignature(String name, ArrowType returnType, ArrowType returnListType, List paramTypes) { + public FunctionSignature(String name, ArrowType returnType, ArrowType returnListType, + List> paramTypes) { this.name = name; this.returnType = returnType; this.returnListType = returnListType; @@ -73,7 +75,13 @@ public FunctionSignature(String name, ArrowType returnType, List para this.name = name; this.returnType = returnType; this.returnListType = ArrowType.Null.INSTANCE; - this.paramTypes = paramTypes; + this.paramTypes = new ArrayList>(); + for (ArrowType paramType : paramTypes) { + List paramArrowList = new ArrayList(); + paramArrowList.add(paramType); + this.paramTypes.add(paramArrowList); + } + } /**