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