From 6c197a141f0dbb202ebd27841c79c2f1f317d1d7 Mon Sep 17 00:00:00 2001 From: aiceflower Date: Sat, 11 Apr 2026 16:30:36 +0800 Subject: [PATCH] #AI commit# [fix][PES][datasource] fix DB2 schema query to use correct SQL instead of invalid command - Fix getAllDatabases() method in DB2 SqlConnection classes - Replace invalid "list database directory" command with proper SQL query - Add configurable schema query SQL with default filtering system schemas - Query SYSCAT.SCHEMATA to get actual schema list from DB2 Co-Authored-By: Claude Opus 4.6 --- .../query/service/db2/SqlConnection.java | 23 +++++++++++++------ .../query/service/db2/SqlConnection.java | 13 +++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java index e1b4afd0112..5c368afc351 100644 --- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java +++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java @@ -44,6 +44,16 @@ public class SqlConnection implements Closeable { private static final CommonVars SQL_CONNECT_URL = CommonVars.apply("wds.linkis.server.mdm.service.db2.url", "jdbc:db2://%s:%s/%s"); + /** + * SQL query to get schema/database list. Default: only show user schemas, excluding system + * schemas (SYS*, NULLID, SQLJ). To show all schemas, configure: "SELECT SCHEMANAME FROM + * SYSCAT.SCHEMATA WITH UR" + */ + private static final CommonVars SQL_SCHEMA_QUERY = + CommonVars.apply( + "wds.linkis.server.mdm.service.db2.schema.query.sql", + "SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WHERE SCHEMANAME NOT LIKE 'SYS%' AND SCHEMANAME != 'NULLID' AND SCHEMANAME != 'SQLJ' WITH UR"); + private Connection conn; private ConnectMessage connectMessage; @@ -67,22 +77,21 @@ public SqlConnection( } public List getAllDatabases() throws SQLException { - // db2 "select schemaname from syscat.schemata" - List dataBaseName = new ArrayList<>(); + // Query schema list using configurable SQL (default: only user schemas) + List schemaNames = new ArrayList<>(); Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); - rs = stmt.executeQuery("list database directory"); - // rs = stmt.executeQuery("SELECT * FROM SYSIBMADM.APPLICATIONS WITH UR"); - // rs = stmt.executeQuery("select * from syscat.tables"); + // Use configurable SQL query for schema list + rs = stmt.executeQuery(SQL_SCHEMA_QUERY.getValue()); while (rs.next()) { - dataBaseName.add(rs.getString(1)); + schemaNames.add(rs.getString(1)); } } finally { closeResource(null, stmt, rs); } - return dataBaseName; + return schemaNames; } public List getAllTables(String tabschema) throws SQLException { diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java index 4fe662c46d9..25f8cfcbcdd 100644 --- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java +++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java @@ -66,22 +66,21 @@ public SqlConnection( } public List getAllDatabases() throws SQLException { - // db2 "select schemaname from syscat.schemata" - List dataBaseName = new ArrayList<>(); + // Query schema list from system catalog view + List schemaNames = new ArrayList<>(); Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); - rs = stmt.executeQuery("list database directory"); - // rs = stmt.executeQuery("SELECT * FROM SYSIBMADM.APPLICATIONS WITH UR"); - // rs = stmt.executeQuery("select * from syscat.tables"); + // Query all schemas from SYSCAT.SCHEMATA (DB2 system catalog) + rs = stmt.executeQuery("SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WITH UR"); while (rs.next()) { - dataBaseName.add(rs.getString(1)); + schemaNames.add(rs.getString(1)); } } finally { closeResource(null, stmt, rs); } - return dataBaseName; + return schemaNames; } public List getAllTables(String tabschema) throws SQLException {