🐛 fix(metadata): 修复 Oracle 字段元数据显示缺失

- Oracle 元数据查询为字段名、类型、默认值、注释等列补齐稳定别名

- 新增字段定义归一化工具,兼容 name/Name/COLUMN_NAME 等返回形态

- 修复 DataGrid、DataViewer、QueryEditor、TableDesigner 对字段元数据的读取

- 补充 Oracle 字段注释、表头元数据和主键定位回归测试
This commit is contained in:
Syngnat
2026-06-01 09:32:18 +08:00
parent 63db9fecb3
commit 5ffaa4361e
10 changed files with 137 additions and 21 deletions

View File

@@ -104,6 +104,11 @@ func TestOracleGetColumnsIncludesColumnComments(t *testing.T) {
if len(queries) == 0 || !strings.Contains(queries[0], "all_col_comments") {
t.Fatalf("expected GetColumns to join all_col_comments, queries=%v", queries)
}
for _, want := range []string{`AS "COLUMN_NAME"`, `AS "DATA_TYPE"`, `AS "COMMENT"`} {
if !strings.Contains(queries[0], want) {
t.Fatalf("expected GetColumns query to contain stable alias %q, got %s", want, queries[0])
}
}
}
func TestOracleGetCreateStatementAppendsTableAndColumnComments(t *testing.T) {

View File

@@ -325,9 +325,9 @@ func (o *OracleDB) GetCreateStatement(dbName, tableName string) (string, error)
func (o *OracleDB) GetColumns(dbName, tableName string) ([]connection.ColumnDefinition, error) {
metadataTableName := escapeOracleMetadataLiteral(tableName)
metadataSchemaName := escapeOracleMetadataLiteral(dbName)
query := fmt.Sprintf(`SELECT c.column_name, c.data_type, c.nullable, c.data_default,
CASE WHEN pk.column_name IS NOT NULL THEN 'PRI' ELSE '' END AS column_key,
cc.comments AS comment
query := fmt.Sprintf(`SELECT c.column_name AS "COLUMN_NAME", c.data_type AS "DATA_TYPE", c.nullable AS "NULLABLE", c.data_default AS "DATA_DEFAULT",
CASE WHEN pk.column_name IS NOT NULL THEN 'PRI' ELSE '' END AS "COLUMN_KEY",
cc.comments AS "COMMENT"
FROM all_tab_columns c
LEFT JOIN all_col_comments cc
ON cc.owner = c.owner AND cc.table_name = c.table_name AND cc.column_name = c.column_name
@@ -342,9 +342,9 @@ func (o *OracleDB) GetColumns(dbName, tableName string) ([]connection.ColumnDefi
ORDER BY c.column_id`, metadataSchemaName, metadataTableName)
if dbName == "" {
query = fmt.Sprintf(`SELECT c.column_name, c.data_type, c.nullable, c.data_default,
CASE WHEN pk.column_name IS NOT NULL THEN 'PRI' ELSE '' END AS column_key,
cc.comments AS comment
query = fmt.Sprintf(`SELECT c.column_name AS "COLUMN_NAME", c.data_type AS "DATA_TYPE", c.nullable AS "NULLABLE", c.data_default AS "DATA_DEFAULT",
CASE WHEN pk.column_name IS NOT NULL THEN 'PRI' ELSE '' END AS "COLUMN_KEY",
cc.comments AS "COMMENT"
FROM user_tab_columns c
LEFT JOIN user_col_comments cc
ON cc.table_name = c.table_name AND cc.column_name = c.column_name