!73 fix: 达梦ddl相关

Merge pull request !73 from zongyangleo/dev_1214
This commit is contained in:
Coder慌
2023-12-14 01:30:10 +00:00
committed by Gitee
2 changed files with 62 additions and 17 deletions

View File

@@ -58,6 +58,11 @@ func (pd *DMDialect) GetDbNames() ([]string, error) {
// 获取表基础元信息, 如表名等
func (pd *DMDialect) GetTables() ([]Table, error) {
// 首先执行更新统计信息sql 这个统计信息在数据量比较大的时候就比较耗时,所以最好定时执行
// _, _, err := pd.dc.Query("dbms_stats.GATHER_SCHEMA_stats(SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))")
// 查询表信息
_, res, err := pd.dc.Query(GetLocalSql(DM_META_FILE, DM_TABLE_INFO_KEY))
if err != nil {
return nil, err
@@ -69,9 +74,9 @@ func (pd *DMDialect) GetTables() ([]Table, error) {
TableName: re["TABLE_NAME"].(string),
TableComment: anyx.ConvString(re["TABLE_COMMENT"]),
CreateTime: anyx.ConvString(re["CREATE_TIME"]),
TableRows: anyx.ConvInt(re["tableRows"]),
TableRows: anyx.ConvInt(re["TABLE_ROWS"]),
DataLength: anyx.ConvInt64(re["DATA_LENGTH"]),
IndexLength: anyx.ConvInt64(re["indexLength"]),
IndexLength: anyx.ConvInt64(re["INDEX_LENGTH"]),
})
}
return tables, nil
@@ -176,30 +181,54 @@ func (pd *DMDialect) GetCreateTableDdl(tableName string) (string, error) {
}
// 表注释
_, res, err = pd.dc.Query(fmt.Sprintf("select COMMENTS from USER_TAB_COMMENTS where TABLE_TYPE='TABLE' and TABLE_NAME = '%s'", tableName))
_, res, err = pd.dc.Query(fmt.Sprintf(`
select OWNER, COMMENTS from DBA_TAB_COMMENTS where TABLE_TYPE='TABLE' and TABLE_NAME = '%s'
and owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
`, tableName))
if res != nil {
for _, re := range res {
// COMMENT ON TABLE "SYS_MENU" IS '菜单表';
tableComment := fmt.Sprintf("\n\nCOMMENT ON TABLE \"%s\" IS '%s';\n", tableName, re["COMMENTS"].(string))
builder.WriteString(tableComment)
if re["COMMENTS"] != nil {
tableComment := fmt.Sprintf("\n\nCOMMENT ON TABLE \"%s\".\"%s\" IS '%s';", re["OWNER"].(string), tableName, re["COMMENTS"].(string))
builder.WriteString(tableComment)
}
}
}
// 字段注释
fieldSql := fmt.Sprintf(`
SELECT COLUMN_NAME, COMMENTS
SELECT OWNER, COLUMN_NAME, COMMENTS
FROM USER_COL_COMMENTS
WHERE OWNER = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
AND TABLE_NAME = '%s'
`, tableName)
_, res, err = pd.dc.Query(fieldSql)
if res != nil {
builder.WriteString("\n")
for _, re := range res {
// COMMENT ON COLUMN "SYS_MENU"."BIZ_CODE" IS '业务编码应用编码1';
fieldComment := fmt.Sprintf("\nCOMMENT ON COLUMN \"%s\".\"%s\" IS '%s';", tableName, re["COLUMN_NAME"].(string), re["COMMENTS"].(string))
builder.WriteString(fieldComment)
if re["COMMENTS"] != nil {
fieldComment := fmt.Sprintf("\nCOMMENT ON COLUMN \"%s\".\"%s\".\"%s\" IS '%s';", re["OWNER"].(string), tableName, re["COLUMN_NAME"].(string), re["COMMENTS"].(string))
builder.WriteString(fieldComment)
}
}
}
// 索引信息
indexSql := fmt.Sprintf(`
select indexdef(b.object_id,1) as INDEX_DEF from DBA_INDEXES a
join dba_objects b on a.owner = b.owner and b.object_name = a.index_name and b.object_type = 'INDEX'
where a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
and a.table_name = '%s'
and indexdef(b.object_id,1) != '禁止查看系统定义的索引信息'
`, tableName)
_, res, err = pd.dc.Query(indexSql)
if res != nil {
for _, re := range res {
builder.WriteString("\n\n" + re["INDEX_DEF"].(string))
}
}
return builder.String(), nil
}

View File

@@ -4,15 +4,31 @@ select
from dba_objects
---------------------------------------
--DM_TABLE_INFO 表详细信息
select
a.object_name as TABLE_NAME,
b.comments as TABLE_COMMENT,
a.created as CREATE_TIME,
TABLE_USED_SPACE((SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)), a.object_name)*page() as DATA_LENGTH
from dba_objects a
LEFT JOIN DBA_TAB_COMMENTS b ON b.TABLE_TYPE='TABLE' and a.object_name = b.TABLE_NAME and b.owner = a.owner
where a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
and a.object_type = 'TABLE' and a.status = 'VALID'
SELECT a.object_name as TABLE_NAME,
b.comments as TABLE_COMMENT,
a.created as CREATE_TIME,
TABLE_USED_SPACE(
(SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)),
a.object_name
) * page() as DATA_LENGTH,
(SELECT sum(INDEX_USED_PAGES(id))* page()
FROM SYSOBJECTS
WHERE NAME IN (SELECT INDEX_NAME
FROM DBA_INDEXES
WHERE OWNER = 'wxb'
AND TABLE_NAME = a.object_name)) as INDEX_LENGTH,
c.num_rows as TABLE_ROWS
FROM dba_objects a
LEFT JOIN DBA_TAB_COMMENTS b ON b.TABLE_TYPE = 'TABLE'
AND a.object_name = b.TABLE_NAME
AND b.owner = a.owner
LEFT JOIN (SELECT a.owner, a.table_name, a.num_rows FROM dba_tables a) c
ON c.owner = a.owner AND c.table_name = a.object_name
WHERE a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
AND a.object_type = 'TABLE'
AND a.status = 'VALID'
---------------------------------------
--DM_INDEX_INFO 表索引信息
select