You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by xi...@apache.org on 2020/10/17 07:14:31 UTC

[shardingsphere] branch master updated: Refactor DatabaseMetaDataDialectHandler (#7819)

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

xiaoyu 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 738aa49  Refactor DatabaseMetaDataDialectHandler (#7819)
738aa49 is described below

commit 738aa4931171af62a4d204d40a04f2e5a43f9757
Author: Liang Zhang <te...@163.com>
AuthorDate: Sat Oct 17 15:14:12 2020 +0800

    Refactor DatabaseMetaDataDialectHandler (#7819)
    
    * Refactor DatabaseMetaDataDialectHandler
    
    * Refactor PhysicalColumnMetaDataLoader
---
 .../handler/DatabaseMetaDataDialectHandler.java     | 21 +++++++++++----------
 .../impl/H2DatabaseMetaDataDialectHandler.java      |  5 +++--
 .../impl/MariaDBDatabaseMetaDataDialectHandler.java |  2 +-
 .../impl/MySQLDatabaseMetaDataDialectHandler.java   |  2 +-
 .../impl/OracleDatabaseMetaDataDialectHandler.java  |  4 ++--
 .../PostgreSQLDatabaseMetaDataDialectHandler.java   |  2 +-
 .../impl/SQL92DatabaseMetaDataDialectHandler.java   |  2 +-
 .../SQLServerDatabaseMetaDataDialectHandler.java    |  2 +-
 .../model/column/PhysicalColumnMetaDataLoader.java  | 10 +++++-----
 .../model/table/PhysicalTableMetaDataLoader.java    | 14 +++++++++-----
 .../handler/DatabaseMetaDataDialectHandlerTest.java | 11 ++++++-----
 11 files changed, 41 insertions(+), 34 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandler.java
index 69feae8..89f60f4 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandler.java
@@ -17,11 +17,12 @@
 
 package org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler;
 
-import java.sql.Connection;
-import java.sql.SQLException;
 import org.apache.shardingsphere.infra.spi.typed.TypedSPI;
 import org.apache.shardingsphere.sql.parser.sql.common.constant.QuoteCharacter;
 
+import java.sql.Connection;
+import java.sql.SQLException;
+
 /**
  * Database meta data dialect handler.
  */
@@ -33,30 +34,30 @@ public interface DatabaseMetaDataDialectHandler extends TypedSPI {
      * @param connection connection
      * @return schema
      */
-    default String getSchema(Connection connection) {
+    default String getSchema(final Connection connection) {
         try {
             return connection.getSchema();
-        } catch (SQLException e) {
+        } catch (final SQLException ignored) {
             return null;
         }
     }
     
     /**
-     * Decorate table name pattern.
+     * Format table name pattern.
      *
      * @param tableNamePattern table name pattern
-     * @return decorated table name pattern
+     * @return formatted table name pattern
      */
-    default String decorate(String tableNamePattern) {
+    default String formatTableNamePattern(final String tableNamePattern) {
         return tableNamePattern;
     }
     
     /**
-     * Get delimiter.
+     * Get quote character.
      *
-     * @return delimiter
+     * @return quote character
      */
-    default QuoteCharacter getDelimiter() {
+    default QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.NONE;
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/H2DatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/H2DatabaseMetaDataDialectHandler.java
index 8637d5f..6279e28 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/H2DatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/H2DatabaseMetaDataDialectHandler.java
@@ -17,12 +17,13 @@
 
 package org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.impl;
 
-import java.util.Properties;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.DatabaseMetaDataDialectHandler;
 import org.apache.shardingsphere.sql.parser.sql.common.constant.QuoteCharacter;
 
+import java.util.Properties;
+
 /**
  * Database meta data dialect handler of H2.
  */
@@ -33,7 +34,7 @@ public final class H2DatabaseMetaDataDialectHandler implements DatabaseMetaDataD
     private Properties props;
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.QUOTE;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MariaDBDatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MariaDBDatabaseMetaDataDialectHandler.java
index 4e41ff8..75116d8 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MariaDBDatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MariaDBDatabaseMetaDataDialectHandler.java
@@ -33,7 +33,7 @@ public final class MariaDBDatabaseMetaDataDialectHandler implements DatabaseMeta
     private Properties props;
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.BACK_QUOTE;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MySQLDatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MySQLDatabaseMetaDataDialectHandler.java
index 38ee556..972db23 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MySQLDatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/MySQLDatabaseMetaDataDialectHandler.java
@@ -33,7 +33,7 @@ public final class MySQLDatabaseMetaDataDialectHandler implements DatabaseMetaDa
     private Properties props;
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.BACK_QUOTE;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/OracleDatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/OracleDatabaseMetaDataDialectHandler.java
index 04137da..19c271d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/OracleDatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/OracleDatabaseMetaDataDialectHandler.java
@@ -45,12 +45,12 @@ public final class OracleDatabaseMetaDataDialectHandler implements DatabaseMetaD
     }
     
     @Override
-    public String decorate(final String tableNamePattern) {
+    public String formatTableNamePattern(final String tableNamePattern) {
         return tableNamePattern.toUpperCase();
     }
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.QUOTE;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/PostgreSQLDatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/PostgreSQLDatabaseMetaDataDialectHandler.java
index 7b2e38c..422717d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/PostgreSQLDatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/PostgreSQLDatabaseMetaDataDialectHandler.java
@@ -33,7 +33,7 @@ public final class PostgreSQLDatabaseMetaDataDialectHandler implements DatabaseM
     private Properties props;
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.QUOTE;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQL92DatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQL92DatabaseMetaDataDialectHandler.java
index 08aa9bd..9f35304 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQL92DatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQL92DatabaseMetaDataDialectHandler.java
@@ -33,7 +33,7 @@ public final class SQL92DatabaseMetaDataDialectHandler implements DatabaseMetaDa
     private Properties props;
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.QUOTE;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQLServerDatabaseMetaDataDialectHandler.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQLServerDatabaseMetaDataDialectHandler.java
index 8dc035b..bec75d1 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQLServerDatabaseMetaDataDialectHandler.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/impl/SQLServerDatabaseMetaDataDialectHandler.java
@@ -33,7 +33,7 @@ public final class SQLServerDatabaseMetaDataDialectHandler implements DatabaseMe
     private Properties props;
 
     @Override
-    public QuoteCharacter getDelimiter() {
+    public QuoteCharacter getQuoteCharacter() {
         return QuoteCharacter.BRACKETS;
     }
 
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java
index baa4e97..29012be 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/column/PhysicalColumnMetaDataLoader.java
@@ -20,6 +20,9 @@ package org.apache.shardingsphere.infra.metadata.model.physical.model.column;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.DatabaseMetaDataDialectHandler;
+import org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.DatabaseMetaDataDialectHandlerFactory;
+import org.apache.shardingsphere.sql.parser.sql.common.constant.QuoteCharacter;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -30,9 +33,6 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
-import org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.DatabaseMetaDataDialectHandler;
-import org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler.DatabaseMetaDataDialectHandlerFactory;
-import org.apache.shardingsphere.sql.parser.sql.common.constant.QuoteCharacter;
 
 /**
  * Physical column meta data loader.
@@ -90,8 +90,8 @@ public final class PhysicalColumnMetaDataLoader {
     }
     
     private static String generateEmptyResultSQL(final String table, final DatabaseType databaseType) {
-        QuoteCharacter quoteCharacter = DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(DatabaseMetaDataDialectHandler::getDelimiter).orElse(QuoteCharacter.NONE);
-        return "SELECT * FROM " + quoteCharacter.getStartDelimiter() + table + quoteCharacter.getEndDelimiter() + " WHERE 1 != 1";
+        QuoteCharacter quoteCharacter = DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(DatabaseMetaDataDialectHandler::getQuoteCharacter).orElse(QuoteCharacter.NONE);
+        return String.format("SELECT * FROM %s%s%s WHERE 1 != 1", quoteCharacter.getStartDelimiter(), table, quoteCharacter.getEndDelimiter());
     }
     
     private static Collection<String> loadPrimaryKeys(final Connection connection, final String table) throws SQLException {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/table/PhysicalTableMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/table/PhysicalTableMetaDataLoader.java
index 0351824..8790dbb 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/table/PhysicalTableMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/physical/model/table/PhysicalTableMetaDataLoader.java
@@ -36,7 +36,7 @@ import java.util.Optional;
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class PhysicalTableMetaDataLoader {
-
+    
     /**
      * Load table meta data.
      *
@@ -48,14 +48,18 @@ public final class PhysicalTableMetaDataLoader {
      */
     public static Optional<PhysicalTableMetaData> load(final DataSource dataSource, final String tableNamePattern, final DatabaseType databaseType) throws SQLException {
         try (MetaDataConnectionAdapter connectionAdapter = new MetaDataConnectionAdapter(databaseType, dataSource.getConnection())) {
-            String tableName = DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(handler -> handler.decorate(tableNamePattern)).orElse(tableNamePattern);
-            return isTableExist(connectionAdapter, tableName)
-                    ? Optional.of(new PhysicalTableMetaData(
-                          PhysicalColumnMetaDataLoader.load(connectionAdapter, tableName, databaseType), PhysicalIndexMetaDataLoader.load(connectionAdapter, tableName)))
+            String formattedTableNamePattern = formatTableNamePattern(tableNamePattern, databaseType);
+            return isTableExist(connectionAdapter, formattedTableNamePattern)
+                    ? Optional.of(new PhysicalTableMetaData(PhysicalColumnMetaDataLoader.load(
+                            connectionAdapter, formattedTableNamePattern, databaseType), PhysicalIndexMetaDataLoader.load(connectionAdapter, formattedTableNamePattern)))
                     : Optional.empty();
         }
     }
     
+    private static String formatTableNamePattern(final String tableNamePattern, final DatabaseType databaseType) {
+        return DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(handler -> handler.formatTableNamePattern(tableNamePattern)).orElse(tableNamePattern);
+    }
+    
     private static boolean isTableExist(final Connection connection, final String tableNamePattern) throws SQLException {
         try (ResultSet resultSet = connection.getMetaData().getTables(connection.getCatalog(), connection.getSchema(), tableNamePattern, null)) {
             return resultSet.next();
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java
index 969a927..89696cb 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/model/physical/jdbc/handler/DatabaseMetaDataDialectHandlerTest.java
@@ -17,9 +17,6 @@
 
 package org.apache.shardingsphere.infra.metadata.model.physical.jdbc.handler;
 
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.SQLException;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
 import org.apache.shardingsphere.infra.database.type.dialect.MariaDBDatabaseType;
@@ -34,6 +31,10 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.when;
@@ -129,11 +130,11 @@ public final class DatabaseMetaDataDialectHandlerTest {
     }
     
     private QuoteCharacter findQuoteCharacter(final DatabaseType databaseType) {
-        return DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(DatabaseMetaDataDialectHandler::getDelimiter).orElse(QuoteCharacter.NONE);
+        return DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(DatabaseMetaDataDialectHandler::getQuoteCharacter).orElse(QuoteCharacter.NONE);
     }
     
     private String getTableNamePattern(final DatabaseType databaseType) {
-        return DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(handler -> handler.decorate(TABLE_NAME_PATTERN)).orElse(TABLE_NAME_PATTERN);
+        return DatabaseMetaDataDialectHandlerFactory.findHandler(databaseType).map(handler -> handler.formatTableNamePattern(TABLE_NAME_PATTERN)).orElse(TABLE_NAME_PATTERN);
     }
     
     private String getSchema(final DatabaseType databaseType) {