fix(agents): restore kingbase metadata visibility

This commit is contained in:
t8y2 2026-06-23 16:17:29 +08:00
parent 38253f2602
commit a9d158f2b5
2 changed files with 38 additions and 0 deletions

View File

@ -46,6 +46,9 @@ 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");
ResultSet rs = stmt.executeQuery()) {
@ -59,6 +62,9 @@ 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 " +

View File

@ -1,6 +1,7 @@
package com.dbx.agent.kingbase;
import com.dbx.agent.DatabaseAgent;
import com.dbx.agent.DatabaseInfo;
import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest;
import com.dbx.agent.test.TestSupport;
import org.junit.jupiter.api.Assertions;
@ -16,6 +17,7 @@ import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest {
@ -51,6 +53,36 @@ class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest {
Assertions.assertEquals("SELECT current_database() AS database_name", sql.get(0));
}
@Test
void regularListDatabasesUsesPostgresCatalog() {
List<String> sql = new ArrayList<>();
KingbaseAgent agent = new KingbaseAgent();
TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet(
new String[]{"datname"},
new Object[][]{{"app"}, {"analytics"}}
)));
List<DatabaseInfo> databases = agent.listDatabases();
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));
}
@Test
void regularListSchemasKeepsKingbaseSystemSchemas() {
List<String> sql = new ArrayList<>();
KingbaseAgent agent = new KingbaseAgent();
TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet(
new String[]{"schema_name"},
new Object[][]{{"public"}, {"sys_catalog"}}
)));
Assertions.assertEquals(Arrays.asList("public", "sys_catalog"), agent.listSchemas());
Assertions.assertTrue(sql.get(0).contains("pg_catalog.pg_namespace"), sql.get(0));
Assertions.assertFalse(sql.get(0).contains("SYS%"), sql.get(0));
}
@Test
void mysqlCompatListTablesUsesInformationSchema() {
List<String> sql = new ArrayList<>();