You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@samza.apache.org by sh...@apache.org on 2019/11/11 03:05:38 UTC

[samza] branch master updated: SAMZA-2375, SAMZA-2376: Add display name to UdfMetadata and handle trailing semi-colons (#1214)

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

shanthoosh 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 6aacee2  SAMZA-2375, SAMZA-2376: Add display name to UdfMetadata and handle trailing semi-colons (#1214)
6aacee2 is described below

commit 6aacee21e75a6c4a2eadbf22e2265953b7fbe90f
Author: Aditya Toomula <at...@linkedin.com>
AuthorDate: Sun Nov 10 19:05:31 2019 -0800

    SAMZA-2375, SAMZA-2376: Add display name to UdfMetadata and handle trailing semi-colons (#1214)
    
    * Add display name to UdfMetadata and handle trailing semi-colons
    
    * Add display name to UdfMetadata and handle trailing semi-colons
---
 .../java/org/apache/samza/sql/interfaces/UdfMetadata.java   | 13 +++++++++++++
 .../java/org/apache/samza/sql/util/SamzaSqlQueryParser.java |  8 +++++---
 .../apache/samza/test/samzasql/TestSamzaSqlEndToEnd.java    |  2 +-
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java b/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
index c590453..e3c5d60 100644
--- a/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
+++ b/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
@@ -31,7 +31,11 @@ import org.apache.samza.sql.schema.SamzaSqlFieldType;
  */
 public class UdfMetadata {
 
+  // To support case insensitivity for udfs in sql statement, we store name in upper-case while displayName
+  // retains the name as it is given to UdfMetadata.
+  // For example: if displayName is 'GetSqlField', name would be 'GETSQLFIELD'.
   private final String name;
+  private final String displayName;
 
   private final String description;
   private final Method udfMethod;
@@ -45,6 +49,8 @@ public class UdfMetadata {
       SamzaSqlFieldType returnType, boolean disableArgCheck) {
     // Udfs are case insensitive
     this.name = name.toUpperCase();
+    // Let's also store the original name for display purposes.
+    this.displayName = name;
     this.description = description;
     this.udfMethod = udfMethod;
     this.udfConfig = udfConfig;
@@ -79,6 +85,13 @@ public class UdfMetadata {
   }
 
   /**
+   * @return Returns the name of the Udf for display purposes.
+   */
+  public String getDisplayName() {
+    return displayName;
+  }
+
+  /**
    * @return Returns the description of the udf.
    */
   public String getDescription() {
diff --git a/samza-sql/src/main/java/org/apache/samza/sql/util/SamzaSqlQueryParser.java b/samza-sql/src/main/java/org/apache/samza/sql/util/SamzaSqlQueryParser.java
index 630d3f3..b6fb76f 100644
--- a/samza-sql/src/main/java/org/apache/samza/sql/util/SamzaSqlQueryParser.java
+++ b/samza-sql/src/main/java/org/apache/samza/sql/util/SamzaSqlQueryParser.java
@@ -25,8 +25,6 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.config.Lex;
@@ -53,7 +51,6 @@ import org.apache.calcite.tools.Planner;
 import org.apache.samza.SamzaException;
 import org.apache.samza.sql.interfaces.SamzaSqlDriver;
 import org.apache.samza.sql.interfaces.SamzaSqlJavaTypeFactoryImpl;
-import org.apache.samza.sql.planner.QueryPlanner;
 import org.apache.samza.sql.planner.SamzaSqlValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -65,6 +62,8 @@ import org.slf4j.LoggerFactory;
 public class SamzaSqlQueryParser {
   private static final Logger LOG = LoggerFactory.getLogger(SamzaSqlQueryParser.class);
 
+  private static final String TRAILING_SEMI_COLON_REGEX = ";+$";
+
   private SamzaSqlQueryParser() {
   }
 
@@ -101,6 +100,9 @@ public class SamzaSqlQueryParser {
   public static QueryInfo parseQuery(String sql) {
     Planner planner = createPlanner();
     SqlNode sqlNode;
+    // Having semi-colons at the end of sql statement is a valid syntax in standard sql but not for Calcite parser.
+    // Hence, removing trailing semi-colon before passing sql statement to Calcite parser.
+    sql = sql.replaceAll(TRAILING_SEMI_COLON_REGEX, "");
     try {
       sqlNode = planner.parse(sql);
     } catch (SqlParseException e) {
diff --git a/samza-test/src/test/java/org/apache/samza/test/samzasql/TestSamzaSqlEndToEnd.java b/samza-test/src/test/java/org/apache/samza/test/samzasql/TestSamzaSqlEndToEnd.java
index 581fbda..52fba62 100644
--- a/samza-test/src/test/java/org/apache/samza/test/samzasql/TestSamzaSqlEndToEnd.java
+++ b/samza-test/src/test/java/org/apache/samza/test/samzasql/TestSamzaSqlEndToEnd.java
@@ -603,7 +603,7 @@ public class TestSamzaSqlEndToEnd extends SamzaSqlIntegrationTestHarness {
     TestAvroSystemFactory.messages.clear();
     Map<String, String> staticConfigs = SamzaSqlTestConfig.fetchStaticConfigsWithFactories(numMessages);
     String sql1 = "Insert into testavro.outputTopic(id, bool_value, long_value) "
-        + "select id, NOT(id = 5) as bool_value, MYTest(id) as long_value from testavro.SIMPLE1";
+        + "select id, NOT(id = 5) as bool_value, MYTest(id) as long_value from testavro.SIMPLE1;;";
     List<String> sqlStmts = Collections.singletonList(sql1);
     staticConfigs.put(SamzaSqlApplicationConfig.CFG_SQL_STMTS_JSON, JsonUtil.toJson(sqlStmts));