Skip to content

Commit c7a0882

Browse files
aiceflowerclaude
andauthored
#AI commit# [fix][PES][datasource] fix DB2 schema query to use correct SQL instead of invalid command (#5409)
- 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 <noreply@anthropic.com>
1 parent f18678d commit c7a0882

2 files changed

Lines changed: 22 additions & 14 deletions

File tree

  • linkis-public-enhancements/linkis-datasource
    • linkis-datasource-manager/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2
    • linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2

linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ public class SqlConnection implements Closeable {
4444
private static final CommonVars<String> SQL_CONNECT_URL =
4545
CommonVars.apply("wds.linkis.server.mdm.service.db2.url", "jdbc:db2://%s:%s/%s");
4646

47+
/**
48+
* SQL query to get schema/database list. Default: only show user schemas, excluding system
49+
* schemas (SYS*, NULLID, SQLJ). To show all schemas, configure: "SELECT SCHEMANAME FROM
50+
* SYSCAT.SCHEMATA WITH UR"
51+
*/
52+
private static final CommonVars<String> SQL_SCHEMA_QUERY =
53+
CommonVars.apply(
54+
"wds.linkis.server.mdm.service.db2.schema.query.sql",
55+
"SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WHERE SCHEMANAME NOT LIKE 'SYS%' AND SCHEMANAME != 'NULLID' AND SCHEMANAME != 'SQLJ' WITH UR");
56+
4757
private Connection conn;
4858

4959
private ConnectMessage connectMessage;
@@ -67,22 +77,21 @@ public SqlConnection(
6777
}
6878

6979
public List<String> getAllDatabases() throws SQLException {
70-
// db2 "select schemaname from syscat.schemata"
71-
List<String> dataBaseName = new ArrayList<>();
80+
// Query schema list using configurable SQL (default: only user schemas)
81+
List<String> schemaNames = new ArrayList<>();
7282
Statement stmt = null;
7383
ResultSet rs = null;
7484
try {
7585
stmt = conn.createStatement();
76-
rs = stmt.executeQuery("list database directory");
77-
// rs = stmt.executeQuery("SELECT * FROM SYSIBMADM.APPLICATIONS WITH UR");
78-
// rs = stmt.executeQuery("select * from syscat.tables");
86+
// Use configurable SQL query for schema list
87+
rs = stmt.executeQuery(SQL_SCHEMA_QUERY.getValue());
7988
while (rs.next()) {
80-
dataBaseName.add(rs.getString(1));
89+
schemaNames.add(rs.getString(1));
8190
}
8291
} finally {
8392
closeResource(null, stmt, rs);
8493
}
85-
return dataBaseName;
94+
return schemaNames;
8695
}
8796

8897
public List<String> getAllTables(String tabschema) throws SQLException {

linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/db2/SqlConnection.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,22 +66,21 @@ public SqlConnection(
6666
}
6767

6868
public List<String> getAllDatabases() throws SQLException {
69-
// db2 "select schemaname from syscat.schemata"
70-
List<String> dataBaseName = new ArrayList<>();
69+
// Query schema list from system catalog view
70+
List<String> schemaNames = new ArrayList<>();
7171
Statement stmt = null;
7272
ResultSet rs = null;
7373
try {
7474
stmt = conn.createStatement();
75-
rs = stmt.executeQuery("list database directory");
76-
// rs = stmt.executeQuery("SELECT * FROM SYSIBMADM.APPLICATIONS WITH UR");
77-
// rs = stmt.executeQuery("select * from syscat.tables");
75+
// Query all schemas from SYSCAT.SCHEMATA (DB2 system catalog)
76+
rs = stmt.executeQuery("SELECT SCHEMANAME FROM SYSCAT.SCHEMATA WITH UR");
7877
while (rs.next()) {
79-
dataBaseName.add(rs.getString(1));
78+
schemaNames.add(rs.getString(1));
8079
}
8180
} finally {
8281
closeResource(null, stmt, rs);
8382
}
84-
return dataBaseName;
83+
return schemaNames;
8584
}
8685

8786
public List<String> getAllTables(String tabschema) throws SQLException {

0 commit comments

Comments
 (0)