Files
public/mysqldb/tabtools.go
2023-10-07 18:47:04 +08:00

140 lines
3.4 KiB
Go

package mysqldb
import (
"fmt"
)
// TabColumnInfo 表信息
type TabColumnInfo struct {
ColumnName string
ColumnType string // 跟数据库一致
Len string
NotNull bool
}
type TablesModel struct {
ID int `gorm:"primaryKey;column:id" json:"-"` // 主键id
}
type TablesTools struct {
tabName string
orm *MySqlDB
}
// Tables
func NewTabTools(orm *MySqlDB, tabName string) (*TablesTools, error) {
return &TablesTools{
orm: orm,
tabName: tabName,
}, nil
}
// CreateTable 创建表
func (t *TablesTools) CreateTable(columns []*TabColumnInfo) error {
err := t.orm.Table(t.tabName).Set("gorm:table_options", "ENGINE=InnoDB").Migrator().CreateTable(&TablesModel{})
if err != nil {
return err
}
for _, v := range columns {
notnul := ""
if v.NotNull {
notnul = "NOT NULL"
}
_len := v.Len
if len(v.Len) > 0 {
_len = fmt.Sprintf("(%v)", v.Len)
}
sql := fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v%v %v ;", t.tabName, v.ColumnName, v.ColumnType, _len, notnul)
err = t.orm.Exec(sql).Error
if err != nil {
return err
}
}
return err
}
// HasTable 表是否存在
func (t *TablesTools) HasTable() bool {
return t.orm.Migrator().HasTable(t.tabName)
}
// DropTable 如果存在表则删除(删除时会忽略、删除外键约束)
func (t *TablesTools) DropTable() error {
return t.orm.Migrator().DropTable(t.tabName)
}
// TruncateTable 截断表
func (t *TablesTools) TruncateTable() error {
return t.orm.Exec(fmt.Sprintf("TRUNCATE TABLE %v;", t.tabName)).Error
}
// GetTables 获取所有表名
func (t *TablesTools) GetTables() (tableList []string, err error) {
return t.orm.Migrator().GetTables()
}
// RenameTable 重命名表
func (t *TablesTools) RenameTable(newTabName string) error {
return t.orm.Migrator().RenameTable(t.tabName, newTabName)
}
// AddColumn 添加列元素
func (t *TablesTools) AddColumn(column *TabColumnInfo) error {
notnul := ""
if column.NotNull {
notnul = "NOT NULL"
}
_len := column.Len
if len(column.Len) > 0 {
_len = fmt.Sprintf("(%v)", column.Len)
}
sql := fmt.Sprintf("ALTER TABLE `%v` ADD COLUMN `%v` %v%v %v ;", t.tabName, column.ColumnName, column.ColumnType, _len, notnul)
err := t.orm.Exec(sql).Error
if err != nil {
return err
}
return nil
}
// HasColumn 是否有列
func (t *TablesTools) HasColumn(column string) bool {
return t.orm.Table(t.tabName).Migrator().HasColumn(&TablesModel{}, column)
}
// DropColumn 删除列
func (t *TablesTools) DropColumn(column string) error {
return t.orm.Table(t.tabName).Migrator().DropColumn(&TablesModel{}, column)
}
// RenameColumn 字段重命名
func (t *TablesTools) RenameColumn(oldColumn, newColumn string) error {
return t.orm.Table(t.tabName).Migrator().RenameColumn(&TablesModel{}, oldColumn, newColumn)
}
// CreateIndex Indexes
func (t *TablesTools) CreateIndex(column string) error {
return t.orm.Table(t.tabName).Migrator().CreateIndex(&TablesModel{}, column)
}
// DropIndex Indexes
func (t *TablesTools) DropIndex(column string) error {
return t.orm.Table(t.tabName).Migrator().DropIndex(&TablesModel{}, column)
}
// HasIndex Indexes
func (t *TablesTools) HasIndex(column string) bool {
return t.orm.Table(t.tabName).Migrator().HasIndex(&TablesModel{}, column)
}
// RenameIndex Indexes
func (t *TablesTools) RenameIndex(oldColumn, newColumn string) error {
return t.orm.Table(t.tabName).Migrator().RenameIndex(&TablesModel{}, oldColumn, newColumn)
}
//