This is an automated email from the ASF dual-hosted git repository.
gaojun2048 pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 139256741 [Improve][JDBC Connector]improve option rule (#3802)
139256741 is described below
commit 139256741ad0e86d4c097fab50378591bd1ad586
Author: Eric <[email protected]>
AuthorDate: Wed Dec 28 17:29:14 2022 +0800
[Improve][JDBC Connector]improve option rule (#3802)
* improve option rule
---
.../seatunnel/api/configuration/util/OptionRule.java | 8 ++++----
.../seatunnel/api/configuration/util/OptionRuleTest.java | 5 -----
.../connectors/seatunnel/jdbc/config/JdbcConfig.java | 4 ++--
.../connectors/seatunnel/jdbc/sink/JdbcSinkFactory.java | 14 ++++++--------
4 files changed, 12 insertions(+), 19 deletions(-)
diff --git
a/seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java
b/seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java
index 42b9c44e3..2151ddeaf 100644
---
a/seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java
+++
b/seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/OptionRule.java
@@ -144,7 +144,7 @@ public class OptionRule {
public Builder required(@NonNull Option<?>... options) {
for (Option<?> option : options) {
verifyDuplicate(option, "RequiredOption");
- verifyRequiredOptionDefaultValue(option);
+ //verifyRequiredOptionDefaultValue(option);
}
this.requiredOptions.add(RequiredOption.AbsolutelyRequiredOptions.of(options));
return this;
@@ -159,7 +159,7 @@ public class OptionRule {
}
for (Option<?> option : options) {
verifyDuplicate(option, "ExclusiveOption");
- verifyRequiredOptionDefaultValue(option);
+ //verifyRequiredOptionDefaultValue(option);
}
this.requiredOptions.add(RequiredOption.ExclusiveRequiredOptions.of(options));
return this;
@@ -168,7 +168,7 @@ public class OptionRule {
public <T> Builder conditional(@NonNull Option<T> conditionalOption,
@NonNull List<T> expectValues, @NonNull Option<?>... requiredOptions) {
for (Option<?> o : requiredOptions) {
verifyDuplicate(o, "ConditionalOption");
- verifyRequiredOptionDefaultValue(o);
+ //verifyRequiredOptionDefaultValue(o);
}
verifyConditionalExists(conditionalOption);
@@ -196,7 +196,7 @@ public class OptionRule {
public <T> Builder conditional(@NonNull Option<T> conditionalOption,
@NonNull T expectValue, @NonNull Option<?>... requiredOptions) {
for (Option<?> o : requiredOptions) {
verifyDuplicate(o, "ConditionalOption");
- verifyRequiredOptionDefaultValue(o);
+ //verifyRequiredOptionDefaultValue(o);
}
verifyConditionalExists(conditionalOption);
diff --git
a/seatunnel-api/src/test/java/org/apache/seatunnel/api/configuration/util/OptionRuleTest.java
b/seatunnel-api/src/test/java/org/apache/seatunnel/api/configuration/util/OptionRuleTest.java
index b61da82c2..bc449dbca 100644
---
a/seatunnel-api/src/test/java/org/apache/seatunnel/api/configuration/util/OptionRuleTest.java
+++
b/seatunnel-api/src/test/java/org/apache/seatunnel/api/configuration/util/OptionRuleTest.java
@@ -87,11 +87,6 @@ public class OptionRuleTest {
.build();
};
- // test required option have no default value
- assertEquals(
- "ErrorCode:[API-02], ErrorDescription:[Option item validate
failed] - Required option 'option.required-have-default' should have no default
value.",
- assertThrows(OptionValidationException.class,
executable).getMessage());
-
executable = () -> {
OptionRule.builder()
.optional(TEST_NUM, TEST_MODE,
TEST_REQUIRED_HAVE_DEFAULT_VALUE)
diff --git
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcConfig.java
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcConfig.java
index 05035fb4c..b1d395abb 100644
---
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcConfig.java
+++
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/config/JdbcConfig.java
@@ -36,7 +36,7 @@ public class JdbcConfig implements Serializable {
public static final Option<Integer> CONNECTION_CHECK_TIMEOUT_SEC =
Options.key("connection_check_timeout_sec").intType().defaultValue(DEFAULT_CONNECTION_CHECK_TIMEOUT_SEC).withDescription("connection
check time second");
- public static final Option<Integer> MAX_RETRIES =
Options.key("max_retries").intType().noDefaultValue().withDescription("max_retired");
+ public static final Option<Integer> MAX_RETRIES =
Options.key("max_retries").intType().defaultValue(0).withDescription("max_retired");
public static final Option<String> USER =
Options.key("user").stringType().noDefaultValue().withDescription("user");
@@ -54,7 +54,7 @@ public class JdbcConfig implements Serializable {
public static final Option<Integer> BATCH_INTERVAL_MS =
Options.key("batch_interval_ms").intType().noDefaultValue().withDescription("batch
interval milliSecond");
- public static final Option<String> IS_EXACTLY_ONCE =
Options.key("is_exactly_once").stringType().noDefaultValue().withDescription("exactly
once");
+ public static final Option<Boolean> IS_EXACTLY_ONCE =
Options.key("is_exactly_once").booleanType().defaultValue(true).withDescription("exactly
once");
public static final Option<String> XA_DATA_SOURCE_CLASS_NAME =
Options.key("xa_data_source_class_name").stringType().noDefaultValue().withDescription("data
source class name");
diff --git
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkFactory.java
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkFactory.java
index 74a4f576d..5ee18fda6 100644
---
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkFactory.java
+++
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/sink/JdbcSinkFactory.java
@@ -55,17 +55,15 @@ public class JdbcSinkFactory implements TableSinkFactory {
.exclusive(QUERY, TABLE)
.optional(USER,
PASSWORD,
- MAX_RETRIES,
CONNECTION_CHECK_TIMEOUT_SEC,
BATCH_SIZE,
BATCH_INTERVAL_MS,
IS_EXACTLY_ONCE,
- XA_DATA_SOURCE_CLASS_NAME,
- MAX_COMMIT_ATTEMPTS,
- TRANSACTION_TIMEOUT_SEC,
- PRIMARY_KEYS,
- SUPPORT_UPSERT_BY_QUERY_PRIMARY_KEY_EXIST,
- AUTO_COMMIT)
- .build();
+ SUPPORT_UPSERT_BY_QUERY_PRIMARY_KEY_EXIST)
+ .conditional(IS_EXACTLY_ONCE, true, XA_DATA_SOURCE_CLASS_NAME,
MAX_COMMIT_ATTEMPTS, TRANSACTION_TIMEOUT_SEC)
+ .conditional(IS_EXACTLY_ONCE, false, MAX_RETRIES)
+ .conditional(SUPPORT_UPSERT_BY_QUERY_PRIMARY_KEY_EXIST, true,
PRIMARY_KEYS)
+ .conditional(DRIVER, "com.teradata.jdbc.TeraDriver", AUTO_COMMIT)
+ .build();
}
}