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

wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new ba9733dbbc [Bugfix] [seatunnel-starter] When inside double quotes,',' 
are treated as normal characters instead of delimiters (#6042)
ba9733dbbc is described below

commit ba9733dbbc139c837d4d5a96793e580526d73e0d
Author: Guangdong Liu <[email protected]>
AuthorDate: Fri Dec 22 10:28:50 2023 +0800

    [Bugfix] [seatunnel-starter] When inside double quotes,',' are treated as 
normal characters instead of delimiters (#6042)
---
 .../seatunnel/core/starter/command/AbstractCommandArgs.java    |  4 +++-
 .../seatunnel/core/starter/command/ParameterSplitter.java      | 10 +++++-----
 .../core/starter/seatunnel/args/ClientCommandArgsTest.java     |  4 ++++
 .../src/test/resources/args/user_defined_params.conf           |  1 +
 4 files changed, 13 insertions(+), 6 deletions(-)

diff --git 
a/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/AbstractCommandArgs.java
 
b/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/AbstractCommandArgs.java
index ada15490f0..13d969c326 100644
--- 
a/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/AbstractCommandArgs.java
+++ 
b/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/AbstractCommandArgs.java
@@ -42,7 +42,9 @@ public abstract class AbstractCommandArgs extends CommandArgs 
{
     @Parameter(
             names = {"-i", "--variable"},
             splitter = ParameterSplitter.class,
-            description = "Variable substitution, such as -i city=beijing, or 
-i date=20190318")
+            description =
+                    "Variable substitution, such as -i city=beijing, or -i 
date=20190318."
+                            + "We use ',' as separator, when inside \"\", ',' 
are treated as normal characters instead of delimiters.")
     protected List<String> variables = Collections.emptyList();
 
     /** check config flag */
diff --git 
a/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/ParameterSplitter.java
 
b/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/ParameterSplitter.java
index 29263d417e..57d50b0d4a 100644
--- 
a/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/ParameterSplitter.java
+++ 
b/seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/command/ParameterSplitter.java
@@ -19,29 +19,29 @@ package org.apache.seatunnel.core.starter.command;
 import com.beust.jcommander.converters.IParameterSplitter;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 public class ParameterSplitter implements IParameterSplitter {
 
     @Override
     public List<String> split(String value) {
-        if (!value.contains(",")) {
-            return Collections.singletonList(value);
-        }
 
         List<String> result = new ArrayList<>();
         StringBuilder currentToken = new StringBuilder();
         boolean insideBrackets = false;
+        boolean insideQuotes = false;
 
         for (char c : value.toCharArray()) {
+
             if (c == '[') {
                 insideBrackets = true;
             } else if (c == ']') {
                 insideBrackets = false;
+            } else if (c == '"') {
+                insideQuotes = !insideQuotes;
             }
 
-            if (c == ',' && !insideBrackets) {
+            if (c == ',' && !insideQuotes && !insideBrackets) {
                 result.add(currentToken.toString().trim());
                 currentToken = new StringBuilder();
             } else {
diff --git 
a/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/args/ClientCommandArgsTest.java
 
b/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/args/ClientCommandArgsTest.java
index c4bd422f2f..18c7a444d2 100644
--- 
a/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/args/ClientCommandArgsTest.java
+++ 
b/seatunnel-core/seatunnel-starter/src/test/java/org/apache/seatunnel/core/starter/seatunnel/args/ClientCommandArgsTest.java
@@ -58,6 +58,8 @@ public class ClientCommandArgsTest {
             "username=" + username,
             "-i",
             "list=" + list,
+            "-i",
+            "sql=" + "\"select a , b from fake_source_table\""
         };
         ClientCommandArgs clientCommandArgs =
                 CommandLineUtils.parse(args, new ClientCommandArgs(), 
"seatunnel-zeta", true);
@@ -94,6 +96,8 @@ public class ClientCommandArgsTest {
             List<String> list1 = sinkConfig.getStringList("list");
             Assertions.assertEquals(list1.get(0), "par1=20230829");
             Assertions.assertEquals(list1.get(1), "par2=20230829");
+            String sql = sinkConfig.getString("sql");
+            Assertions.assertEquals(sql, "\"select a , b from 
fake_source_table\"");
         }
     }
 }
diff --git 
a/seatunnel-core/seatunnel-starter/src/test/resources/args/user_defined_params.conf
 
b/seatunnel-core/seatunnel-starter/src/test/resources/args/user_defined_params.conf
index 2ca5c56c19..b396999270 100644
--- 
a/seatunnel-core/seatunnel-starter/src/test/resources/args/user_defined_params.conf
+++ 
b/seatunnel-core/seatunnel-starter/src/test/resources/args/user_defined_params.conf
@@ -47,5 +47,6 @@ sink {
      username = ${username}
      password = ${password}
      list = ${list}
+     sql = ${sql}
   }
 }

Reply via email to