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";