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) {