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

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


The following commit(s) were added to refs/heads/master by this push:
     new 4e39201  SAMZA-2637: Samza-sql: Fix ANY type validation while checking 
UDF arg types (#1477)
4e39201 is described below

commit 4e392013a321a55eaccc03f75780cbea48668f4e
Author: Aditya Toomula <[email protected]>
AuthorDate: Mon Mar 22 14:41:24 2021 -0700

    SAMZA-2637: Samza-sql: Fix ANY type validation while checking UDF arg types 
(#1477)
    
    * SAMZA-2637: Samza-sql: Fix ANY type validation while checking UDF arg 
types
---
 .../java/org/apache/samza/sql/planner/Checker.java |  2 +-
 .../org/apache/samza/sql/planner/CheckerTest.java  | 33 +++++++++++++++++++++-
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/samza-sql/src/main/java/org/apache/samza/sql/planner/Checker.java 
b/samza-sql/src/main/java/org/apache/samza/sql/planner/Checker.java
index ccbee6a..4a3c657 100644
--- a/samza-sql/src/main/java/org/apache/samza/sql/planner/Checker.java
+++ b/samza-sql/src/main/java/org/apache/samza/sql/planner/Checker.java
@@ -98,7 +98,7 @@ class Checker implements SqlOperandTypeChecker {
         if (parsedSqlArgType.getSqlTypeName() == SqlTypeName.CHAR && 
udfArgumentAsSqlType == SqlTypeName.VARCHAR) {
           return true;
         } else if (!Objects.equals(parsedSqlArgType.getSqlTypeName(), 
udfArgumentAsSqlType)
-                && 
!ANY_SQL_TYPE_NAMES.contains(parsedSqlArgType.getSqlTypeName()) && 
hasOneUdfMethod(udfMetadata)) {
+                && !ANY_SQL_TYPE_NAMES.contains(udfArgumentAsSqlType) && 
hasOneUdfMethod(udfMetadata)) {
           // 3(b). Throw up and fail on mismatch between the SamzaSqlType and 
CalciteType for any argument.
           String msg = String.format("Type mismatch in udf class: %s at 
argument index: %d." +
                           "Expected type: %s, actual type: %s.", 
udfMetadata.getName(),
diff --git 
a/samza-sql/src/test/java/org/apache/samza/sql/planner/CheckerTest.java 
b/samza-sql/src/test/java/org/apache/samza/sql/planner/CheckerTest.java
index b9ecfd2..78e2179 100644
--- a/samza-sql/src/test/java/org/apache/samza/sql/planner/CheckerTest.java
+++ b/samza-sql/src/test/java/org/apache/samza/sql/planner/CheckerTest.java
@@ -57,6 +57,22 @@ public class CheckerTest {
     }
   }
 
+  @SamzaSqlUdf(name = "TestUdfWithAnyType", description = "TestUDFClass")
+  private static class TestUdfWithAnyType implements ScalarUdf {
+
+    public TestUdfWithAnyType() {
+    }
+
+    @Override
+    public void init(Config udfConfig, Context context) {
+    }
+
+    @SamzaSqlUdfMethod(params = SamzaSqlFieldType.ANY, returns = 
SamzaSqlFieldType.STRING)
+    public String execute(Object val) {
+      return "RandomStringtoFail";
+    }
+  }
+
   @Test(expected = SamzaSqlValidatorException.class)
   public void testCheckOperandTypesShouldFailOnTypeMisMatch() throws 
NoSuchMethodException {
     Method udfMethod = TestUdfWithWrongTypes.class.getMethod("execute", 
String.class);
@@ -76,7 +92,7 @@ public class CheckerTest {
   public void testCheckOperandTypesShouldReturnTrueOnTypeMatch() throws 
NoSuchMethodException {
     Method udfMethod = MyTestPolyUdf.class.getMethod("execute", String.class);
     UdfMetadata udfMetadata = new UdfMetadata("MyTestPoly", "Test Polymorphism 
UDF.",
-            udfMethod, new MapConfig(), 
ImmutableList.of(SamzaSqlFieldType.STRING), SamzaSqlFieldType.INT32, false);
+        udfMethod, new MapConfig(), 
ImmutableList.of(SamzaSqlFieldType.STRING), SamzaSqlFieldType.INT32, false);
 
     Checker operandTypeChecker = Checker.getChecker(1, 3, udfMetadata);
 
@@ -88,6 +104,21 @@ public class CheckerTest {
   }
 
   @Test
+  public void testCheckOperandTypesShouldReturnTrueOnAnyTypeInArg() throws 
NoSuchMethodException {
+    Method udfMethod = TestUdfWithAnyType.class.getMethod("execute", 
Object.class);
+    UdfMetadata udfMetadata = new UdfMetadata("TestUdfWithAnyType", 
"TestUDFClass",
+        udfMethod, new MapConfig(), ImmutableList.of(SamzaSqlFieldType.ANY), 
SamzaSqlFieldType.INT64, false);
+
+    Checker operandTypeChecker = Checker.getChecker(1, 3, udfMetadata);
+
+    SqlCallBinding callBinding = Mockito.mock(SqlCallBinding.class);
+    Mockito.when(callBinding.getOperandCount()).thenReturn(1);
+    Mockito.when(callBinding.getOperandType(0)).thenReturn(new 
BasicSqlType(RelDataTypeSystem.DEFAULT, SqlTypeName.ARRAY));
+
+    assertTrue(operandTypeChecker.checkOperandTypes(callBinding, true));
+  }
+
+  @Test
   public void 
testCheckOperandTypesShouldReturnTrueWhenArgumentCheckIsDisabled() throws 
NoSuchMethodException {
     Method udfMethod = TestUdfWithWrongTypes.class.getMethod("execute", 
String.class);
     UdfMetadata udfMetadata = new UdfMetadata("TestUdfWithWrongTypes", 
"TestUDFClass",

Reply via email to