strongduanmu commented on code in PR #20616:
URL: https://github.com/apache/shardingsphere/pull/20616#discussion_r959695938
##########
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoader.java:
##########
@@ -45,48 +46,81 @@
* Schema meta data loader for PostgreSQL.
*/
public final class PostgreSQLSchemaMetaDataLoader implements
DialectSchemaMetaDataLoader {
-
+
private static final String BASIC_TABLE_META_DATA_SQL = "SELECT
table_name, column_name, ordinal_position, data_type, udt_name, column_default,
table_schema"
+ " FROM information_schema.columns WHERE table_schema IN (%s)";
-
+
private static final String TABLE_META_DATA_SQL_WITHOUT_TABLES =
BASIC_TABLE_META_DATA_SQL + " ORDER BY ordinal_position";
-
+
private static final String TABLE_META_DATA_SQL_WITH_TABLES =
BASIC_TABLE_META_DATA_SQL + " AND table_name IN (%s) ORDER BY ordinal_position";
-
+
+ private static final String FOREIGN_KEY_META_DATA_SQL = "SELECT
tc.table_schema,tc.table_name,tc.constraint_name,pgo.relname refer_table_name
FROM information_schema.table_constraints tc "
+ + "JOIN pg_constraint pgc ON tc.constraint_name = pgc.conname AND
contype='f' "
+ + "JOIN pg_class pgo ON pgc.confrelid = pgo.oid "
+ + "WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema IN
(%s)";
+
private static final String PRIMARY_KEY_META_DATA_SQL = "SELECT
tc.table_name, kc.column_name, kc.table_schema FROM
information_schema.table_constraints tc"
+ " JOIN information_schema.key_column_usage kc ON kc.table_schema
= tc.table_schema AND kc.table_name = tc.table_name AND kc.constraint_name =
tc.constraint_name"
+ " WHERE tc.constraint_type = 'PRIMARY KEY' AND
kc.ordinal_position IS NOT NULL AND kc.table_schema IN (%s)";
-
+
private static final String BASIC_INDEX_META_DATA_SQL = "SELECT tablename,
indexname, schemaname FROM pg_indexes WHERE schemaname IN (%s)";
-
+
private static final String LOAD_ALL_ROLE_TABLE_GRANTS_SQL = "SELECT
table_name FROM information_schema.role_table_grants";
-
+
private static final String LOAD_FILTED_ROLE_TABLE_GRANTS_SQL =
LOAD_ALL_ROLE_TABLE_GRANTS_SQL + " WHERE table_name IN (%s)";
-
+
@Override
public Collection<SchemaMetaData> load(final DataSource dataSource, final
Collection<String> tables, final String defaultSchemaName) throws SQLException {
Collection<String> schemaNames = loadSchemaNames(dataSource,
DatabaseTypeFactory.getInstance(getType()));
Map<String, Multimap<String, IndexMetaData>> schemaIndexMetaDataMap =
loadIndexMetaDataMap(dataSource, schemaNames);
Map<String, Multimap<String, ColumnMetaData>> schemaColumnMetaDataMap
= loadColumnMetaDataMap(dataSource, tables, schemaNames);
+ Map<String, Multimap<String, ConstraintMetaData>>
schemaConstraintMetaDataMap = loadConstraintMetaDataMap(dataSource,
schemaNames);
Collection<SchemaMetaData> result = new LinkedList<>();
- for (String each : schemaNames) {
- Multimap<String, IndexMetaData> tableIndexMetaDataMap =
schemaIndexMetaDataMap.getOrDefault(each, LinkedHashMultimap.create());
- Multimap<String, ColumnMetaData> tableColumnMetaDataMap =
schemaColumnMetaDataMap.getOrDefault(each, LinkedHashMultimap.create());
- result.add(new SchemaMetaData(each,
createTableMetaDataList(tableIndexMetaDataMap, tableColumnMetaDataMap)));
+ for (String schemaName : schemaNames) {
Review Comment:
> Is `schemaName` more explicit than `each` to reveal the object is here?
You can read code conduct first.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]