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

zongwen pushed a commit to branch cdc-multiple-table
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/cdc-multiple-table by this 
push:
     new 95e3cbf87 [improve][catalog][jdbc] Add MySQL catalog factory (#4168)
95e3cbf87 is described below

commit 95e3cbf87541c1d9d2697cb22720e21d4afeec7e
Author: Zongwen Li <[email protected]>
AuthorDate: Mon Feb 20 17:24:57 2023 +0800

    [improve][catalog][jdbc] Add MySQL catalog factory (#4168)
---
 .../seatunnel/jdbc/catalog/JdbcCatalogOptions.java | 21 +++++++++++++--
 ...atalogOptions.java => MySqlCatalogFactory.java} | 31 ++++++++++++++++------
 2 files changed, 42 insertions(+), 10 deletions(-)

diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
index 93ea1e609..9fc39d054 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
@@ -19,11 +19,28 @@ package 
org.apache.seatunnel.connectors.seatunnel.jdbc.catalog;
 
 import org.apache.seatunnel.api.configuration.Option;
 import org.apache.seatunnel.api.configuration.Options;
+import org.apache.seatunnel.api.configuration.util.OptionRule;
 
-public class JdbcCatalogOptions {
-    public static final Option<String> BASE_URL = Options.key("base-url")
+public interface JdbcCatalogOptions {
+    Option<String> BASE_URL = Options.key("base-url")
         .stringType()
         .noDefaultValue()
         .withDescription("URL has to be without database, like 
\"jdbc:mysql://localhost:5432/\" or" +
             "\"jdbc:mysql://localhost:5432\" rather than 
\"jdbc:mysql://localhost:5432/db\"");
+
+    Option<String> USERNAME =
+        Options.key("username")
+            .stringType()
+            .noDefaultValue()
+            .withDescription("Name of the database to use when connecting to 
the database server.");
+
+    Option<String> PASSWORD =
+        Options.key("password")
+            .stringType()
+            .noDefaultValue()
+            .withDescription("Password to use when connecting to the database 
server.");
+
+    OptionRule.Builder BASE_RULE = OptionRule.builder()
+        .required(BASE_URL)
+        .required(USERNAME, PASSWORD);
 }
diff --git 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/MySqlCatalogFactory.java
similarity index 51%
copy from 
seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
copy to 
seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/MySqlCatalogFactory.java
index 93ea1e609..d9bd85f08 100644
--- 
a/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/JdbcCatalogOptions.java
+++ 
b/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/MySqlCatalogFactory.java
@@ -17,13 +17,28 @@
 
 package org.apache.seatunnel.connectors.seatunnel.jdbc.catalog;
 
-import org.apache.seatunnel.api.configuration.Option;
-import org.apache.seatunnel.api.configuration.Options;
+import org.apache.seatunnel.api.configuration.ReadonlyConfig;
+import org.apache.seatunnel.api.configuration.util.OptionRule;
+import org.apache.seatunnel.api.table.catalog.Catalog;
+import org.apache.seatunnel.api.table.factory.CatalogFactory;
 
-public class JdbcCatalogOptions {
-    public static final Option<String> BASE_URL = Options.key("base-url")
-        .stringType()
-        .noDefaultValue()
-        .withDescription("URL has to be without database, like 
\"jdbc:mysql://localhost:5432/\" or" +
-            "\"jdbc:mysql://localhost:5432\" rather than 
\"jdbc:mysql://localhost:5432/db\"");
+public class MySqlCatalogFactory implements CatalogFactory {
+
+    @Override
+    public String factoryIdentifier() {
+        return "MySQL";
+    }
+
+    @Override
+    public Catalog createCatalog(String catalogName, ReadonlyConfig options) {
+        return new MySqlCatalog(catalogName,
+            options.get(JdbcCatalogOptions.USERNAME),
+            options.get(JdbcCatalogOptions.PASSWORD),
+            options.get(JdbcCatalogOptions.BASE_URL));
+    }
+
+    @Override
+    public OptionRule optionRule() {
+        return JdbcCatalogOptions.BASE_RULE.build();
+    }
 }

Reply via email to