diff --git a/server/internal/db/dbm/dbi/column.go b/server/internal/db/dbm/dbi/column.go index d7745f1e..84ac768f 100644 --- a/server/internal/db/dbm/dbi/column.go +++ b/server/internal/db/dbm/dbi/column.go @@ -156,6 +156,12 @@ func SQLValueNumeric(val any) string { } return fmt.Sprintf("%v", val) } +func SQLValueBool(val any) string { + if val == nil { + return "false" + } + return fmt.Sprintf("%v", cast.ToBool(val)) +} func SQLValueString(val any) string { if val == nil { @@ -177,6 +183,12 @@ var ( SQLValue: SQLValueNumeric, } + DTBool = &DataType{ + Name: "bool", + Valuer: ValuerBit, + SQLValue: SQLValueBool, + } + DTByte = &DataType{ Name: "uint8", Valuer: ValuerByte, diff --git a/server/internal/db/dbm/dbi/metasql/dm_meta.sql b/server/internal/db/dbm/dbi/metasql/dm_meta.sql index e9dbd973..f79fdf78 100644 --- a/server/internal/db/dbm/dbi/metasql/dm_meta.sql +++ b/server/internal/db/dbm/dbi/metasql/dm_meta.sql @@ -1,8 +1,5 @@ --DM_DB_SCHEMAS 库schemas -SELECT - DISTINCT object_name as SCHEMA_NAME -FROM ALL_OBJECTS -WHERE OBJECT_TYPE = 'SCH' +SELECT NAME as SCHEMA_NAME FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCH' ORDER BY NAME ASC --------------------------------------- --DM_TABLE_INFO 表详细信息 SELECT a.object_name as TABLE_NAME, @@ -19,7 +16,7 @@ SELECT a.object_name as TABLE_NAME, WHERE OWNER = 'wxb' AND TABLE_NAME = a.object_name)) as INDEX_LENGTH, c.num_rows as TABLE_ROWS -FROM all_objects a +FROM SYSOBJECTS a LEFT JOIN ALL_TAB_COMMENTS b ON b.TABLE_TYPE = 'TABLE' AND a.object_name = b.TABLE_NAME AND b.owner = a.owner @@ -33,6 +30,18 @@ WHERE a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)) {{end}} ORDER BY a.object_name --------------------------------------- +--DM_TABLE_INFO_NAME_ONLY 表名列表 +SELECT TABS.NAME as TABLE_NAME FROM + (SELECT ID, PID FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCH' AND NAME = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))) SCHEMAS, + (SELECT ID, SCHID, NAME FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCHOBJ' AND SUBTYPE$ IN ('UTAB', 'STAB', 'VIEW', 'SYNOM') + AND ((SUBTYPE$ ='UTAB' AND CAST((INFO3 & 0x00FF & 0x003F) AS INT) not in (9, 27, 29, 25, 12, 7, 21, 23, 18, 5)) + OR SUBTYPE$ in ('STAB', 'VIEW', 'SYNOM'))) TABS +WHERE TABS.SCHID = SCHEMAS.ID + AND SF_CHECK_PRIV_OPT(UID(), CURRENT_USERTYPE(), TABS.ID, SCHEMAS.PID, -1, TABS.ID) = 1 +{{if .tableNames}} + and TABS.NAME in ({{.tableNames}}) +{{end}} +--------------------------------------- --DM_INDEX_INFO 表索引信息 select a.index_name as INDEX_NAME, a.index_type as INDEX_TYPE, @@ -81,4 +90,23 @@ from all_tab_columns a 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 \ No newline at end of file + a.column_id +--------------------------------------- +--DM_COLUMN_MA_EX 表列信息 +SELECT + TABS.TABLE_NAME TABLE_NAME, + COLS.NAME COLUMN_NAME, + case when COLS.NULLABLE$ = 'Y' then 'YES' when COLS.NULLABLE$ = 'N' then 'NO' else 'NO' end as NULLABLE, + COLS.TYPE$ DATA_TYPE, + COLS.LENGTH$ CHAR_MAX_LENGTH, + COLS.SCALE NUM_SCALE, + COLS.DEFVAL COLUMN_DEFAULT, + case when COLS.INFO2 & 0x01 = 0x01 then 1 else 0 end as IS_IDENTITY, + case when COLS.INFO2 & 0x01 = 0x01 then 1 else 0 end as IS_PRIMARY_KEY + +FROM + (SELECT ID FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCH' AND NAME = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))) SCHS, + (SELECT ID,SCHID,NAME TABLE_NAME FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCHOBJ' AND SUBTYPE$ IN ('UTAB', 'STAB', 'VIEW') AND NAME in (%s)) TABS, + SYS.SYSCOLUMNS COLS + +WHERE TABS.ID = COLS.ID AND SCHS.ID = TABS.SCHID; \ No newline at end of file diff --git a/server/internal/db/dbm/dbi/transfer.go b/server/internal/db/dbm/dbi/transfer.go index 3ef348e6..375d43c4 100644 --- a/server/internal/db/dbm/dbi/transfer.go +++ b/server/internal/db/dbm/dbi/transfer.go @@ -15,6 +15,7 @@ const ( CTLongtext CTBit // 1 bit + CTBool // 1 bit CTInt1 // 1字节 -128~127 CTInt2 // 2字节 -32768~32767 CTInt4 // 4字节 -2147483648~2147483647 diff --git a/server/internal/db/dbm/dm/metadata.go b/server/internal/db/dbm/dm/metadata.go index b98b0286..b37e2321 100644 --- a/server/internal/db/dbm/dm/metadata.go +++ b/server/internal/db/dbm/dm/metadata.go @@ -4,6 +4,7 @@ import ( "fmt" "mayfly-go/internal/db/dbm/dbi" "mayfly-go/pkg/errorx" + "mayfly-go/pkg/logx" "mayfly-go/pkg/utils/anyx" "mayfly-go/pkg/utils/collx" "mayfly-go/pkg/utils/stringx" @@ -13,11 +14,13 @@ import ( ) const ( - DM_META_FILE = "metasql/dm_meta.sql" - DM_DB_SCHEMAS = "DM_DB_SCHEMAS" - DM_TABLE_INFO_KEY = "DM_TABLE_INFO" - DM_INDEX_INFO_KEY = "DM_INDEX_INFO" - DM_COLUMN_MA_KEY = "DM_COLUMN_MA" + DM_META_FILE = "metasql/dm_meta.sql" + DM_DB_SCHEMAS = "DM_DB_SCHEMAS" + DM_TABLE_INFO_KEY = "DM_TABLE_INFO" + DM_TABLE_INFO_NAME_ONLY = "DM_TABLE_INFO_NAME_ONLY" // 当查询表详情失败时,可能是因为没有系统表查询权限,所以尝试只查表名 + DM_INDEX_INFO_KEY = "DM_INDEX_INFO" + DM_COLUMN_MA_KEY = "DM_COLUMN_MA" + DM_COLUMN_MA_EX_KEY = "DM_COLUMN_MA_EX" ) type DMMetadata struct { @@ -67,7 +70,12 @@ func (dd *DMMetadata) GetTables(tableNames ...string) ([]dbi.Table, error) { _, res, err = dd.dc.Query(sql) if err != nil { - return nil, err + // 尝试只查表名 + sql, err = stringx.TemplateParse(dbi.GetLocalSql(DM_META_FILE, DM_TABLE_INFO_NAME_ONLY), collx.M{"tableNames": names}) + _, res, err = dd.dc.Query(sql) + if err != nil { + return nil, err + } } tables := make([]dbi.Table, 0) @@ -93,7 +101,10 @@ func (dd *DMMetadata) GetColumns(tableNames ...string) ([]dbi.Column, error) { _, res, err := dd.dc.Query(fmt.Sprintf(dbi.GetLocalSql(DM_META_FILE, DM_COLUMN_MA_KEY), tableName)) if err != nil { - return nil, err + _, res, err = dd.dc.Query(fmt.Sprintf(dbi.GetLocalSql(DM_META_FILE, DM_COLUMN_MA_EX_KEY), tableName)) + if err != nil { + return nil, err + } } columns := make([]dbi.Column, 0) @@ -138,7 +149,8 @@ func (dd *DMMetadata) GetPrimaryKey(tablename string) (string, error) { func (dd *DMMetadata) GetTableIndex(tableName string) ([]dbi.Index, error) { _, res, err := dd.dc.Query(fmt.Sprintf(dbi.GetLocalSql(DM_META_FILE, DM_INDEX_INFO_KEY), tableName)) if err != nil { - return nil, err + logx.Error("查询达梦索引信息失败", err) + return nil, nil } indexs := make([]dbi.Index, 0) diff --git a/server/internal/db/dbm/postgres/column.go b/server/internal/db/dbm/postgres/column.go index 1bb029a3..ef2da54e 100644 --- a/server/internal/db/dbm/postgres/column.go +++ b/server/internal/db/dbm/postgres/column.go @@ -5,7 +5,7 @@ import ( ) var ( - Bool = dbi.NewDbDataType("bool", dbi.DTBit).WithCT(dbi.CTBit).WithFixColumn(dbi.ClearNumScale) + Bool = dbi.NewDbDataType("bool", dbi.DTBool).WithCT(dbi.CTBool).WithFixColumn(dbi.ClearNumScale) Int2 = dbi.NewDbDataType("int2", dbi.DTInt16).WithCT(dbi.CTInt2).WithFixColumn(dbi.ClearNumScale) Int4 = dbi.NewDbDataType("int4", dbi.DTInt32).WithCT(dbi.CTInt4).WithFixColumn(dbi.ClearNumScale) Int8 = dbi.NewDbDataType("int8", dbi.DTInt64).WithCT(dbi.CTInt8).WithFixColumn(dbi.ClearNumScale) diff --git a/server/internal/db/domain/entity/db_sql.go b/server/internal/db/domain/entity/db_sql.go index a90d4599..f61143db 100644 --- a/server/internal/db/domain/entity/db_sql.go +++ b/server/internal/db/domain/entity/db_sql.go @@ -11,6 +11,6 @@ type DbSql struct { DbId uint64 `json:"dbId" gorm:"not null;"` Db string `json:"db" gorm:"size:100;not null;"` Type int `json:"type" gorm:"not null;"` // 类型 - Sql string `json:"sql" gorm:"type:text;comment:sql语句"` + Sql string `json:"sql" gorm:"type:longtext;comment:sql语句"` Name string `json:"name" gorm:"size:255;not null;comment:sql模板名"` } diff --git a/server/internal/sys/domain/entity/resource.go b/server/internal/sys/domain/entity/resource.go index b7466bda..6a3643d3 100644 --- a/server/internal/sys/domain/entity/resource.go +++ b/server/internal/sys/domain/entity/resource.go @@ -5,9 +5,9 @@ import "mayfly-go/pkg/model" type Resource struct { model.Model Pid int64 `json:"pid" gorm:"not null;comment:父节点id;"` - UiPath string `json:"ui_path" gorm:"size:300;not null;comment:唯一标识路径;"` // 唯一标识路径 - Type int8 `json:"type" gorm:"not null;comment:1:菜单路由;2:资源(按钮等);"` // 1:菜单路由;2:资源(按钮等) - Status int8 `json:"status" gorm:"not null;comment:状态;1:可用,-1:禁用;"` // 1:可用;-1:不可用 + UiPath string `json:"ui_path" gorm:"size:300;comment:唯一标识路径;"` // 唯一标识路径 + Type int8 `json:"type" gorm:"not null;comment:1:菜单路由;2:资源(按钮等);"` // 1:菜单路由;2:资源(按钮等) + Status int8 `json:"status" gorm:"not null;comment:状态;1:可用,-1:禁用;"` // 1:可用;-1:不可用 Code string `json:"code" gorm:"size:300;comment:菜单路由为path,其他为唯一标识;"` Name string `json:"name" gorm:"size:255;not null;"` Weight int `json:"weight"` diff --git a/server/internal/sys/domain/entity/syslog.go b/server/internal/sys/domain/entity/syslog.go index e055fceb..6faa12b0 100644 --- a/server/internal/sys/domain/entity/syslog.go +++ b/server/internal/sys/domain/entity/syslog.go @@ -10,9 +10,9 @@ type SysLog struct { Type int8 `json:"type" gorm:"not null;"` Description string `json:"description" gorm:"size:255;"` - ReqParam string `json:"reqParam" gorm:"size:2000"` // 请求参数 - Resp string `json:"resp" gorm:"type:text;"` // 响应结构 - Extra string `json:"extra" gorm:"type:text;"` // 日志额外信息 + ReqParam string `json:"reqParam" gorm:"type:text;"` // 请求参数 + Resp string `json:"resp" gorm:"type:text;"` // 响应结构 + Extra string `json:"extra" gorm:"type:text;"` // 日志额外信息 } func (a *SysLog) TableName() string { diff --git a/server/internal/tag/domain/entity/tag_tree.go b/server/internal/tag/domain/entity/tag_tree.go index 80c4863a..0bc53b57 100644 --- a/server/internal/tag/domain/entity/tag_tree.go +++ b/server/internal/tag/domain/entity/tag_tree.go @@ -16,7 +16,7 @@ type TagTree struct { Type TagType `json:"type" gorm:"not null;default:-1;comment:类型: -1.普通标签; 1机器 2db 3redis 4mongo"` // 类型: -1.普通标签; 其他值则为对应的资源类型 Code string `json:"code" gorm:"not null;size:50;index:idx_tag_code;comment:标识符"` // 标识编码, 若类型不为-1,则为对应资源编码 - CodePath string `json:"codePath" gorm:"not null;size:800;index:idx_tag_code_path,length:255;comment:标识符路径"` // 标识路径,tag1/tag2/tagType1|tagCode/tagType2|yyycode/,非普通标签类型段含有标签类型 + CodePath string `json:"codePath" gorm:"not null;size:700;index:idx_tag_code_path,length:255;comment:标识符路径"` // 标识路径,tag1/tag2/tagType1|tagCode/tagType2|yyycode/,非普通标签类型段含有标签类型 Name string `json:"name" gorm:"size:50;comment:名称"` // 名称 Remark string `json:"remark" gorm:"size:255;"` // 备注说明 } diff --git a/server/resources/script/sql/mayfly-go.sql b/server/resources/script/sql/mayfly-go.sql index 8c0993ef..6a17184d 100644 --- a/server/resources/script/sql/mayfly-go.sql +++ b/server/resources/script/sql/mayfly-go.sql @@ -682,7 +682,7 @@ CREATE TABLE `t_sys_log` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `type` tinyint(4) NOT NULL COMMENT '类型', `description` varchar(255) DEFAULT NULL COMMENT '描述', - `req_param` varchar(2000) DEFAULT NULL COMMENT '请求信息', + `req_param` text DEFAULT NULL COMMENT '请求信息', `resp` text DEFAULT NULL COMMENT '响应信息', `creator` varchar(36) NOT NULL COMMENT '调用者', `creator_id` bigint(20) NOT NULL COMMENT '调用者id',