97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
package gorm
|
||
|
||
import (
|
||
"gorm.io/gorm/clause"
|
||
"gorm.io/gorm/schema"
|
||
)
|
||
|
||
// Migrator returns migrator
|
||
func (db *DB) Migrator() Migrator {
|
||
tx := db.getInstance()
|
||
|
||
// apply scopes to migrator
|
||
for len(tx.Statement.scopes) > 0 {
|
||
scopes := tx.Statement.scopes
|
||
tx.Statement.scopes = nil
|
||
for _, scope := range scopes {
|
||
tx = scope(tx)
|
||
}
|
||
}
|
||
|
||
return tx.Dialector.Migrator(tx.Session(&Session{}))
|
||
}
|
||
|
||
// AutoMigrate run auto migration for given models
|
||
func (db *DB) AutoMigrate(dst ...interface{}) error {
|
||
return db.Migrator().AutoMigrate(dst...)
|
||
}
|
||
|
||
// ViewOption view option
|
||
type ViewOption struct {
|
||
Replace bool
|
||
CheckOption string
|
||
Query *DB
|
||
}
|
||
|
||
type ColumnType interface {
|
||
Name() string
|
||
DatabaseTypeName() string //varchar
|
||
Length() (length int64, ok bool)
|
||
DecimalSize() (precision int64, scale int64, ok bool)
|
||
Nullable() (nullable bool, ok bool)
|
||
Comment() string
|
||
ColumnType() string //varchar(64)
|
||
GoTypeName() string //string
|
||
Primary() bool
|
||
AutoIncrement() bool
|
||
Default() string
|
||
Indexes() []IndexType //或者migrate加一个接口查询index,把columnName带上
|
||
}
|
||
|
||
type IndexType interface {
|
||
Name() string
|
||
Primary() bool
|
||
Unique() bool
|
||
Seq() int
|
||
}
|
||
|
||
type Migrator interface {
|
||
// AutoMigrate
|
||
AutoMigrate(dst ...interface{}) error
|
||
|
||
// Database
|
||
CurrentDatabase() string
|
||
FullDataTypeOf(*schema.Field) clause.Expr
|
||
|
||
// Tables
|
||
CreateTable(dst ...interface{}) error
|
||
DropTable(dst ...interface{}) error
|
||
HasTable(dst interface{}) bool
|
||
RenameTable(oldName, newName interface{}) error
|
||
GetTables() (tableList []string, err error)
|
||
|
||
// Columns
|
||
AddColumn(dst interface{}, field string) error
|
||
DropColumn(dst interface{}, field string) error
|
||
AlterColumn(dst interface{}, field string) error
|
||
MigrateColumn(dst interface{}, field *schema.Field, columnType ColumnType) error
|
||
HasColumn(dst interface{}, field string) bool
|
||
RenameColumn(dst interface{}, oldName, field string) error
|
||
ColumnTypes(dst interface{}) ([]ColumnType, error)
|
||
|
||
// Views
|
||
CreateView(name string, option ViewOption) error
|
||
DropView(name string) error
|
||
|
||
// Constraints
|
||
CreateConstraint(dst interface{}, name string) error
|
||
DropConstraint(dst interface{}, name string) error
|
||
HasConstraint(dst interface{}, name string) bool
|
||
|
||
// Indexes
|
||
CreateIndex(dst interface{}, name string) error
|
||
DropIndex(dst interface{}, name string) error
|
||
HasIndex(dst interface{}, name string) bool
|
||
RenameIndex(dst interface{}, oldName, newName string) error
|
||
}
|