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));