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

ayushsaxena pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new d6158aa4d9a HIVE-27905: Some GenericUDFs wrongly cast ObjectInspectors 
(#4896). (okumin, reviewed by Ayush Saxena, Attila Turoczy)
d6158aa4d9a is described below

commit d6158aa4d9aa11da32981d97e53e537a227c3c58
Author: okumin <[email protected]>
AuthorDate: Wed Dec 6 23:41:36 2023 +0900

    HIVE-27905: Some GenericUDFs wrongly cast ObjectInspectors (#4896). 
(okumin, reviewed by Ayush Saxena, Attila Turoczy)
---
 .../ql/udf/generic/GenericUDFBaseNwayCompare.java  |  1 +
 .../udf/generic/GenericUDFEnforceConstraint.java   |  5 +++++
 .../hive/ql/udf/generic/GenericUDFEpochMilli.java  |  6 +++++-
 .../udf/generic/GenericUDFExceptionInVertex.java   | 22 +++++++++++++++-------
 .../hive/ql/udf/generic/GenericUDFGrouping.java    |  1 +
 .../hive/ql/udf/generic/GenericUDFOPFalse.java     |  1 +
 .../hive/ql/udf/generic/GenericUDFOPNotFalse.java  |  1 +
 .../hive/ql/udf/generic/GenericUDFOPNotTrue.java   |  1 +
 .../hive/ql/udf/generic/GenericUDFOPTrue.java      |  1 +
 .../ql/udf/generic/GenericUDFSQCountCheck.java     |  1 +
 .../hive/ql/udf/generic/GenericUDFSplit.java       |  1 +
 .../hive/ql/udf/generic/GenericUDFTrunc.java       |  3 +++
 .../ql/udf/generic/GenericUDFTumbledWindow.java    |  3 +++
 .../udf_enforce_constraint_wrong_type1.q           |  1 +
 .../udf_exception_in_vertex_udf_wrong_type1.q      |  2 ++
 .../udf_exception_in_vertex_udf_wrong_type2.q      |  2 ++
 .../udf_exception_in_vertex_udf_wrong_type3.q      |  2 ++
 .../udf_exception_in_vertex_udf_wrong_type4.q      |  2 ++
 .../queries/clientnegative/udf_greatest_error_3.q  |  2 ++
 .../clientnegative/udf_grouping_wrong_type1.q      |  1 +
 .../clientnegative/udf_isfalse_wrong_type1.q       |  1 +
 .../clientnegative/udf_isnotfalse_wrong_type1.q    |  1 +
 .../clientnegative/udf_isnottrue_wrong_type1.q     |  1 +
 .../clientnegative/udf_istrue_wrong_type1.q        |  1 +
 .../queries/clientnegative/udf_split_wrong_type1.q |  1 +
 .../queries/clientnegative/udf_split_wrong_type2.q |  1 +
 .../udf_sq_count_check_wrong_type1.q               |  1 +
 .../udf_to_epoch_milli_wrong_type1.q               |  2 ++
 .../queries/clientnegative/udf_trunc_wrong_type1.q |  1 +
 .../queries/clientnegative/udf_trunc_wrong_type2.q |  1 +
 .../udf_tumbling_window_check_wrong_type1.q        |  1 +
 .../udf_tumbling_window_check_wrong_type2.q        |  1 +
 .../udf_enforce_constraint_wrong_type1.q.out       |  1 +
 .../udf_exception_in_vertex_udf_wrong_type1.q.out  |  1 +
 .../udf_exception_in_vertex_udf_wrong_type2.q.out  |  1 +
 .../udf_exception_in_vertex_udf_wrong_type3.q.out  |  1 +
 .../udf_exception_in_vertex_udf_wrong_type4.q.out  |  1 +
 .../clientnegative/udf_greatest_error_3.q.out      |  1 +
 .../clientnegative/udf_grouping_wrong_type1.q.out  |  1 +
 .../clientnegative/udf_isfalse_wrong_type1.q.out   |  1 +
 .../udf_isnotfalse_wrong_type1.q.out               |  1 +
 .../clientnegative/udf_isnottrue_wrong_type1.q.out |  1 +
 .../clientnegative/udf_istrue_wrong_type1.q.out    |  1 +
 .../clientnegative/udf_split_wrong_type1.q.out     |  1 +
 .../clientnegative/udf_split_wrong_type2.q.out     |  1 +
 .../udf_sq_count_check_wrong_type1.q.out           |  1 +
 .../udf_to_epoch_milli_wrong_type1.q.out           |  1 +
 .../clientnegative/udf_trunc_wrong_type1.q.out     |  1 +
 .../clientnegative/udf_trunc_wrong_type2.q.out     |  1 +
 .../udf_tumbling_window_check_wrong_type1.q.out    |  1 +
 .../udf_tumbling_window_check_wrong_type2.q.out    |  1 +
 51 files changed, 83 insertions(+), 8 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNwayCompare.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNwayCompare.java
index d71f04f91b8..cdc14286333 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNwayCompare.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNwayCompare.java
@@ -62,6 +62,7 @@ public abstract class GenericUDFBaseNwayCompare extends 
GenericUDF {
     TypeInfo commonInfo = 
TypeInfoUtils.getTypeInfoFromObjectInspector(arguments[0]);
 
     for (int i = 1; i < arguments.length; i++) {
+      checkArgPrimitive(arguments, i);
       PrimitiveTypeInfo currInfo = (PrimitiveTypeInfo) 
TypeInfoUtils.getTypeInfoFromObjectInspector(arguments[i]);
 
       commonInfo = FunctionRegistry.getCommonClassForComparison(
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceConstraint.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceConstraint.java
index aa0059b1cf2..82f15af47b4 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceConstraint.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEnforceConstraint.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.ql.udf.generic;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
+import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.exec.errors.DataConstraintViolationError;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
@@ -47,6 +48,10 @@ public class GenericUDFEnforceConstraint extends GenericUDF {
               + arguments.length);
     }
 
+    if (!(arguments[0] instanceof BooleanObjectInspector)) {
+      throw new UDFArgumentTypeException(0,
+          String.format("%s only takes BOOLEAN, got %s", getFuncName(), 
arguments[0].getTypeName()));
+    }
     boi = (BooleanObjectInspector) arguments[0];
     return PrimitiveObjectInspectorFactory.writableBooleanObjectInspector;
   }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEpochMilli.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEpochMilli.java
index 58bd86d6456..f17c909dc42 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEpochMilli.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFEpochMilli.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hive.ql.udf.generic;
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
+import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import 
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
@@ -49,8 +50,11 @@ public class GenericUDFEpochMilli extends GenericUDF {
     }
     if (arguments[0] instanceof TimestampObjectInspector) {
       tsOi = (TimestampObjectInspector) arguments[0];
-    } else {
+    } else if (arguments[0] instanceof TimestampLocalTZObjectInspector) {
       tsWithLocalTzOi = (TimestampLocalTZObjectInspector) arguments[0];
+    } else {
+      throw new UDFArgumentTypeException(0,
+          String.format("%s only takes TIMESTAMP, got %s", getFuncName(), 
arguments[0].getTypeName()));
     }
     return PrimitiveObjectInspectorFactory.writableLongObjectInspector;
   }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFExceptionInVertex.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFExceptionInVertex.java
index 55ed806081a..0f12db5a6fd 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFExceptionInVertex.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFExceptionInVertex.java
@@ -76,27 +76,35 @@ public class GenericUDFExceptionInVertex extends GenericUDF 
{
     return PrimitiveObjectInspectorFactory.javaLongObjectInspector;
   }
 
-  public static String getVertexName(ObjectInspector[] parameters, int index) {
-    return ((WritableConstantStringObjectInspector) 
parameters[index]).getWritableConstantValue()
-        .toString();
+  public static String getVertexName(ObjectInspector[] parameters, int index) 
throws UDFArgumentTypeException {
+    if (parameters[index] instanceof WritableConstantStringObjectInspector) {
+      return ((WritableConstantStringObjectInspector) 
parameters[index]).getWritableConstantValue()
+          .toString();
+    } else {
+      throw new UDFArgumentTypeException(index, String.format(
+          "This argument takes only constant STRING, got %s", 
parameters[index].getTypeName()));
+    }
   }
 
-  public static String getTaskNumber(ObjectInspector[] parameters, int index) {
+  public static String getTaskNumber(ObjectInspector[] parameters, int index) 
throws UDFArgumentTypeException {
     return getExpressionAtIndex(parameters, index);
   }
 
-  public static String getTaskAttemptNumber(ObjectInspector[] parameters, int 
index) {
+  public static String getTaskAttemptNumber(ObjectInspector[] parameters, int 
index) throws UDFArgumentTypeException {
     return getExpressionAtIndex(parameters, index);
   }
 
-  private static String getExpressionAtIndex(ObjectInspector[] parameters, int 
index) {
+  private static String getExpressionAtIndex(ObjectInspector[] parameters, int 
index) throws UDFArgumentTypeException {
     if (parameters.length > index) {
       if (parameters[index] instanceof WritableConstantStringObjectInspector) {
         return ((WritableConstantStringObjectInspector) parameters[index])
             .getWritableConstantValue().toString();
-      } else {
+      } else if (parameters[index] instanceof 
WritableConstantIntObjectInspector) {
         return ((WritableConstantIntObjectInspector) 
parameters[index]).getWritableConstantValue()
             .toString();
+      } else {
+        throw new UDFArgumentTypeException(index, String.format(
+            "This argument takes only constant STRING or INT, got %s", 
parameters[index].getTypeName()));
       }
     } else {
       return "*";
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFGrouping.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFGrouping.java
index d11e51b3cbf..649c4788b3a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFGrouping.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFGrouping.java
@@ -71,6 +71,7 @@ public class GenericUDFGrouping extends GenericUDF {
 
     indices = new int[arguments.length - 1];
     for (int i = 1; i < arguments.length; i++) {
+      checkArgPrimitive(arguments, i);
       PrimitiveObjectInspector arg2OI = (PrimitiveObjectInspector) 
arguments[i];
       if (!(arg2OI instanceof ConstantObjectInspector)) {
         throw new UDFArgumentTypeException(i, "Must be a constant. Got: " + 
arg2OI.getClass().getSimpleName());
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPFalse.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPFalse.java
index 3d0cb9687be..433222429e7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPFalse.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPFalse.java
@@ -39,6 +39,7 @@ public class GenericUDFOPFalse extends GenericUDF {
     if (arguments.length != 1) {
       throw new UDFArgumentLengthException("Invalid number of arguments");
     }
+    checkArgPrimitive(arguments, 0);
     conditionConverter = ObjectInspectorConverters.getConverter(arguments[0],
         PrimitiveObjectInspectorFactory.writableBooleanObjectInspector);
 
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotFalse.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotFalse.java
index 4bfb8983327..14301e4f5a0 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotFalse.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotFalse.java
@@ -39,6 +39,7 @@ public class GenericUDFOPNotFalse extends GenericUDF {
     if (arguments.length != 1) {
       throw new UDFArgumentLengthException("Invalid number of arguments");
     }
+    checkArgPrimitive(arguments, 0);
     conditionConverter = ObjectInspectorConverters.getConverter(arguments[0],
         PrimitiveObjectInspectorFactory.writableBooleanObjectInspector);
 
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotTrue.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotTrue.java
index 65b80b577ed..a92f29e27d1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotTrue.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPNotTrue.java
@@ -39,6 +39,7 @@ public class GenericUDFOPNotTrue extends GenericUDF {
     if (arguments.length != 1) {
       throw new UDFArgumentLengthException("Invalid number of arguments");
     }
+    checkArgPrimitive(arguments, 0);
     conditionConverter = ObjectInspectorConverters.getConverter(arguments[0],
         PrimitiveObjectInspectorFactory.writableBooleanObjectInspector);
 
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPTrue.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPTrue.java
index 30d33fb8bbc..20828901332 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPTrue.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOPTrue.java
@@ -39,6 +39,7 @@ public class GenericUDFOPTrue extends GenericUDF {
     if (arguments.length != 1) {
       throw new UDFArgumentLengthException("Invalid number of arguments");
     }
+    checkArgPrimitive(arguments, 0);
     conditionConverter = ObjectInspectorConverters.getConverter(arguments[0],
         PrimitiveObjectInspectorFactory.writableBooleanObjectInspector);
 
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
index b965410f945..421c3fce70a 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
@@ -48,6 +48,7 @@ public class GenericUDFSQCountCheck extends GenericUDF {
           "Invalid scalar subquery expression. Subquery count check expected 
two argument but received: " + arguments.length);
     }
 
+    checkArgPrimitive(arguments, 0);
     converters[0] = ObjectInspectorConverters.getConverter(arguments[0],
             PrimitiveObjectInspectorFactory.writableLongObjectInspector);
 
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSplit.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSplit.java
index f95e75b04e0..e091965ce4a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSplit.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSplit.java
@@ -53,6 +53,7 @@ public class GenericUDFSplit extends GenericUDF {
 
     converters = new ObjectInspectorConverters.Converter[arguments.length];
     for (int i = 0; i < arguments.length; i++) {
+      checkArgPrimitive(arguments, i);
       converters[i] = ObjectInspectorConverters.getConverter(arguments[i],
           PrimitiveObjectInspectorFactory.writableStringObjectInspector);
     }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTrunc.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTrunc.java
index 3cebbe7af85..ffb553f78c5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTrunc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTrunc.java
@@ -106,6 +106,9 @@ public class GenericUDFTrunc extends GenericUDF {
 
   @Override
   public ObjectInspector initialize(ObjectInspector[] arguments) throws 
UDFArgumentException {
+    for (int i = 0; i < arguments.length; i++) {
+      checkArgPrimitive(arguments, i);
+    }
     if (arguments.length == 2) {
       inputType1 = ((PrimitiveObjectInspector) 
arguments[0]).getPrimitiveCategory();
       inputType2 = ((PrimitiveObjectInspector) 
arguments[1]).getPrimitiveCategory();
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTumbledWindow.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTumbledWindow.java
index 17823c01ee5..7c6c3b24e97 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTumbledWindow.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFTumbledWindow.java
@@ -71,6 +71,9 @@ public class GenericUDFTumbledWindow extends GenericUDF {
    */
   @Override public ObjectInspector initialize(ObjectInspector[] arguments) 
throws UDFArgumentException {
     checkArgsSize(arguments, 2, 3);
+    for (int i = 0; i < arguments.length; i++) {
+      checkArgPrimitive(arguments, i);
+    }
     //arg 1 has to be of timestamp type
     //arg 2 has to be an interval
     //arg 3 has to be absent or timestamp type
diff --git 
a/ql/src/test/queries/clientnegative/udf_enforce_constraint_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_enforce_constraint_wrong_type1.q
new file mode 100644
index 00000000000..51d6271d57f
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_enforce_constraint_wrong_type1.q
@@ -0,0 +1 @@
+SELECT ENFORCE_CONSTRAINT(1);
diff --git 
a/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type1.q
new file mode 100644
index 00000000000..5fe8a957642
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type1.q
@@ -0,0 +1,2 @@
+--! qt:dataset:src
+SELECT EXCEPTION_IN_VERTEX_UDF(value, 1) FROM src
diff --git 
a/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type2.q 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type2.q
new file mode 100644
index 00000000000..5fe8a957642
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type2.q
@@ -0,0 +1,2 @@
+--! qt:dataset:src
+SELECT EXCEPTION_IN_VERTEX_UDF(value, 1) FROM src
diff --git 
a/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type3.q 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type3.q
new file mode 100644
index 00000000000..0cb863d4201
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type3.q
@@ -0,0 +1,2 @@
+--! qt:dataset:src
+SELECT EXCEPTION_IN_VERTEX_UDF(value, 'Map 1', 99.9) FROM src
diff --git 
a/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type4.q 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type4.q
new file mode 100644
index 00000000000..0a112ad4403
--- /dev/null
+++ 
b/ql/src/test/queries/clientnegative/udf_exception_in_vertex_udf_wrong_type4.q
@@ -0,0 +1,2 @@
+--! qt:dataset:src
+SELECT EXCEPTION_IN_VERTEX_UDF(value, 'Map 1', 1, 99.9) FROM src
diff --git a/ql/src/test/queries/clientnegative/udf_greatest_error_3.q 
b/ql/src/test/queries/clientnegative/udf_greatest_error_3.q
new file mode 100644
index 00000000000..29860dc2f0a
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_greatest_error_3.q
@@ -0,0 +1,2 @@
+--! qt:dataset:src
+SELECT GREATEST('2.0', array('a', 'b')) FROM src LIMIT 1;
diff --git a/ql/src/test/queries/clientnegative/udf_grouping_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_grouping_wrong_type1.q
new file mode 100644
index 00000000000..d985bc36c0e
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_grouping_wrong_type1.q
@@ -0,0 +1 @@
+SELECT GROUPING(1, ARRAY(2));
diff --git a/ql/src/test/queries/clientnegative/udf_isfalse_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_isfalse_wrong_type1.q
new file mode 100644
index 00000000000..b15a05ded87
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_isfalse_wrong_type1.q
@@ -0,0 +1 @@
+SELECT ISFALSE(ARRAY(1))
diff --git a/ql/src/test/queries/clientnegative/udf_isnotfalse_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_isnotfalse_wrong_type1.q
new file mode 100644
index 00000000000..eb3de699655
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_isnotfalse_wrong_type1.q
@@ -0,0 +1 @@
+SELECT ISNOTFALSE(ARRAY(1));
diff --git a/ql/src/test/queries/clientnegative/udf_isnottrue_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_isnottrue_wrong_type1.q
new file mode 100644
index 00000000000..aa36ac24721
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_isnottrue_wrong_type1.q
@@ -0,0 +1 @@
+SELECT ISNOTTRUE(ARRAY(1));
diff --git a/ql/src/test/queries/clientnegative/udf_istrue_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_istrue_wrong_type1.q
new file mode 100644
index 00000000000..be6742ad124
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_istrue_wrong_type1.q
@@ -0,0 +1 @@
+SELECT ISTRUE(ARRAY(1));
diff --git a/ql/src/test/queries/clientnegative/udf_split_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_split_wrong_type1.q
new file mode 100644
index 00000000000..f9cd7c5ac3b
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_split_wrong_type1.q
@@ -0,0 +1 @@
+SELECT SPLIT(ARRAY('1,2,3'), ',');
diff --git a/ql/src/test/queries/clientnegative/udf_split_wrong_type2.q 
b/ql/src/test/queries/clientnegative/udf_split_wrong_type2.q
new file mode 100644
index 00000000000..2ce53c86b9a
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_split_wrong_type2.q
@@ -0,0 +1 @@
+SELECT SPLIT('1,2,3', ARRAY(',', ':'));
diff --git 
a/ql/src/test/queries/clientnegative/udf_sq_count_check_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_sq_count_check_wrong_type1.q
new file mode 100644
index 00000000000..261f44b92dd
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_sq_count_check_wrong_type1.q
@@ -0,0 +1 @@
+SELECT SQ_COUNT_CHECK(ARRAY(1));
diff --git 
a/ql/src/test/queries/clientnegative/udf_to_epoch_milli_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_to_epoch_milli_wrong_type1.q
new file mode 100644
index 00000000000..4438c00eae4
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_to_epoch_milli_wrong_type1.q
@@ -0,0 +1,2 @@
+--! qt:dataset:src
+SELECT TO_EPOCH_MILLI(1) FROM src
diff --git a/ql/src/test/queries/clientnegative/udf_trunc_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_trunc_wrong_type1.q
new file mode 100644
index 00000000000..9ef1294366f
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_trunc_wrong_type1.q
@@ -0,0 +1 @@
+SELECT TRUNC(ARRAY('2023-12-04'), 'MM');
diff --git a/ql/src/test/queries/clientnegative/udf_trunc_wrong_type2.q 
b/ql/src/test/queries/clientnegative/udf_trunc_wrong_type2.q
new file mode 100644
index 00000000000..8746bf4c911
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_trunc_wrong_type2.q
@@ -0,0 +1 @@
+SELECT TRUNC('2023-12-04', ARRAY('MM'));
diff --git 
a/ql/src/test/queries/clientnegative/udf_tumbling_window_check_wrong_type1.q 
b/ql/src/test/queries/clientnegative/udf_tumbling_window_check_wrong_type1.q
new file mode 100644
index 00000000000..afede166159
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_tumbling_window_check_wrong_type1.q
@@ -0,0 +1 @@
+SELECT TUMBLING_WINDOW(ARRAY('2020-03-01 06:03:00'), interval '5' MINUTES);
diff --git 
a/ql/src/test/queries/clientnegative/udf_tumbling_window_check_wrong_type2.q 
b/ql/src/test/queries/clientnegative/udf_tumbling_window_check_wrong_type2.q
new file mode 100644
index 00000000000..24837bf5c7b
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/udf_tumbling_window_check_wrong_type2.q
@@ -0,0 +1 @@
+SELECT TUMBLING_WINDOW(CAST('2020-03-01 06:03:00' as timestamp), 
ARRAY(interval '5' MINUTES));
diff --git 
a/ql/src/test/results/clientnegative/udf_enforce_constraint_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_enforce_constraint_wrong_type1.q.out
new file mode 100644
index 00000000000..67279fc6b42
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_enforce_constraint_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:26 Argument type mismatch '1': 
enforce_constraint only takes BOOLEAN, got int
diff --git 
a/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type1.q.out
 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type1.q.out
new file mode 100644
index 00000000000..9f98fa8f9fe
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 2:38 Argument type mismatch '1': 
This argument takes only constant STRING, got int
diff --git 
a/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type2.q.out
 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type2.q.out
new file mode 100644
index 00000000000..9f98fa8f9fe
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type2.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 2:38 Argument type mismatch '1': 
This argument takes only constant STRING, got int
diff --git 
a/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type3.q.out
 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type3.q.out
new file mode 100644
index 00000000000..7b92a101cfe
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type3.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 2:47 Argument type mismatch 
'99.9': This argument takes only constant STRING or INT, got decimal(3,1)
diff --git 
a/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type4.q.out
 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type4.q.out
new file mode 100644
index 00000000000..0c2f9310812
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_exception_in_vertex_udf_wrong_type4.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 2:50 Argument type mismatch 
'99.9': This argument takes only constant STRING or INT, got decimal(3,1)
diff --git a/ql/src/test/results/clientnegative/udf_greatest_error_3.q.out 
b/ql/src/test/results/clientnegative/udf_greatest_error_3.q.out
new file mode 100644
index 00000000000..c6bb3413fc8
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_greatest_error_3.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 2:23 Argument type mismatch 
''b'': greatest only takes primitive types as 2nd argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_grouping_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_grouping_wrong_type1.q.out
new file mode 100644
index 00000000000..de4f379c349
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_grouping_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:19 Argument type mismatch '2': 
grouping only takes primitive types as 2nd argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_isfalse_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_isfalse_wrong_type1.q.out
new file mode 100644
index 00000000000..d03b7b33b73
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_isfalse_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:15 Argument type mismatch '1': 
opfalse only takes primitive types as 1st argument, got LIST
diff --git 
a/ql/src/test/results/clientnegative/udf_isnotfalse_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_isnotfalse_wrong_type1.q.out
new file mode 100644
index 00000000000..71712af520c
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_isnotfalse_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:18 Argument type mismatch '1': 
opnotfalse only takes primitive types as 1st argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_isnottrue_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_isnottrue_wrong_type1.q.out
new file mode 100644
index 00000000000..61c08e9f91b
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_isnottrue_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:17 Argument type mismatch '1': 
opnottrue only takes primitive types as 1st argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_istrue_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_istrue_wrong_type1.q.out
new file mode 100644
index 00000000000..6a235dad76e
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_istrue_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:14 Argument type mismatch '1': 
optrue only takes primitive types as 1st argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_split_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_split_wrong_type1.q.out
new file mode 100644
index 00000000000..b10d0dc9e7b
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_split_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:13 Argument type mismatch 
''1,2,3'': split only takes primitive types as 1st argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_split_wrong_type2.q.out 
b/ql/src/test/results/clientnegative/udf_split_wrong_type2.q.out
new file mode 100644
index 00000000000..10d58d85ec6
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_split_wrong_type2.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:22 Argument type mismatch 
'':'': split only takes primitive types as 2nd argument, got LIST
diff --git 
a/ql/src/test/results/clientnegative/udf_sq_count_check_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_sq_count_check_wrong_type1.q.out
new file mode 100644
index 00000000000..8e82da5661d
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_sq_count_check_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:22 Argument type mismatch '1': 
sq_count_check only takes primitive types as 1st argument, got LIST
diff --git 
a/ql/src/test/results/clientnegative/udf_to_epoch_milli_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_to_epoch_milli_wrong_type1.q.out
new file mode 100644
index 00000000000..ca8e47d82c9
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_to_epoch_milli_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 2:22 Argument type mismatch '1': 
epochmilli only takes TIMESTAMP, got int
diff --git a/ql/src/test/results/clientnegative/udf_trunc_wrong_type1.q.out 
b/ql/src/test/results/clientnegative/udf_trunc_wrong_type1.q.out
new file mode 100644
index 00000000000..571b97e3e90
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_trunc_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:13 Argument type mismatch 
''2023-12-04'': trunc only takes primitive types as 1st argument, got LIST
diff --git a/ql/src/test/results/clientnegative/udf_trunc_wrong_type2.q.out 
b/ql/src/test/results/clientnegative/udf_trunc_wrong_type2.q.out
new file mode 100644
index 00000000000..65097f1bf7d
--- /dev/null
+++ b/ql/src/test/results/clientnegative/udf_trunc_wrong_type2.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:27 Argument type mismatch 
''MM'': trunc only takes primitive types as 2nd argument, got LIST
diff --git 
a/ql/src/test/results/clientnegative/udf_tumbling_window_check_wrong_type1.q.out
 
b/ql/src/test/results/clientnegative/udf_tumbling_window_check_wrong_type1.q.out
new file mode 100644
index 00000000000..f22b44f7b43
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_tumbling_window_check_wrong_type1.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:23 Argument type mismatch 
''2020-03-01 06:03:00'': tumbling_window only takes primitive types as 1st 
argument, got LIST
diff --git 
a/ql/src/test/results/clientnegative/udf_tumbling_window_check_wrong_type2.q.out
 
b/ql/src/test/results/clientnegative/udf_tumbling_window_check_wrong_type2.q.out
new file mode 100644
index 00000000000..c13ec561a2a
--- /dev/null
+++ 
b/ql/src/test/results/clientnegative/udf_tumbling_window_check_wrong_type2.q.out
@@ -0,0 +1 @@
+FAILED: SemanticException [Error 10016]: Line 1:65 Argument type mismatch 
''5'': tumbling_window only takes primitive types as 2nd argument, got LIST

Reply via email to