This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 709fd599943 Refactor DialectPipelineSQLBuilder (#27175)
709fd599943 is described below
commit 709fd5999438ec33ebd0de7d3a77c10742dd00a4
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 13 18:49:38 2023 +0800
Refactor DialectPipelineSQLBuilder (#27175)
---
.../infra/database/type/dialect/OracleDatabaseType.java | 15 +++++++++++++++
.../spi/sqlbuilder/DialectPipelineSQLBuilder.java | 9 +++++++++
.../common/sqlbuilder/PipelineSQLBuilderEngine.java | 2 +-
.../common/sqlbuilder/FixturePipelineSQLBuilder.java | 5 +++++
.../pipeline/common/sqlbuilder/H2PipelineSQLBuilder.java | 5 +++++
.../mysql/sqlbuilder/MySQLPipelineSQLBuilder.java | 5 +++++
.../opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java | 5 +++++
.../sqlbuilder/PostgreSQLPipelineSQLBuilder.java | 5 +++++
.../data/pipeline/core/fixture/H2PipelineSQLBuilder.java | 6 ++++++
9 files changed, 56 insertions(+), 1 deletion(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/type/dialect/OracleDatabaseType.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/type/dialect/OracleDatabaseType.java
index 14cd2cf6089..3faa2b5dcb3 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/type/dialect/OracleDatabaseType.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/type/dialect/OracleDatabaseType.java
@@ -23,8 +23,10 @@ import
org.apache.shardingsphere.sql.parser.sql.common.enums.QuoteCharacter;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -33,11 +35,24 @@ import java.util.Optional;
*/
public final class OracleDatabaseType implements TrunkDatabaseType {
+ private static final List<String> RESERVED_KEYWORDS =
Arrays.asList("ACCESS", "ADD", "ALL", "ALTER", "AND", "ANY", "ARRAYLEN", "AS",
"ASC", "AUDIT", "BETWEEN", "BY", "CHAR", "CHECK", "CLUSTER",
+ "COLUMN", "COMMENT", "COMPRESS", "CONNECT", "CREATE", "CURRENT",
"DATE", "DECIMAL", "DEFAULT", "DELETE", "DESC", "DISTINCT", "DROP", "ELSE",
"EXCLUSIVE", "EXISTS", "FILE", "FLOAT", "FOR",
+ "FROM", "GRANT", "GROUP", "HAVING", "IDENTIFIED", "IMMEDIATE",
"IN", "INCREMENT", "INDEX", "INITIAL", "INSERT", "INTEGER", "INTERSECT",
"INTO", "IS", "LEVEL", "LIKE", "LOCK", "LONG",
+ "MAXEXTENTS", "MINUS", "MODE", "MODIFY", "NOAUDIT", "NOCOMPRESS",
"NOT", "NOTFOUND", "NOWAIT", "NULL", "NUMBER", "OF", "OFFLINE", "ON", "ONLINE",
"OPTION", "OR", "ORDER", "PCTFREE",
+ "PRIOR", "PRIVILEGES", "PUBLIC", "RAW", "RENAME", "RESOURCE",
"REVOKE", "ROW", "ROWID", "ROWLABEL", "ROWNUM", "ROWS", "START", "SELECT",
"SESSION", "SET", "SHARE", "SIZE", "SMALLINT",
+ "SQLBUF", "SUCCESSFUL", "SYNONYM", "SYSDATE", "TABLE", "THEN",
"TO", "TRIGGER", "UID", "UNION", "UNIQUE", "UPDATE", "USER", "VALIDATE",
"VALUES", "VARCHAR", "VARCHAR2", "VIEW", "WHENEVER",
+ "WHERE", "WITH");
+
@Override
public QuoteCharacter getQuoteCharacter() {
return QuoteCharacter.QUOTE;
}
+ @Override
+ public boolean isReservedWord(final String item) {
+ return RESERVED_KEYWORDS.contains(item.toUpperCase());
+ }
+
@Override
public Collection<String> getJdbcUrlPrefixes() {
return Collections.singleton(String.format("jdbc:%s:",
getType().toLowerCase()));
diff --git
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
index 661575d81d6..d8b112f408f 100644
---
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
@@ -58,6 +58,15 @@ public interface DialectPipelineSQLBuilder extends
DatabaseTypedSPI {
*/
List<Column> extractUpdatedColumns(DataRecord dataRecord);
+ /**
+ * Build check empty SQL.
+ *
+ * @param schemaName schema name
+ * @param tableName table name
+ * @return check SQL
+ */
+ String buildCheckEmptySQL(String schemaName, String tableName);
+
/**
* Build estimated count SQL.
*
diff --git
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineSQLBuilderEngine.java
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineSQLBuilderEngine.java
index 590dee2dae9..0dbf806b709 100644
---
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineSQLBuilderEngine.java
+++
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineSQLBuilderEngine.java
@@ -317,7 +317,7 @@ public final class PipelineSQLBuilderEngine {
* @return check SQL
*/
public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
- return String.format("SELECT * FROM %s LIMIT 1",
getQualifiedTableName(schemaName, tableName));
+ return pipelineSQLBuilder.buildCheckEmptySQL(schemaName, tableName);
}
/**
diff --git
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/FixturePipelineSQLBuilder.java
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/FixturePipelineSQLBuilder.java
index 21182c6b200..dd396cacdc4 100644
---
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/FixturePipelineSQLBuilder.java
+++
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/FixturePipelineSQLBuilder.java
@@ -32,6 +32,11 @@ public final class FixturePipelineSQLBuilder implements
DialectPipelineSQLBuilde
return Collections.emptyList();
}
+ @Override
+ public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
+ return null;
+ }
+
@Override
public Optional<String> buildEstimatedCountSQL(final String schemaName,
final String tableName) {
return Optional.empty();
diff --git
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/H2PipelineSQLBuilder.java
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/H2PipelineSQLBuilder.java
index c3563b206a2..7ca85d2aa82 100644
---
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/H2PipelineSQLBuilder.java
+++
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/H2PipelineSQLBuilder.java
@@ -33,6 +33,11 @@ public final class H2PipelineSQLBuilder implements
DialectPipelineSQLBuilder {
return new ArrayList<>(RecordUtils.extractUpdatedColumns(dataRecord));
}
+ @Override
+ public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
+ return String.format("SELECT * FROM %s LIMIT 1", new
PipelineSQLBuilderEngine(getType()).getQualifiedTableName(schemaName,
tableName));
+ }
+
@Override
public Optional<String> buildEstimatedCountSQL(final String schemaName,
final String tableName) {
return Optional.empty();
diff --git
a/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
b/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
index 3a3a07e0e7a..3564a2b3062 100644
---
a/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
@@ -55,6 +55,11 @@ public final class MySQLPipelineSQLBuilder implements
DialectPipelineSQLBuilder
return new ArrayList<>(RecordUtils.extractUpdatedColumns(dataRecord));
}
+ @Override
+ public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
+ return String.format("SELECT * FROM %s LIMIT 1", new
PipelineSQLBuilderEngine(getType()).getQualifiedTableName(schemaName,
tableName));
+ }
+
@Override
public Optional<String> buildCRC32SQL(final String schemaName, final
String tableName, final String column) {
return Optional.of(String.format("SELECT BIT_XOR(CAST(CRC32(%s) AS
UNSIGNED)) AS checksum, COUNT(1) AS cnt FROM %s", quote(column),
quote(tableName)));
diff --git
a/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
b/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
index c3a09764f44..41cbfbfcd81 100644
---
a/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
@@ -55,6 +55,11 @@ public final class OpenGaussPipelineSQLBuilder implements
DialectPipelineSQLBuil
return dataRecord.getColumns().stream().filter(each ->
!(each.isUniqueKey())).collect(Collectors.toList());
}
+ @Override
+ public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
+ return String.format("SELECT * FROM %s LIMIT 1", new
PipelineSQLBuilderEngine(getType()).getQualifiedTableName(schemaName,
tableName));
+ }
+
@Override
public Optional<String> buildEstimatedCountSQL(final String schemaName,
final String tableName) {
return Optional.of(String.format("SELECT reltuples::integer FROM
pg_class WHERE oid='%s'::regclass::oid;",
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
index f342660f29f..dc577516e10 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
@@ -70,6 +70,11 @@ public final class PostgreSQLPipelineSQLBuilder implements
DialectPipelineSQLBui
return new ArrayList<>(RecordUtils.extractUpdatedColumns(dataRecord));
}
+ @Override
+ public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
+ return String.format("SELECT * FROM %s LIMIT 1", new
PipelineSQLBuilderEngine(getType()).getQualifiedTableName(schemaName,
tableName));
+ }
+
@Override
public Optional<String> buildEstimatedCountSQL(final String schemaName,
final String tableName) {
return Optional.of(String.format("SELECT reltuples::integer FROM
pg_class WHERE oid='%s'::regclass::oid;",
diff --git
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/fixture/H2PipelineSQLBuilder.java
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/fixture/H2PipelineSQLBuilder.java
index 6704e0a7e76..f7ff57d8b2c 100644
---
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/fixture/H2PipelineSQLBuilder.java
+++
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/fixture/H2PipelineSQLBuilder.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.test.it.data.pipeline.core.fixture;
import org.apache.shardingsphere.data.pipeline.api.ingest.record.Column;
import org.apache.shardingsphere.data.pipeline.api.ingest.record.DataRecord;
import
org.apache.shardingsphere.data.pipeline.common.ingest.record.RecordUtils;
+import
org.apache.shardingsphere.data.pipeline.common.sqlbuilder.PipelineSQLBuilderEngine;
import
org.apache.shardingsphere.data.pipeline.spi.sqlbuilder.DialectPipelineSQLBuilder;
import java.util.ArrayList;
@@ -33,6 +34,11 @@ public final class H2PipelineSQLBuilder implements
DialectPipelineSQLBuilder {
return new ArrayList<>(RecordUtils.extractUpdatedColumns(dataRecord));
}
+ @Override
+ public String buildCheckEmptySQL(final String schemaName, final String
tableName) {
+ return String.format("SELECT * FROM %s LIMIT 1", new
PipelineSQLBuilderEngine(getType()).getQualifiedTableName(schemaName,
tableName));
+ }
+
@Override
public Optional<String> buildEstimatedCountSQL(final String schemaName,
final String tableName) {
return Optional.empty();