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

Reply via email to