This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 43ece8b3154 Format SQL of PrestoMetaDataLoader and HiveMetaDataLoader
(#36813)
43ece8b3154 is described below
commit 43ece8b31545bf2e1de240a8068f7060dc0c759d
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 8 00:32:23 2025 +0800
Format SQL of PrestoMetaDataLoader and HiveMetaDataLoader (#36813)
---
.../metadata/data/loader/HiveMetaDataLoader.java | 52 +++++++---------------
.../metadata/data/loader/PrestoMetaDataLoader.java | 24 ++--------
2 files changed, 21 insertions(+), 55 deletions(-)
diff --git
a/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/metadata/data/loader/HiveMetaDataLoader.java
b/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/metadata/data/loader/HiveMetaDataLoader.java
index 9a66328bdd5..66e0fc57acf 100644
---
a/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/metadata/data/loader/HiveMetaDataLoader.java
+++
b/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/metadata/data/loader/HiveMetaDataLoader.java
@@ -29,6 +29,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import java.sql.Types;
import java.util.Collection;
import java.util.Collections;
@@ -45,15 +46,10 @@ import java.util.stream.Collectors;
*/
public final class HiveMetaDataLoader implements DialectMetaDataLoader {
- @SuppressWarnings("SqlNoDataSourceInspection")
@Override
public Collection<SchemaMetaData> load(final MetaDataLoaderMaterial
material) throws SQLException {
- boolean informationSchemaFlag;
- try (Connection connection = material.getDataSource().getConnection())
{
- informationSchemaFlag =
connection.createStatement().executeQuery("SHOW DATABASES LIKE
'INFORMATION_SCHEMA'").next();
- }
Collection<TableMetaData> tableMetaData = new LinkedList<>();
- if (informationSchemaFlag) {
+ if (loadInformationSchemaFlag(material)) {
try (Connection connection =
material.getDataSource().getConnection()) {
Map<String, Collection<ColumnMetaData>> columnMetaDataMap =
loadColumnMetaDataMap(connection, material.getActualTableNames());
for (Map.Entry<String, Collection<ColumnMetaData>> entry :
columnMetaDataMap.entrySet()) {
@@ -65,18 +61,20 @@ public final class HiveMetaDataLoader implements
DialectMetaDataLoader {
for (String each : material.getActualTableNames()) {
TableMetaDataLoader.load(material.getDataSource(), each,
material.getStorageType()).ifPresent(tableMetaData::add);
}
- return Collections.singletonList(new
SchemaMetaData(material.getDefaultSchemaName(), tableMetaData));
+ return Collections.singleton(new
SchemaMetaData(material.getDefaultSchemaName(), tableMetaData));
+ }
+
+ private boolean loadInformationSchemaFlag(final MetaDataLoaderMaterial
material) throws SQLException {
+ String sql = "SHOW DATABASES LIKE 'INFORMATION_SCHEMA'";
+ try (
+ Connection connection =
material.getDataSource().getConnection();
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(sql)) {
+ return resultSet.next();
+ }
}
- /**
- * For apache/hive 4.0.1, `org.apache.hive.jdbc.HiveConnection` does not
implement {@link java.sql.Connection#getCatalog}.
- *
- * @param connection connection
- * @param tables tables
- * @return a map of table name to its column metadata
- * @throws SQLException SQL exception
- */
- @SuppressWarnings("SqlSourceToSinkFlow")
+ @SuppressWarnings("CollectionWithoutInitialCapacity")
private Map<String, Collection<ColumnMetaData>>
loadColumnMetaDataMap(final Connection connection, final Collection<String>
tables) throws SQLException {
Map<String, Collection<ColumnMetaData>> result = new HashMap<>();
try (PreparedStatement preparedStatement =
connection.prepareStatement(getTableMetaDataSQL(tables))) {
@@ -97,27 +95,11 @@ public final class HiveMetaDataLoader implements
DialectMetaDataLoader {
private String getTableMetaDataSQL(final Collection<String> tables) {
if (tables.isEmpty()) {
- return "SELECT TABLE_CATALOG,\n"
- + " TABLE_NAME,\n"
- + " COLUMN_NAME,\n"
- + " DATA_TYPE,\n"
- + " ORDINAL_POSITION,\n"
- + " IS_NULLABLE\n"
- + "FROM INFORMATION_SCHEMA.COLUMNS\n"
- + "WHERE TABLE_CATALOG = ?\n"
- + "ORDER BY ORDINAL_POSITION";
+ return "SELECT
TABLE_CATALOG,TABLE_NAME,COLUMN_NAME,DATA_TYPE,ORDINAL_POSITION,IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG=? ORDER BY
ORDINAL_POSITION";
}
String tableNames = tables.stream().map(each -> String.format("'%s'",
each).toUpperCase()).collect(Collectors.joining(","));
- return String.format("SELECT TABLE_CATALOG,\n"
- + " TABLE_NAME,\n"
- + " COLUMN_NAME,\n"
- + " DATA_TYPE,\n"
- + " ORDINAL_POSITION,\n"
- + " IS_NULLABLE\n"
- + "FROM INFORMATION_SCHEMA.COLUMNS\n"
- + "WHERE TABLE_CATALOG = ?\n"
- + " AND UPPER(TABLE_NAME) IN (%s)\n"
- + "ORDER BY ORDINAL_POSITION", tableNames);
+ return String.format("SELECT
TABLE_CATALOG,TABLE_NAME,COLUMN_NAME,DATA_TYPE,ORDINAL_POSITION,IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS"
+ + " WHERE TABLE_CATALOG=? AND UPPER(TABLE_NAME) IN (%s) ORDER
BY ORDINAL_POSITION", tableNames);
}
private ColumnMetaData loadColumnMetaData(final ResultSet resultSet)
throws SQLException {
diff --git
a/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/metadata/data/loader/PrestoMetaDataLoader.java
b/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/metadata/data/loader/PrestoMetaDataLoader.java
index a26cf71e665..aaa8d8c885d 100644
---
a/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/metadata/data/loader/PrestoMetaDataLoader.java
+++
b/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/metadata/data/loader/PrestoMetaDataLoader.java
@@ -57,7 +57,7 @@ public final class PrestoMetaDataLoader implements
DialectMetaDataLoader {
return Collections.singleton(new
SchemaMetaData(material.getDefaultSchemaName(), tableMetaDataList));
}
- @SuppressWarnings("SqlSourceToSinkFlow")
+ @SuppressWarnings("CollectionWithoutInitialCapacity")
private Map<String, Collection<ColumnMetaData>>
loadColumnMetaDataMap(final Connection connection, final Collection<String>
tables) throws SQLException {
Map<String, Collection<ColumnMetaData>> result = new HashMap<>();
try (PreparedStatement preparedStatement =
connection.prepareStatement(getTableMetaDataSQL(tables))) {
@@ -78,27 +78,11 @@ public final class PrestoMetaDataLoader implements
DialectMetaDataLoader {
private String getTableMetaDataSQL(final Collection<String> tables) {
if (tables.isEmpty()) {
- return "SELECT TABLE_CATALOG,\n"
- + " TABLE_NAME,\n"
- + " COLUMN_NAME,\n"
- + " DATA_TYPE,\n"
- + " ORDINAL_POSITION,\n"
- + " IS_NULLABLE\n"
- + "FROM INFORMATION_SCHEMA.COLUMNS\n"
- + "WHERE TABLE_CATALOG = ?\n"
- + "ORDER BY ORDINAL_POSITION";
+ return "SELECT
TABLE_CATALOG,TABLE_NAME,COLUMN_NAME,DATA_TYPE,ORDINAL_POSITION,IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG=? ORDER BY
ORDINAL_POSITION";
}
String tableNames = tables.stream().map(each -> String.format("'%s'",
each).toUpperCase()).collect(Collectors.joining(","));
- return String.format("SELECT TABLE_CATALOG,\n"
- + " TABLE_NAME,\n"
- + " COLUMN_NAME,\n"
- + " DATA_TYPE,\n"
- + " ORDINAL_POSITION,\n"
- + " IS_NULLABLE\n"
- + "FROM INFORMATION_SCHEMA.COLUMNS\n"
- + "WHERE TABLE_CATALOG = ?\n"
- + " AND UPPER(TABLE_NAME) IN (%s)\n"
- + "ORDER BY ORDINAL_POSITION", tableNames);
+ return String.format("SELECT
TABLE_CATALOG,TABLE_NAME,COLUMN_NAME,DATA_TYPE,ORDINAL_POSITION,IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS"
+ + " WHERE TABLE_CATALOG=? AND UPPER(TABLE_NAME) IN (%s) ORDER
BY ORDINAL_POSITION", tableNames);
}
private ColumnMetaData loadColumnMetaData(final ResultSet resultSet)
throws SQLException {