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}
}
}