mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	Merge branch 'dev' of https://gitee.com/objs/mayfly-go into dev
This commit is contained in:
		@@ -43,14 +43,14 @@ type DMDialect struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (pd *DMDialect) GetDbNames() ([]string, error) {
 | 
			
		||||
	_, res, err := pd.dc.Query("SELECT name AS dbname FROM v$database")
 | 
			
		||||
	_, res, err := pd.dc.Query("SELECT name AS DBNAME FROM v$database")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	databases := make([]string, 0)
 | 
			
		||||
	for _, re := range res {
 | 
			
		||||
		databases = append(databases, anyx.ConvString(re["dbname"]))
 | 
			
		||||
		databases = append(databases, anyx.ConvString(re["DBNAME"]))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return databases, nil
 | 
			
		||||
@@ -66,11 +66,11 @@ func (pd *DMDialect) GetTables() ([]Table, error) {
 | 
			
		||||
	tables := make([]Table, 0)
 | 
			
		||||
	for _, re := range res {
 | 
			
		||||
		tables = append(tables, Table{
 | 
			
		||||
			TableName:    re["tableName"].(string),
 | 
			
		||||
			TableComment: anyx.ConvString(re["tableComment"]),
 | 
			
		||||
			CreateTime:   anyx.ConvString(re["createTime"]),
 | 
			
		||||
			TableName:    re["TABLE_NAME"].(string),
 | 
			
		||||
			TableComment: anyx.ConvString(re["TABLE_COMMENT"]),
 | 
			
		||||
			CreateTime:   anyx.ConvString(re["CREATE_TIME"]),
 | 
			
		||||
			TableRows:    anyx.ConvInt(re["tableRows"]),
 | 
			
		||||
			DataLength:   anyx.ConvInt64(re["dataLength"]),
 | 
			
		||||
			DataLength:   anyx.ConvInt64(re["DATA_LENGTH"]),
 | 
			
		||||
			IndexLength:  anyx.ConvInt64(re["indexLength"]),
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
@@ -95,14 +95,14 @@ func (pd *DMDialect) GetColumns(tableNames ...string) ([]Column, error) {
 | 
			
		||||
	columns := make([]Column, 0)
 | 
			
		||||
	for _, re := range res {
 | 
			
		||||
		columns = append(columns, Column{
 | 
			
		||||
			TableName:     re["tableName"].(string),
 | 
			
		||||
			ColumnName:    re["columnName"].(string),
 | 
			
		||||
			ColumnType:    anyx.ConvString(re["columnType"]),
 | 
			
		||||
			ColumnComment: anyx.ConvString(re["columnComment"]),
 | 
			
		||||
			Nullable:      anyx.ConvString(re["nullable"]),
 | 
			
		||||
			ColumnKey:     anyx.ConvString(re["columnKey"]),
 | 
			
		||||
			ColumnDefault: anyx.ConvString(re["columnDefault"]),
 | 
			
		||||
			NumScale:      anyx.ConvString(re["numScale"]),
 | 
			
		||||
			TableName:     re["TABLE_NAME"].(string),
 | 
			
		||||
			ColumnName:    re["COLUMN_NAME"].(string),
 | 
			
		||||
			ColumnType:    anyx.ConvString(re["COLUMN_TYPE"]),
 | 
			
		||||
			ColumnComment: anyx.ConvString(re["COLUMN_COMMENT"]),
 | 
			
		||||
			Nullable:      anyx.ConvString(re["NULLABLE"]),
 | 
			
		||||
			ColumnKey:     anyx.ConvString(re["COLUMN_KEY"]),
 | 
			
		||||
			ColumnDefault: anyx.ConvString(re["COLUMN_DEFAULT"]),
 | 
			
		||||
			NumScale:      anyx.ConvString(re["NUM_SCALE"]),
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	return columns, nil
 | 
			
		||||
@@ -135,12 +135,12 @@ func (pd *DMDialect) GetTableIndex(tableName string) ([]Index, error) {
 | 
			
		||||
	indexs := make([]Index, 0)
 | 
			
		||||
	for _, re := range res {
 | 
			
		||||
		indexs = append(indexs, Index{
 | 
			
		||||
			IndexName:    re["indexName"].(string),
 | 
			
		||||
			ColumnName:   anyx.ConvString(re["columnName"]),
 | 
			
		||||
			IndexType:    anyx.ConvString(re["indexType"]),
 | 
			
		||||
			IndexComment: anyx.ConvString(re["indexComment"]),
 | 
			
		||||
			NonUnique:    anyx.ConvInt(re["nonUnique"]),
 | 
			
		||||
			SeqInIndex:   anyx.ConvInt(re["seqInIndex"]),
 | 
			
		||||
			IndexName:    re["INDEX_NAME"].(string),
 | 
			
		||||
			ColumnName:   anyx.ConvString(re["COLUMN_NAME"]),
 | 
			
		||||
			IndexType:    anyx.ConvString(re["INDEX_TYPE"]),
 | 
			
		||||
			IndexComment: anyx.ConvString(re["INDEX_COMMENT"]),
 | 
			
		||||
			NonUnique:    anyx.ConvInt(re["NON_UNIQUE"]),
 | 
			
		||||
			SeqInIndex:   anyx.ConvInt(re["SEQ_IN_INDEX"]),
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	// 把查询结果以索引名分组,索引字段以逗号连接
 | 
			
		||||
@@ -169,8 +169,38 @@ func (pd *DMDialect) GetCreateTableDdl(tableName string) (string, error) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	// 建表ddl
 | 
			
		||||
	var builder strings.Builder
 | 
			
		||||
	for _, re := range res {
 | 
			
		||||
		builder.WriteString(re["COLUMN_VALUE"].(string))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return res[0]["COLUMN_VALUE"].(string), nil
 | 
			
		||||
	// 表注释
 | 
			
		||||
	_, res, err = pd.dc.Query(fmt.Sprintf("select COMMENTS from USER_TAB_COMMENTS where TABLE_TYPE='TABLE' and TABLE_NAME = '%s'", 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)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 字段注释
 | 
			
		||||
	fieldSql := fmt.Sprintf(`
 | 
			
		||||
		SELECT 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 {
 | 
			
		||||
		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)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return builder.String(), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (pd *DMDialect) GetTableRecord(tableName string, pageNum, pageSize int) ([]string, []map[string]any, error) {
 | 
			
		||||
@@ -190,7 +220,7 @@ func (pd *DMDialect) GetSchemas() ([]string, error) {
 | 
			
		||||
	}
 | 
			
		||||
	schemaNames := make([]string, 0)
 | 
			
		||||
	for _, re := range res {
 | 
			
		||||
		schemaNames = append(schemaNames, anyx.ConvString(re["schemaName"]))
 | 
			
		||||
		schemaNames = append(schemaNames, anyx.ConvString(re["SCHEMA_NAME"]))
 | 
			
		||||
	}
 | 
			
		||||
	return schemaNames, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +1,31 @@
 | 
			
		||||
--DM_DB_SCHEMAS 库schemas
 | 
			
		||||
select
 | 
			
		||||
    distinct owner as schemaName
 | 
			
		||||
    distinct owner as SCHEMA_NAME
 | 
			
		||||
from dba_objects
 | 
			
		||||
---------------------------------------
 | 
			
		||||
--DM_TABLE_INFO 表详细信息
 | 
			
		||||
select
 | 
			
		||||
    a.object_name as tableName,
 | 
			
		||||
    b.comments as tableComment,
 | 
			
		||||
    a.created as createTime,
 | 
			
		||||
    TABLE_USED_SPACE((SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)), a.object_name)*page() as dataLength
 | 
			
		||||
    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
 | 
			
		||||
         JOIN USER_TAB_COMMENTS b ON b.TABLE_TYPE='TABLE' and a.object_name = b.TABLE_NAME
 | 
			
		||||
         LEFT JOIN USER_TAB_COMMENTS b ON b.TABLE_TYPE='TABLE' and a.object_name = b.TABLE_NAME
 | 
			
		||||
where a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
  and a.object_type = 'TABLE'
 | 
			
		||||
  and a.object_type = 'TABLE' and a.status = 'VALID'
 | 
			
		||||
---------------------------------------
 | 
			
		||||
--DM_INDEX_INFO 表索引信息
 | 
			
		||||
select
 | 
			
		||||
    a.index_name as indexName,
 | 
			
		||||
    a.index_type as indexType,
 | 
			
		||||
    case when a.uniqueness = 'UNIQUE' then 1 else 0 end as nonUnique,
 | 
			
		||||
    indexdef(b.object_id,1) as indexDef,
 | 
			
		||||
    c.column_name as columnName,
 | 
			
		||||
    c.column_position as seqInIndex,
 | 
			
		||||
    '无' as indexComment
 | 
			
		||||
    a.index_name as INDEX_NAME,
 | 
			
		||||
    a.index_type as INDEX_TYPE,
 | 
			
		||||
    case when a.uniqueness = 'UNIQUE' then 1 else 0 end as NON_UNIQUE,
 | 
			
		||||
    indexdef(b.object_id,1) as INDEX_DEF,
 | 
			
		||||
    c.column_name as COLUMN_NAME,
 | 
			
		||||
    c.column_position as SEQ_IN_INDEX,
 | 
			
		||||
    '无' as INDEX_COMMENT
 | 
			
		||||
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'
 | 
			
		||||
         JOIN DBA_IND_COLUMNS c on a.owner = c.table_owner and a.index_name = c.index_name and a.TABLE_NAME = c.table_name
 | 
			
		||||
         LEFT JOIN dba_objects b on a.owner = b.owner and b.object_name = a.index_name and b.object_type = 'INDEX'
 | 
			
		||||
         LEFT JOIN DBA_IND_COLUMNS c on a.owner = c.table_owner and a.index_name = c.index_name and a.TABLE_NAME = c.table_name
 | 
			
		||||
 | 
			
		||||
WHERE a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
  and  a.TABLE_NAME = '%s'
 | 
			
		||||
@@ -33,27 +33,34 @@ WHERE a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
order by  a.TABLE_NAME, a.index_name, c.column_position asc
 | 
			
		||||
---------------------------------------
 | 
			
		||||
--DM_COLUMN_MA 表列信息
 | 
			
		||||
select a.table_name                                                                        as tableName,
 | 
			
		||||
       a.column_name                                                                       as columnName,
 | 
			
		||||
       case when a.NULLABLE = 'Y' then 'YES' when a.NULLABLE = 'N' then 'NO' else 'NO' end as nullable,
 | 
			
		||||
select a.table_name                                                                        as TABLE_NAME,
 | 
			
		||||
       a.column_name                                                                       as COLUMN_NAME,
 | 
			
		||||
       case when a.NULLABLE = 'Y' then 'YES' when a.NULLABLE = 'N' then 'NO' else 'NO' end as NULLABLE,
 | 
			
		||||
       case
 | 
			
		||||
           when a.char_col_decl_length > 0 then concat(a.data_type, '(', a.char_col_decl_length, ')')
 | 
			
		||||
           when a.data_precision > 0 and a.data_scale > 0
 | 
			
		||||
               then concat(a.data_type, '(', a.data_precision, ',', a.data_scale, ')')
 | 
			
		||||
           else a.data_type end
 | 
			
		||||
                                                                                           as columnType,
 | 
			
		||||
       b.comments                                                                          as columnComment,
 | 
			
		||||
       a.data_default                                                                      as columnDefault,
 | 
			
		||||
       a.data_scale                                                                        as numScale,
 | 
			
		||||
       case when t.COL_NAME = a.column_name then 'PRI' else '' end                         as columnKey
 | 
			
		||||
                                                                                           as COLUMN_TYPE,
 | 
			
		||||
       b.comments                                                                          as COLUMN_COMMENT,
 | 
			
		||||
       a.data_default                                                                      as COLUMN_DEFAULT,
 | 
			
		||||
       a.data_scale                                                                        as NUM_SCALE,
 | 
			
		||||
       case when t.COL_NAME = a.column_name then 'PRI' else '' end                         as COLUMN_KEY
 | 
			
		||||
from dba_tab_columns a
 | 
			
		||||
         join user_col_comments b on b.owner = a.owner and b.table_name = a.table_name and a.column_name = b.column_name
 | 
			
		||||
         join (select b.owner, b.table_name, a.name COL_NAME
 | 
			
		||||
               from SYS.SYSCOLUMNS a,
 | 
			
		||||
                    dba_tables b,
 | 
			
		||||
                    sys.sysobjects c
 | 
			
		||||
               where a.INFO2 & 0x01 = 0x01
 | 
			
		||||
   and a.id=c.id and c.name = b.table_name) t on t.owner = a.owner and t.table_name = a.table_name
 | 
			
		||||
         left join user_col_comments b
 | 
			
		||||
                   on b.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)) and b.table_name = a.table_name and
 | 
			
		||||
                      a.column_name = b.column_name
 | 
			
		||||
         left join (select b.owner, b.table_name, a.name COL_NAME
 | 
			
		||||
                    from SYS.SYSCOLUMNS a,
 | 
			
		||||
                         dba_tables b,
 | 
			
		||||
                         sys.sysobjects c,
 | 
			
		||||
                         sys.sysobjects d
 | 
			
		||||
                    where a.INFO2 & 0x01 = 0x01
 | 
			
		||||
   and a.id=c.id and d.type$ = 'SCH' and d.id = c.schid
 | 
			
		||||
   and b.owner =  (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
   and c.schid = ( select id from sys.sysobjects where type$ = 'SCH' and name = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)))
 | 
			
		||||
   and c.name = b.table_name) t
 | 
			
		||||
                   on t.table_name = a.table_name
 | 
			
		||||
where a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
  and a.table_name in (%s)
 | 
			
		||||
order by a.table_name, a.column_id
 | 
			
		||||
		Reference in New Issue
	
	Block a user