支持保存顺序
This commit is contained in:
parent
96e1a96f2e
commit
29c05b0af7
55
dao/dbm.go
55
dao/dbm.go
|
|
@ -155,3 +155,58 @@ func FindAllSQLRunHistory() ([]proto.SQLRunHistory, error) {
|
||||||
}
|
}
|
||||||
return histories, nil
|
return histories, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RunSQLWithOrder(sql string, db_ *gorm.DB) (result proto.SQLResult, err error) {
|
||||||
|
var db2 *gorm.DB
|
||||||
|
// 保留 Debug 模式
|
||||||
|
if proto.Config.SERVER_SQL_LOG {
|
||||||
|
db2 = db_.Debug()
|
||||||
|
} else {
|
||||||
|
db2 = db_
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行 SQL 并获取底层 Rows 对象
|
||||||
|
rows, err := db2.Raw(sql).Rows()
|
||||||
|
if err != nil {
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
defer rows.Close() // 确保关闭 Rows
|
||||||
|
|
||||||
|
// 获取列名顺序(关键:这里的顺序与 SQL 查询的列顺序一致)
|
||||||
|
columns, err := rows.Columns()
|
||||||
|
if err != nil {
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
result.Columns = columns // 保存列名顺序
|
||||||
|
|
||||||
|
// 遍历每行数据
|
||||||
|
for rows.Next() {
|
||||||
|
// 准备接收每行数据的容器(按列顺序)
|
||||||
|
values := make([]interface{}, len(columns))
|
||||||
|
valuePtrs := make([]interface{}, len(columns)) // 用于 Scan 的指针切片
|
||||||
|
|
||||||
|
// 为每个列绑定指针(Scan 要求传入指针)
|
||||||
|
for i := range values {
|
||||||
|
valuePtrs[i] = &values[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 扫描当前行数据到指针切片
|
||||||
|
if err2 := rows.Scan(valuePtrs...); err2 != nil {
|
||||||
|
return result, err2
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将当前行数据存入 map(便于按列名访问)
|
||||||
|
rowMap := make(map[string]interface{})
|
||||||
|
for i, col := range columns {
|
||||||
|
rowMap[col] = values[i]
|
||||||
|
}
|
||||||
|
result.Rows = append(result.Rows, rowMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查遍历过程中是否有错误
|
||||||
|
if err = rows.Err(); err != nil {
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,3 +67,9 @@ type GetSQLRunHistoryReq struct {
|
||||||
DB_ID uint `json:"db_id" form:"db_id"` // 数据库ID
|
DB_ID uint `json:"db_id" form:"db_id"` // 数据库ID
|
||||||
GET_TYPE int `json:"get_type" form:"get_type"` // 获取类型: 0获取自己,1为获取全部(管理员权限)
|
GET_TYPE int `json:"get_type" form:"get_type"` // 获取类型: 0获取自己,1为获取全部(管理员权限)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SQLResult 包含查询结果的列名顺序和对应数据
|
||||||
|
type SQLResult struct {
|
||||||
|
Columns []string // 列名顺序(与 SQL 查询的列顺序一致)
|
||||||
|
Rows []map[string]interface{} // 每行数据(map 便于按列名访问)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue