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

sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 6f0df8312c1 Add 
DataSourcePreparer.isSupportIfNotExistsOnCreateSchema() (#29412)
6f0df8312c1 is described below

commit 6f0df8312c17d1e9e7102fe693db305d9d1cc9aa
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Dec 16 06:33:22 2023 +0800

    Add DataSourcePreparer.isSupportIfNotExistsOnCreateSchema() (#29412)
    
    * Add DataSourcePreparer.isSupportIfNotExists()
    
    * Add DataSourcePreparer.isSupportIfNotExistsOnCreateSchema()
---
 .../datasource/AbstractDataSourcePreparer.java        |  7 ++++++-
 .../core/preparer/datasource/DataSourcePreparer.java  |  9 +++++++++
 .../datasource/OpenGaussDataSourcePreparer.java       | 19 ++++++-------------
 3 files changed, 21 insertions(+), 14 deletions(-)

diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/AbstractDataSourcePreparer.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/AbstractDataSourcePreparer.java
index e4323adfe8f..9988ce6e3ca 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/AbstractDataSourcePreparer.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/AbstractDataSourcePreparer.java
@@ -49,7 +49,7 @@ public abstract class AbstractDataSourcePreparer implements 
DataSourcePreparer {
     private static final Pattern PATTERN_CREATE_TABLE = 
Pattern.compile("CREATE\\s+TABLE\\s+", Pattern.CASE_INSENSITIVE);
     
     @Override
-    public void prepareTargetSchemas(final PrepareTargetSchemasParameter 
param) throws SQLException {
+    public final void prepareTargetSchemas(final PrepareTargetSchemasParameter 
param) throws SQLException {
         DatabaseType targetDatabaseType = param.getTargetDatabaseType();
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(targetDatabaseType).getDialectDatabaseMetaData();
         if (!dialectDatabaseMetaData.isSchemaAvailable()) {
@@ -77,6 +77,11 @@ public abstract class AbstractDataSourcePreparer implements 
DataSourcePreparer {
                 Connection connection = 
dataSourceManager.getDataSource(targetDataSourceConfig).getConnection();
                 Statement statement = connection.createStatement()) {
             statement.execute(sql);
+        } catch (final SQLException ex) {
+            if (isSupportIfNotExistsOnCreateSchema()) {
+                throw ex;
+            }
+            log.warn("create schema failed", ex);
         }
     }
     
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/DataSourcePreparer.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/DataSourcePreparer.java
index 3becc7f8089..3219b840767 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/DataSourcePreparer.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/DataSourcePreparer.java
@@ -45,4 +45,13 @@ public interface DataSourcePreparer extends DatabaseTypedSPI 
{
      * @throws SQLException SQL exception
      */
     void prepareTargetTables(PrepareTargetTablesParameter param) throws 
SQLException;
+    
+    /**
+     * Is support if not exists on create schema SQL.
+     * 
+     * @return supported or not
+     */
+    default boolean isSupportIfNotExistsOnCreateSchema() {
+        return true;
+    }
 }
diff --git 
a/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/prepare/datasource/OpenGaussDataSourcePreparer.java
 
b/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/prepare/datasource/OpenGaussDataSourcePreparer.java
index f1efbf10832..eb0b467d5a7 100644
--- 
a/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/prepare/datasource/OpenGaussDataSourcePreparer.java
+++ 
b/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/prepare/datasource/OpenGaussDataSourcePreparer.java
@@ -19,10 +19,9 @@ package 
org.apache.shardingsphere.data.pipeline.opengauss.prepare.datasource;
 
 import com.google.common.base.Splitter;
 import lombok.extern.slf4j.Slf4j;
-import 
org.apache.shardingsphere.data.pipeline.core.preparer.CreateTableConfiguration;
 import 
org.apache.shardingsphere.data.pipeline.core.datasource.PipelineDataSourceManager;
+import 
org.apache.shardingsphere.data.pipeline.core.preparer.CreateTableConfiguration;
 import 
org.apache.shardingsphere.data.pipeline.core.preparer.datasource.AbstractDataSourcePreparer;
-import 
org.apache.shardingsphere.data.pipeline.core.preparer.datasource.param.PrepareTargetSchemasParameter;
 import 
org.apache.shardingsphere.data.pipeline.core.preparer.datasource.param.PrepareTargetTablesParameter;
 
 import java.sql.Connection;
@@ -36,17 +35,6 @@ public final class OpenGaussDataSourcePreparer extends 
AbstractDataSourcePrepare
     
     private static final String[] IGNORE_EXCEPTION_MESSAGE = {"multiple 
primary keys for table", "already exists"};
     
-    @Override
-    public void prepareTargetSchemas(final PrepareTargetSchemasParameter 
param) {
-        try {
-            super.prepareTargetSchemas(param);
-        } catch (final SQLException ex) {
-            // openGauss CREATE SCHEMA doesn't support IF NOT EXISTS
-            // TODO Use actual data source to create schema, check whether 
schema exists or not
-            log.warn("create schema failed", ex);
-        }
-    }
-    
     @Override
     public void prepareTargetTables(final PrepareTargetTablesParameter param) 
throws SQLException {
         PipelineDataSourceManager dataSourceManager = 
param.getDataSourceManager();
@@ -74,6 +62,11 @@ public final class OpenGaussDataSourcePreparer extends 
AbstractDataSourcePrepare
         }
     }
     
+    @Override
+    public boolean isSupportIfNotExistsOnCreateSchema() {
+        return false;
+    }
+    
     @Override
     public String getDatabaseType() {
         return "openGauss";

Reply via email to