diff --git a/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java b/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java index 0cd723aa8..0706254ed 100644 --- a/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java +++ b/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java @@ -46,6 +46,9 @@ public final class KingbaseAgent extends PostgresLikeAgent { @Override public List 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 listSchemas() { + if (!isMysqlCompatMode()) { + return super.listSchemas(); + } return unchecked(() -> { List result = new ArrayList<>(); String sql = "SELECT schema_name " + diff --git a/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java b/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java index 6d2e542bd..f89fbadff 100644 --- a/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java +++ b/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java @@ -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 sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"datname"}, + new Object[][]{{"app"}, {"analytics"}} + ))); + + List 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 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 sql = new ArrayList<>();