You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ja...@apache.org on 2021/05/28 10:04:47 UTC

[flink] branch release-1.13 updated: [FLINK-22655][sql-client] Fix "-i init.sql" doesn't work when first line is a comment

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

jark pushed a commit to branch release-1.13
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/release-1.13 by this push:
     new 8d62fe8  [FLINK-22655][sql-client] Fix "-i init.sql" doesn't work when first line is a comment
8d62fe8 is described below

commit 8d62fe8e5130575f92c6d3c7b5411fce9752e9f7
Author: JasonLee <40...@users.noreply.github.com>
AuthorDate: Fri May 28 17:37:42 2021 +0800

    [FLINK-22655][sql-client] Fix "-i init.sql" doesn't work when first line is a comment
    
    This closes #15980
---
 .../flink/table/client/cli/CliStatementSplitter.java | 13 +++++++++++--
 .../org/apache/flink/table/client/SqlClientTest.java |  7 ++++---
 .../apache/flink/table/client/cli/CliClientTest.java |  4 +---
 .../table/client/cli/CliStatementSplitterTest.java   | 20 +++++++++++++++++---
 4 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliStatementSplitter.java b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliStatementSplitter.java
index 5aea2a8..ce4f841 100644
--- a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliStatementSplitter.java
+++ b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliStatementSplitter.java
@@ -20,6 +20,7 @@ package org.apache.flink.table.client.cli;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Line splitter to determine whether the submitted line is complete. It also offers to split the
@@ -31,6 +32,7 @@ import java.util.List;
 public class CliStatementSplitter {
 
     private static final String MASK = "--.*$";
+    private static final String BEGINNING_MASK = "^(\\s)*--.*$";
 
     public static boolean isStatementComplete(String statement) {
         String[] lines = statement.split("\n");
@@ -49,18 +51,25 @@ public class CliStatementSplitter {
         for (String line : content.split("\n")) {
             if (isEndOfStatement(line)) {
                 buffer.add(line);
-                statements.add(String.join("\n", buffer));
+                statements.add(normalize(buffer));
                 buffer.clear();
             } else {
                 buffer.add(line);
             }
         }
         if (!buffer.isEmpty()) {
-            statements.add(String.join("\n", buffer));
+            statements.add(normalize(buffer));
         }
         return statements;
     }
 
+    private static String normalize(List<String> buffer) {
+        // remove comment lines
+        return buffer.stream()
+                .map(statementLine -> statementLine.replaceAll(BEGINNING_MASK, ""))
+                .collect(Collectors.joining("\n"));
+    }
+
     private static boolean isEndOfStatement(String line) {
         return line.replaceAll(MASK, "").trim().endsWith(";");
     }
diff --git a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/SqlClientTest.java b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/SqlClientTest.java
index 25e8df2..e7cdac5 100644
--- a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/SqlClientTest.java
+++ b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/SqlClientTest.java
@@ -176,13 +176,14 @@ public class SqlClientTest {
     public void testInitFile() throws Exception {
         List<String> statements =
                 Arrays.asList(
-                        "CREATE TABLE source ("
+                        "-- define table \n"
+                                + "CREATE TABLE source ("
                                 + "id INT,"
                                 + "val STRING"
                                 + ") WITH ("
                                 + "  'connector' = 'values'"
-                                + ");\n",
-                        "SET key = value;\n");
+                                + "); \n",
+                        " -- define config \nSET key = value;\n");
         String initFile = createSqlFile(statements, "init-sql.sql");
 
         String[] args = new String[] {"-i", initFile};
diff --git a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java
index e4173ae..3b5c388 100644
--- a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java
+++ b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java
@@ -252,9 +252,7 @@ public class CliClientTest extends TestLogger {
                                 + ") WITH (\n"
                                 + "  'connector' = 'values'\n"
                                 + ");\n",
-                        "INSERT INTO \n"
-                                + "--COMMENT ; \n"
-                                + "MyOtherTable VALUES (1, 101), (2, 102);",
+                        "INSERT INTO \n" + "MyOtherTable VALUES (1, 101), (2, 102);",
                         "DESC MyOtherTable;",
                         "SHOW TABLES;",
                         "QUIT;\n");
diff --git a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliStatementSplitterTest.java b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliStatementSplitterTest.java
index 92c07bf..79fa26b 100644
--- a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliStatementSplitterTest.java
+++ b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliStatementSplitterTest.java
@@ -55,18 +55,32 @@ public class CliStatementSplitterTest {
     public void testSplitContent() {
         List<String> lines =
                 Arrays.asList(
-                        "CREATE TABLE MyTable (\n"
+                        "-- Define Table; \n"
+                                + "CREATE TABLE MyTable (\n"
                                 + "  id INT,\n"
                                 + "  name STRING,\n"
                                 + ") WITH (\n"
                                 + "  'connector' = 'values',\n"
-                                + "  'test-property' = 'test.value'\n);",
+                                + "  'test-property' = 'test.value'\n);"
+                                + "-- Define Table;",
                         "SET a = b;",
                         "\n" + "SELECT func(id) from MyTable\n;");
         List<String> actual = CliStatementSplitter.splitContent(String.join("\n", lines));
 
+        List<String> expected =
+                Arrays.asList(
+                        "\nCREATE TABLE MyTable (\n"
+                                + "  id INT,\n"
+                                + "  name STRING,\n"
+                                + ") WITH (\n"
+                                + "  'connector' = 'values',\n"
+                                + "  'test-property' = 'test.value'\n);"
+                                + "-- Define Table;",
+                        "SET a = b;",
+                        "\n" + "SELECT func(id) from MyTable\n;");
+
         for (int i = 0; i < lines.size(); i++) {
-            assertEquals(lines.get(i), actual.get(i));
+            assertEquals(expected.get(i), actual.get(i));
         }
     }
 }