From 5bd9f41abe0a2d76d3f2fe665de25fd28532a021 Mon Sep 17 00:00:00 2001 From: hb <34821912+chenhbb@users.noreply.github.com> Date: Wed, 5 Aug 2026 11:36:33 +0800 Subject: [PATCH] fix(informix): hide empty owners without losing routines --- .../com/dbx/agent/informix/InformixAgent.java | 15 ++++++--------- .../com/dbx/agent/informix/InformixAgentTest.java | 13 ++++++------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java b/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java index 9c15922b9..62679289a 100644 --- a/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java +++ b/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java @@ -24,10 +24,10 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Set; -import java.util.TreeSet; public final class InformixAgent extends AbstractJdbcAgent { private String loginOwner = ""; @@ -187,28 +187,25 @@ public final class InformixAgent extends AbstractJdbcAgent { } } } - return mergeSchemaOwners(catalogOwners, loginOwner); + return normalizeSchemaOwners(catalogOwners); }); } static String schemaCatalogSql() { - // Informix JDBC catalogs are databases; schemas are the object owners in the current database. + // Informix schemas are object owners. Include routine-only owners because + // the same sidebar node also exposes procedures and functions. return "SELECT owner FROM systables WHERE tabid >= 100 AND owner IS NOT NULL " + "UNION SELECT owner FROM sysprocedures WHERE owner IS NOT NULL ORDER BY owner"; } - static List mergeSchemaOwners(List catalogOwners, String loginOwner) { - Set owners = new TreeSet<>(); + static List normalizeSchemaOwners(List catalogOwners) { + Set owners = new LinkedHashSet<>(); for (String owner : catalogOwners) { String normalized = normalizeOwner(owner); if (!normalized.isEmpty()) { owners.add(normalized); } } - String normalizedLoginOwner = normalizeOwner(loginOwner); - if (!normalizedLoginOwner.isEmpty()) { - owners.add(normalizedLoginOwner); - } return new ArrayList<>(owners); } diff --git a/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java b/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java index 132fff3f8..8ea2422f4 100644 --- a/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java +++ b/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java @@ -173,7 +173,7 @@ class InformixAgentTest { } @Test - void listsSchemasFromTableRoutineAndCurrentLoginOwners() { + void listsSchemasFromTableAndRoutineOwnersWithoutLoginFallback() { InformixAgent agent = new InformixAgent(); java.sql.Connection connection = JdbcMetadataSqlFake.connection(); TestSupport.setPrivateConnection(agent, connection); @@ -181,7 +181,7 @@ class InformixAgentTest { params.setUsername("current_owner"); agent.afterConnect(params, connection); - Assertions.assertEquals(List.of("current_owner"), agent.listSchemas()); + Assertions.assertEquals(List.of(), agent.listSchemas()); Assertions.assertEquals( List.of("SELECT owner FROM systables WHERE tabid >= 100 AND owner IS NOT NULL " @@ -189,12 +189,11 @@ class InformixAgentTest { JdbcMetadataSqlFake.statements ); Assertions.assertEquals( - List.of("current_owner", "routine_owner", "table_owner"), - InformixAgent.mergeSchemaOwners( - List.of("table_owner", "routine_owner", "routine_owner", " "), - "current_owner" - ) + List.of("table_owner", "routine_owner"), + InformixAgent.normalizeSchemaOwners(List.of("table_owner", "routine_owner", "routine_owner", " ")) ); + Assertions.assertTrue(InformixAgent.schemaCatalogSql().contains("sysprocedures")); + Assertions.assertFalse(InformixAgent.normalizeSchemaOwners(List.of("routine_owner", " ")).contains("current_owner")); Assertions.assertNotEquals(InformixAgent.databaseCatalogSql(), InformixAgent.schemaCatalogSql()); }