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();

Reply via email to