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 6c04da18be2 Support save index columns in metadata for postgres
(#28424)
6c04da18be2 is described below
commit 6c04da18be2b80a4aac1f3ebcecf00dc673fdc27
Author: zhaojinchao <[email protected]>
AuthorDate: Wed Sep 13 09:55:05 2023 +0800
Support save index columns in metadata for postgres (#28424)
* Support save index columns in metadata for postgres
* Fix unit test
---
.../metadata/data/loader/PostgreSQLMetaDataLoader.java | 9 ++++++---
.../metadata/data/loader/PostgreSQLMetaDataLoaderTest.java | 9 ++++++---
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git
a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
index dc52dcadb8b..6c987b3cf08 100644
---
a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
+++
b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java
@@ -67,9 +67,10 @@ public final class PostgreSQLMetaDataLoader implements
DialectMetaDataLoader {
private static final String BASIC_INDEX_META_DATA_SQL = "SELECT tablename,
indexname, schemaname FROM pg_indexes WHERE schemaname IN (%s)";
- private static final String ADVANCE_INDEX_META_DATA_SQL = "SELECT
idx.relname as index_name, insp.nspname as index_schema, tbl.relname as
table_name, pgi.indisunique as is_unique"
- + " FROM pg_index pgi JOIN pg_class idx ON idx.oid =
pgi.indexrelid JOIN pg_namespace insp ON insp.oid = idx.relnamespace JOIN
pg_class tbl ON tbl.oid = pgi.indrelid"
- + " JOIN pg_namespace tnsp ON tnsp.oid = tbl.relnamespace WHERE
tnsp.nspname IN (%s)";
+ private static final String ADVANCE_INDEX_META_DATA_SQL =
+ "SELECT idx.relname as index_name, insp.nspname as index_schema,
tbl.relname as table_name, att.attname AS column_name, pgi.indisunique as
is_unique"
+ + " FROM pg_index pgi JOIN pg_class idx ON idx.oid =
pgi.indexrelid JOIN pg_namespace insp ON insp.oid = idx.relnamespace JOIN
pg_class tbl ON tbl.oid = pgi.indrelid"
+ + " JOIN pg_namespace tnsp ON tnsp.oid = tbl.relnamespace
JOIN pg_attribute att ON att.attrelid = tbl.oid AND att.attnum =
ANY(pgi.indkey) WHERE tnsp.nspname IN (%s)";
private static final String LOAD_ALL_ROLE_TABLE_GRANTS_SQL = "SELECT
table_name FROM information_schema.role_table_grants";
@@ -108,6 +109,7 @@ public final class PostgreSQLMetaDataLoader implements
DialectMetaDataLoader {
while (resultSet.next()) {
String schemaName = resultSet.getString("index_schema");
String tableName = resultSet.getString("table_name");
+ String columnName = resultSet.getString("column_name");
String indexName = resultSet.getString("index_name");
boolean isUnique = resultSet.getBoolean("is_unique");
Collection<IndexMetaData> indexMetaDatas =
result.getOrDefault(schemaName, LinkedHashMultimap.create()).get(tableName);
@@ -117,6 +119,7 @@ public final class PostgreSQLMetaDataLoader implements
DialectMetaDataLoader {
Optional<IndexMetaData> indexMetaData =
indexMetaDatas.stream().filter(each ->
each.getName().equals(indexName)).findFirst();
if (indexMetaData.isPresent()) {
indexMetaData.get().setUnique(isUnique);
+ indexMetaData.get().getColumns().add(columnName);
}
}
}
diff --git
a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
index 297d518022f..3b8d7960f84 100644
---
a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
+++
b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoaderTest.java
@@ -60,9 +60,10 @@ class PostgreSQLMetaDataLoaderTest {
private static final String BASIC_INDEX_META_DATA_SQL = "SELECT tablename,
indexname, schemaname FROM pg_indexes WHERE schemaname IN ('public')";
- private static final String ADVANCE_INDEX_META_DATA_SQL = "SELECT
idx.relname as index_name, insp.nspname as index_schema, tbl.relname as
table_name, pgi.indisunique as is_unique"
- + " FROM pg_index pgi JOIN pg_class idx ON idx.oid =
pgi.indexrelid JOIN pg_namespace insp ON insp.oid = idx.relnamespace JOIN
pg_class tbl ON tbl.oid = pgi.indrelid"
- + " JOIN pg_namespace tnsp ON tnsp.oid = tbl.relnamespace WHERE
tnsp.nspname IN ('public')";
+ private static final String ADVANCE_INDEX_META_DATA_SQL =
+ "SELECT idx.relname as index_name, insp.nspname as index_schema,
tbl.relname as table_name, att.attname AS column_name, pgi.indisunique as
is_unique"
+ + " FROM pg_index pgi JOIN pg_class idx ON idx.oid =
pgi.indexrelid JOIN pg_namespace insp ON insp.oid = idx.relnamespace JOIN
pg_class tbl ON tbl.oid = pgi.indrelid"
+ + " JOIN pg_namespace tnsp ON tnsp.oid = tbl.relnamespace
JOIN pg_attribute att ON att.attrelid = tbl.oid AND att.attnum =
ANY(pgi.indkey) WHERE tnsp.nspname IN ('public')";
private static final String BASIC_CONSTRAINT_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' "
@@ -176,6 +177,7 @@ class PostgreSQLMetaDataLoaderTest {
ResultSet result = mock(ResultSet.class);
when(result.next()).thenReturn(true, false);
when(result.getString("table_name")).thenReturn("tbl");
+ when(result.getString("column_name")).thenReturn("id");
when(result.getString("index_name")).thenReturn("id");
when(result.getString("index_schema")).thenReturn("public");
when(result.getBoolean("is_unique")).thenReturn(true);
@@ -209,6 +211,7 @@ class PostgreSQLMetaDataLoaderTest {
Iterator<IndexMetaData> indexesIterator =
actualTableMetaData.getIndexes().iterator();
IndexMetaData indexMetaData = new IndexMetaData("id");
indexMetaData.setUnique(true);
+ indexMetaData.getColumns().add("id");
assertThat(indexesIterator.next(), is(indexMetaData));
assertThat(actualTableMetaData.getConstraints().size(), is(1));
Iterator<ConstraintMetaData> constrainsIterator =
actualTableMetaData.getConstraints().iterator();