You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2020/11/25 23:09:10 UTC

[shardingsphere] branch master updated: Add default tables into ShardingSphere metadata (#8341)

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

menghaoran 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 39616f4  Add default tables into ShardingSphere metadata (#8341)
39616f4 is described below

commit 39616f46b9f69c3b5648e9a45538f14aed6b4e58
Author: Liang Zhang <te...@163.com>
AuthorDate: Thu Nov 26 07:08:41 2020 +0800

    Add default tables into ShardingSphere metadata (#8341)
    
    * Add default tables into ShardingSphere metadata
    
    * Add default tables into ShardingSphere metadata
---
 .../metadata/schema/builder/SchemaBuilder.java     | 29 ++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/SchemaBuilder.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/SchemaBuilder.java
index cbd95f8..900d56f 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/SchemaBuilder.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/SchemaBuilder.java
@@ -20,10 +20,16 @@ package org.apache.shardingsphere.infra.metadata.schema.builder;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.metadata.schema.builder.loader.SchemaMetaDataLoader;
+import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.type.TableContainedRule;
 
+import javax.sql.DataSource;
 import java.sql.SQLException;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Map.Entry;
 
 /**
  * Schema builder.
@@ -49,6 +55,29 @@ public final class SchemaBuilder {
                 }
             }
         }
+        appendRemainTables(materials, result);
+        return result;
+    }
+    
+    private static void appendRemainTables(final SchemaBuilderMaterials materials, final ShardingSphereSchema schema) throws SQLException {
+        Collection<String> tableNames = new LinkedHashSet<>();
+        for (Entry<String, DataSource> entry: materials.getDataSourceMap().entrySet()) {
+            tableNames.addAll(SchemaMetaDataLoader.loadAllTableNames(entry.getValue(), materials.getDatabaseType()));
+        }
+        tableNames.removeAll(getExistedTables(materials.getRules(), schema));
+        for (String each : tableNames) {
+            schema.put(each, new TableMetaData());
+        }
+    }
+    
+    private static Collection<String> getExistedTables(final Collection<ShardingSphereRule> rules, final ShardingSphereSchema schema) {
+        Collection<String> result = new LinkedHashSet<>();
+        for (ShardingSphereRule each : rules) {
+            if (each instanceof TableContainedRule) {
+                result.addAll(((TableContainedRule) each).getTables());
+            }
+        }
+        result.addAll(schema.getAllTableNames());
         return result;
     }
 }