From 275d490ca7d78a630c7f3c8fa8ade8422fc9fc08 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Thu, 2 Jul 2026 15:21:45 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(sidebar):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20Oracle=20=E8=A1=A8=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=BC=BA=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Oracle/Dameng 表元数据查询移除 ALL_SEGMENTS 依赖 - 使用 ALL_TABLES.BLOCKS 轻量估算表大小,避免权限或大库聚合失败 - 保留表注释、行数、创建时间和最后 DDL 时间展示 - 补充 Oracle-like 元数据 SQL 回归断言 --- frontend/src/components/Sidebar.locate-toolbar.test.tsx | 2 ++ frontend/src/components/SidebarDamengTableCount.test.ts | 7 ++++++- frontend/src/components/sidebar/sidebarMetadataLoaders.ts | 4 +--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Sidebar.locate-toolbar.test.tsx b/frontend/src/components/Sidebar.locate-toolbar.test.tsx index 904f45a5..2155b07d 100644 --- a/frontend/src/components/Sidebar.locate-toolbar.test.tsx +++ b/frontend/src/components/Sidebar.locate-toolbar.test.tsx @@ -3131,7 +3131,9 @@ describe('Sidebar locate toolbar', () => { expect(sqlServerSql).toContain('ep.value AS table_comment'); expect(sqlServerSql).toContain('t.create_date AS create_time'); expect(oracleSql).toContain('comments AS table_comment'); + expect(oracleSql).toContain('COALESCE(t.blocks, 0) * 8192 AS table_size'); expect(oracleSql).toContain('o.last_ddl_time AS update_time'); + expect(oracleSql).not.toContain('all_segments'); const loaderSource = readSourceFile('./sidebar/useSidebarTreeLoaders.tsx'); expect(loaderSource).toContain('tableMetadataMap'); diff --git a/frontend/src/components/SidebarDamengTableCount.test.ts b/frontend/src/components/SidebarDamengTableCount.test.ts index 4caeea99..1c1312ec 100644 --- a/frontend/src/components/SidebarDamengTableCount.test.ts +++ b/frontend/src/components/SidebarDamengTableCount.test.ts @@ -12,9 +12,14 @@ describe('Sidebar Dameng table count regression', () => { expect(damengSql).toContain('owner AS schema_name'); expect(damengSql).toContain('comments AS table_comment'); + expect(damengSql).toContain('COALESCE(t.blocks, 0) * 8192 AS table_size'); + expect(damengSql).not.toContain('all_segments'); expect(oracleSql).toContain('owner AS schema_name'); + expect(oracleSql).toContain('COALESCE(t.blocks, 0) * 8192 AS table_size'); + expect(oracleSql).not.toContain('all_segments'); - expect(loaderSource).toContain('const tableSchemaMap = new Map();'); + expect(loaderSource).toContain('const tableMetadataMap = new Map();'); + expect(loaderSource).toContain('const buildTableMetadataKeys = (rawTableName: string, rawSchemaName = \'\'): string[] => {'); expect(loaderSource).toContain("getCaseInsensitiveValue(row, ['schema_name', 'SCHEMA_NAME', 'owner', 'OWNER'])"); expect(loaderSource).toContain('const normalizedSchemaRows = schemaRows'); expect(loaderSource).toContain('normalizedSchemaRows.length !== 1'); diff --git a/frontend/src/components/sidebar/sidebarMetadataLoaders.ts b/frontend/src/components/sidebar/sidebarMetadataLoaders.ts index 5fe07bfd..fcd7b91f 100644 --- a/frontend/src/components/sidebar/sidebarMetadataLoaders.ts +++ b/frontend/src/components/sidebar/sidebarMetadataLoaders.ts @@ -315,13 +315,11 @@ const buildSidebarTableStatusSQL = ( const owner = escapeSQLLiteral(dbName).toUpperCase(); return [ "SELECT c.owner AS schema_name, c.table_name, c.comments AS table_comment, t.num_rows AS table_rows,", - "COALESCE(SUM(s.bytes), 0) AS table_size, o.created AS create_time, o.last_ddl_time AS update_time", + "COALESCE(t.blocks, 0) * 8192 AS table_size, o.created AS create_time, o.last_ddl_time AS update_time", "FROM all_tab_comments c", "JOIN all_tables t ON t.owner = c.owner AND t.table_name = c.table_name", "LEFT JOIN all_objects o ON o.owner = t.owner AND o.object_name = t.table_name AND o.object_type = 'TABLE'", - "LEFT JOIN all_segments s ON s.owner = t.owner AND s.segment_name = t.table_name AND s.segment_type = 'TABLE'", `WHERE c.owner = '${owner}'`, - "GROUP BY c.owner, c.table_name, c.comments, t.num_rows, o.created, o.last_ddl_time", "ORDER BY c.table_name", ].join("\n"); }