mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-21 10:28:44 +00:00
fix(agents): use kingbase catalogs for metadata
This commit is contained in:
@@ -46,15 +46,17 @@ public final class KingbaseAgent extends PostgresLikeAgent {
|
||||
|
||||
@Override
|
||||
public List<DatabaseInfo> listDatabases() {
|
||||
if (!isMysqlCompatMode()) {
|
||||
return super.listDatabases();
|
||||
}
|
||||
return unchecked(() -> {
|
||||
try (PreparedStatement stmt = requireConnected().prepareStatement("SELECT current_database() AS database_name");
|
||||
String sql = isMysqlCompatMode()
|
||||
? "SELECT current_database() AS database_name"
|
||||
: "SELECT datname AS database_name FROM sys_database WHERE datistemplate = false ORDER BY datname";
|
||||
try (PreparedStatement stmt = requireConnected().prepareStatement(sql);
|
||||
ResultSet rs = stmt.executeQuery()) {
|
||||
if (rs.next()) {
|
||||
return Collections.singletonList(new DatabaseInfo(rs.getString("database_name")));
|
||||
List<DatabaseInfo> result = new ArrayList<>();
|
||||
while (rs.next()) {
|
||||
result.add(new DatabaseInfo(rs.getString("database_name")));
|
||||
}
|
||||
if (!result.isEmpty()) return result;
|
||||
}
|
||||
return Collections.singletonList(new DatabaseInfo(getConfiguredDatabase()));
|
||||
});
|
||||
@@ -62,17 +64,20 @@ public final class KingbaseAgent extends PostgresLikeAgent {
|
||||
|
||||
@Override
|
||||
public List<String> listSchemas() {
|
||||
if (!isMysqlCompatMode()) {
|
||||
return super.listSchemas();
|
||||
}
|
||||
return unchecked(() -> {
|
||||
List<String> result = new ArrayList<>();
|
||||
String sql = "SELECT schema_name " +
|
||||
"FROM information_schema.schemata " +
|
||||
"WHERE UPPER(schema_name) <> 'INFORMATION_SCHEMA' " +
|
||||
"AND UPPER(schema_name) NOT LIKE 'SYS%' " +
|
||||
"AND UPPER(schema_name) NOT LIKE 'XLOG%' " +
|
||||
"ORDER BY schema_name";
|
||||
String sql = isMysqlCompatMode()
|
||||
? "SELECT schema_name " +
|
||||
"FROM information_schema.schemata " +
|
||||
"WHERE UPPER(schema_name) <> 'INFORMATION_SCHEMA' " +
|
||||
"AND UPPER(schema_name) NOT LIKE 'SYS%' " +
|
||||
"AND UPPER(schema_name) NOT LIKE 'XLOG%' " +
|
||||
"ORDER BY schema_name"
|
||||
: "SELECT nspname AS schema_name " +
|
||||
"FROM sys_namespace " +
|
||||
"WHERE nspname NOT LIKE 'sys_temp_%' " +
|
||||
"AND nspname NOT LIKE 'sys_toast_temp_%' " +
|
||||
"ORDER BY nspname";
|
||||
try (PreparedStatement stmt = requireConnected().prepareStatement(sql);
|
||||
ResultSet rs = stmt.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
|
||||
@@ -54,11 +54,11 @@ class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void regularListDatabasesUsesPostgresCatalog() {
|
||||
void regularListDatabasesUsesKingbaseCatalog() {
|
||||
List<String> sql = new ArrayList<>();
|
||||
KingbaseAgent agent = new KingbaseAgent();
|
||||
TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet(
|
||||
new String[]{"datname"},
|
||||
new String[]{"database_name"},
|
||||
new Object[][]{{"app"}, {"analytics"}}
|
||||
)));
|
||||
|
||||
@@ -66,7 +66,7 @@ class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest {
|
||||
Assertions.assertEquals(2, databases.size());
|
||||
Assertions.assertEquals("app", databases.get(0).getName());
|
||||
Assertions.assertEquals("analytics", databases.get(1).getName());
|
||||
Assertions.assertTrue(sql.get(0).contains("FROM pg_database"), sql.get(0));
|
||||
Assertions.assertTrue(sql.get(0).contains("FROM sys_database"), sql.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -79,7 +79,7 @@ class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest {
|
||||
)));
|
||||
|
||||
Assertions.assertEquals(Arrays.asList("public", "sys_catalog"), agent.listSchemas());
|
||||
Assertions.assertTrue(sql.get(0).contains("pg_catalog.pg_namespace"), sql.get(0));
|
||||
Assertions.assertTrue(sql.get(0).contains("FROM sys_namespace"), sql.get(0));
|
||||
Assertions.assertFalse(sql.get(0).contains("SYS%"), sql.get(0));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user