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 1a1cb45a27d Refactor to reuse connection to loadIndexMetaData (#17289)
1a1cb45a27d is described below

commit 1a1cb45a27dd605c1fd68802f3a7a18c937bb53c
Author: cheese8 <[email protected]>
AuthorDate: Wed May 4 13:51:48 2022 +0800

    Refactor to reuse connection to loadIndexMetaData (#17289)
    
    * Reuse connection to loadIndexMetaData
    
    * optimized to avoid NPE
---
 .../metadata/schema/loader/dialect/OracleSchemaMetaDataLoader.java | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/dialect/OracleSchemaMetaDataLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/dialect/OracleSchemaMetaDataLoader.java
index 13a81a7f49c..c053bab4e9a 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/dialect/OracleSchemaMetaDataLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/dialect/OracleSchemaMetaDataLoader.java
@@ -74,14 +74,15 @@ public final class OracleSchemaMetaDataLoader implements 
DialectSchemaMetaDataLo
     @Override
     public Collection<SchemaMetaData> load(final DataSource dataSource, final 
Collection<String> tables, final String defaultSchemaName) throws SQLException {
         Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+        Map<String, Collection<IndexMetaData>> indexMetaDataMap = new 
LinkedHashMap<>();
         Map<String, Collection<ColumnMetaData>> columnMetaDataMap = new 
HashMap<>(tables.size(), 1.0f);
         List<List<String>> splitTables = Lists.partition(new 
ArrayList(tables), BATCH_SIZE);
         try (Connection connection = dataSource.getConnection()) {
             for (List<String> each : splitTables) {
                 columnMetaDataMap.putAll(loadColumnMetaDataMap(connection, 
each));
             }
+            indexMetaDataMap.putAll(columnMetaDataMap.isEmpty() ? 
Collections.emptyMap() : loadIndexMetaData(connection, 
columnMetaDataMap.keySet()));
         }
-        Map<String, Collection<IndexMetaData>> indexMetaDataMap = 
columnMetaDataMap.isEmpty() ? Collections.emptyMap() : 
loadIndexMetaData(dataSource, columnMetaDataMap.keySet());
         for (Entry<String, Collection<ColumnMetaData>> entry : 
columnMetaDataMap.entrySet()) {
             tableMetaDataMap.put(entry.getKey(), new 
TableMetaData(entry.getKey(), entry.getValue(), 
indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList()), 
Collections.emptyList()));
         }
@@ -153,9 +154,9 @@ public final class OracleSchemaMetaDataLoader implements 
DialectSchemaMetaDataLo
         return metaData.getDatabaseMajorVersion() >= 
COLLATION_START_MAJOR_VERSION && metaData.getDatabaseMinorVersion() >= 
IDENTITY_COLUMN_START_MINOR_VERSION;
     }
     
-    private Map<String, Collection<IndexMetaData>> loadIndexMetaData(final 
DataSource dataSource, final Collection<String> tableNames) throws SQLException 
{
+    private Map<String, Collection<IndexMetaData>> loadIndexMetaData(final 
Connection connection, final Collection<String> tableNames) throws SQLException 
{
         Map<String, Collection<IndexMetaData>> result = new HashMap<>();
-        try (Connection connection = dataSource.getConnection(); 
PreparedStatement preparedStatement = 
connection.prepareStatement(getIndexMetaDataSQL(tableNames))) {
+        try (PreparedStatement preparedStatement = 
connection.prepareStatement(getIndexMetaDataSQL(tableNames))) {
             preparedStatement.setString(1, connection.getSchema());
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {

Reply via email to