@@ -44,7 +44,7 @@ case class SparkMapType(keyType: SparkType, valueType: SparkType) extends SparkT
4444case class SparkStructType (fields : Seq [SparkType ]) extends SparkType
4545case object SparkAnyType extends SparkType
4646
47- case class FunctionSignature (inputTypes : Seq [SparkType ])
47+ case class FunctionSignature (inputTypes : Seq [SparkType ], varArgs : Boolean = false )
4848
4949case class Function (name : String , signatures : Seq [FunctionSignature ])
5050
@@ -65,11 +65,20 @@ object Meta {
6565 (DataTypes .StringType , 0.2 ),
6666 (DataTypes .BinaryType , 0.1 ))
6767
68- private def createFunctionWithInputTypes (name : String , inputs : Seq [SparkType ]): Function = {
69- Function (name, Seq (FunctionSignature (inputs)))
68+ private def createFunctionWithInputTypes (
69+ name : String ,
70+ inputs : Seq [SparkType ],
71+ varArgs : Boolean = false ): Function = {
72+ Function (name, Seq (FunctionSignature (inputs, varArgs)))
73+ createFunctions(name, Seq (FunctionSignature (inputs, varArgs)))
7074 }
7175
7276 private def createFunctions (name : String , signatures : Seq [FunctionSignature ]): Function = {
77+ signatures.foreach { s =>
78+ assert(
79+ ! s.varArgs || s.inputTypes.length == 1 ,
80+ s " Variadic function $s must have exactly one input type " )
81+ }
7382 Function (name, signatures)
7483 }
7584
@@ -126,13 +135,11 @@ object Meta {
126135 SparkTypeOneOf (
127136 Seq (
128137 SparkStringType ,
129- SparkArrayType (
130- SparkTypeOneOf (Seq (SparkStringType , SparkNumericType , SparkBinaryType ))))),
131- SparkTypeOneOf (
132- Seq (
133- SparkStringType ,
134- SparkArrayType (
135- SparkTypeOneOf (Seq (SparkStringType , SparkNumericType , SparkBinaryType ))))))),
138+ SparkBinaryType ,
139+ SparkArrayType (SparkStringType ),
140+ SparkArrayType (SparkNumericType ),
141+ SparkArrayType (SparkBinaryType )))),
142+ varArgs = true ),
136143 createFunctionWithInputTypes(" concat_ws" , Seq (SparkStringType , SparkStringType )),
137144 createFunctionWithInputTypes(" contains" , Seq (SparkStringType , SparkStringType )),
138145 createFunctionWithInputTypes(" ends_with" , Seq (SparkStringType , SparkStringType )),
0 commit comments