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