hotgo/server/utility/db/db.go
2024-05-10 09:35:08 +08:00

55 lines
1.4 KiB
Go

package db
import (
"context"
"fmt"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
)
// 获取数据库表字段及注释
// usage:
//
// fields, err := db.GetFieldsWithComment(ctx, in.Table, in.Name)
// if err != nil {
// return
// }
// for _, v := range fields {}
func GetFieldsWithComment(ctx context.Context, tableName, dbTag string) (fields map[string]*gdb.TableField, err error) {
db := g.DB(dbTag)
fields, err = db.TableFields(ctx, tableName) // 使用 goframe 框架本身已完美支持 mysql 获取表字段及注释
dbConf := db.GetConfig()
switch dbConf.Type {
case "sqlite":
fields, err = fixSqliteFieldsComment(ctx, tableName, db, fields)
}
return
}
type TableComment struct {
Name string `json:"name"`
Comment string `json:"comment"`
}
// 获取数据库表字段及注释
func GetTablesWithComment(ctx context.Context, dbTag string) (tables []*TableComment, err error) {
db := g.DB(dbTag)
dbConf := db.GetConfig()
switch dbConf.Type {
case "mysql":
sql := "SELECT TABLE_NAME as name, TABLE_COMMENT as comment FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = '%s'"
if err = db.Ctx(ctx).Raw(fmt.Sprintf(sql, dbConf.Name)).Scan(&tables); err != nil {
return
}
case "sqlite":
var tableNames []string
tableNames, err = db.Tables(ctx)
if err != nil {
return
}
tables, err = transSqliteTablesComment(ctx, tableNames, db)
}
return
}