You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by az...@apache.org on 2023/02/06 05:41:01 UTC

[shardingsphere] branch master updated: Extract openGauss special impl from AbstractDataSourcePreparer to OpenGaussDataSourcePreparer (#24003)

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

azexin 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 7165c9fbff8 Extract openGauss special impl from AbstractDataSourcePreparer to OpenGaussDataSourcePreparer (#24003)
7165c9fbff8 is described below

commit 7165c9fbff81197f0ab8412e638341685ce70f0e
Author: Hongsheng Zhong <zh...@apache.org>
AuthorDate: Mon Feb 6 13:40:45 2023 +0800

    Extract openGauss special impl from AbstractDataSourcePreparer to OpenGaussDataSourcePreparer (#24003)
    
    * Move special prepareTargetSchemas impl to OpenGaussDataSourcePreparer
    
    * Move special executeTargetTableSQL impl to OpenGaussDataSourcePreparer
---
 .../datasource/AbstractDataSourcePreparer.java     | 19 +++-----------
 .../datasource/OpenGaussDataSourcePreparer.java    | 30 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
index e09a55ef720..5e87e2630a1 100644
--- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
+++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
@@ -49,11 +49,8 @@ public abstract class AbstractDataSourcePreparer implements DataSourcePreparer {
     
     private static final Pattern PATTERN_CREATE_TABLE = Pattern.compile("CREATE\\s+TABLE\\s+", Pattern.CASE_INSENSITIVE);
     
-    // TODO it's just used for openGauss
-    private static final String[] IGNORE_EXCEPTION_MESSAGE = {"multiple primary keys for table", "already exists"};
-    
     @Override
-    public void prepareTargetSchemas(final PrepareTargetSchemasParameter param) {
+    public void prepareTargetSchemas(final PrepareTargetSchemasParameter param) throws SQLException {
         DatabaseType targetDatabaseType = param.getTargetDatabaseType();
         if (!targetDatabaseType.isSchemaAvailable()) {
             return;
@@ -75,14 +72,12 @@ public abstract class AbstractDataSourcePreparer implements DataSourcePreparer {
         }
     }
     
-    private void executeCreateSchema(final PipelineDataSourceManager dataSourceManager, final PipelineDataSourceConfiguration targetDataSourceConfig, final String sql) {
+    private void executeCreateSchema(final PipelineDataSourceManager dataSourceManager, final PipelineDataSourceConfiguration targetDataSourceConfig, final String sql) throws SQLException {
         log.info("prepareTargetSchemas, sql={}", sql);
         try (Connection connection = getCachedDataSource(dataSourceManager, targetDataSourceConfig).getConnection()) {
             try (Statement statement = connection.createStatement()) {
                 statement.execute(sql);
             }
-        } catch (final SQLException ex) {
-            log.warn("create schema failed, error: {}", ex.getMessage());
         }
     }
     
@@ -97,18 +92,10 @@ public abstract class AbstractDataSourcePreparer implements DataSourcePreparer {
      * @param sql SQL
      * @throws SQLException SQL exception
      */
-    protected final void executeTargetTableSQL(final Connection targetConnection, final String sql) throws SQLException {
+    protected void executeTargetTableSQL(final Connection targetConnection, final String sql) throws SQLException {
         log.info("execute target table sql: {}", sql);
         try (Statement statement = targetConnection.createStatement()) {
             statement.execute(sql);
-        } catch (final SQLException ex) {
-            log.warn("execute target table sql failed", ex);
-            for (String ignoreMessage : IGNORE_EXCEPTION_MESSAGE) {
-                if (ex.getMessage().contains(ignoreMessage)) {
-                    return;
-                }
-            }
-            throw ex;
         }
     }
     
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 889562fe45e..98287f43919 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
@@ -18,10 +18,12 @@
 package org.apache.shardingsphere.data.pipeline.opengauss.prepare.datasource;
 
 import com.google.common.base.Splitter;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.curator.shaded.com.google.common.base.Strings;
 import org.apache.shardingsphere.data.pipeline.api.config.CreateTableConfiguration.CreateTableEntry;
 import org.apache.shardingsphere.data.pipeline.api.datasource.PipelineDataSourceManager;
 import org.apache.shardingsphere.data.pipeline.core.prepare.datasource.AbstractDataSourcePreparer;
+import org.apache.shardingsphere.data.pipeline.core.prepare.datasource.PrepareTargetSchemasParameter;
 import org.apache.shardingsphere.data.pipeline.core.prepare.datasource.PrepareTargetTablesParameter;
 
 import java.sql.Connection;
@@ -31,8 +33,22 @@ import java.util.stream.Collectors;
 /**
  * Data source preparer for openGauss.
  */
+@Slf4j
 public final class OpenGaussDataSourcePreparer extends AbstractDataSourcePreparer {
     
+    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();
@@ -46,6 +62,20 @@ public final class OpenGaussDataSourcePreparer extends AbstractDataSourcePrepare
         }
     }
     
+    @Override
+    protected void executeTargetTableSQL(final Connection targetConnection, final String sql) throws SQLException {
+        try {
+            super.executeTargetTableSQL(targetConnection, sql);
+        } catch (final SQLException ex) {
+            for (String ignoreMessage : IGNORE_EXCEPTION_MESSAGE) {
+                if (ex.getMessage().contains(ignoreMessage)) {
+                    return;
+                }
+            }
+            throw ex;
+        }
+    }
+    
     @Override
     public String getType() {
         return "openGauss";