mirror of
https://github.com/xxjwxc/public.git
synced 2025-11-01 03:32:34 +08:00
140 lines
3.4 KiB
Go
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)
|
|
}
|
|
|
|
//
|