gorm/migrator.go

110 lines
3.0 KiB
Go
Raw Normal View History

2020-01-28 18:01:35 +03:00
package gorm
import (
"reflect"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
2020-01-28 18:01:35 +03:00
)
2020-02-20 18:04:03 +03:00
// Migrator returns migrator
func (db *DB) Migrator() Migrator {
2021-03-19 11:34:51 +03:00
tx := db.getInstance()
2021-03-11 05:29:52 +03:00
// apply scopes to migrator
2021-03-19 11:34:51 +03:00
for len(tx.Statement.scopes) > 0 {
tx = tx.executeScopes()
2021-03-11 05:29:52 +03:00
}
2021-03-19 11:34:51 +03:00
return tx.Dialector.Migrator(tx.Session(&Session{}))
2020-02-20 18:04:03 +03:00
}
2020-06-08 08:45:41 +03:00
// AutoMigrate run auto migration for given models
func (db *DB) AutoMigrate(dst ...interface{}) error {
return db.Migrator().AutoMigrate(dst...)
}
2020-01-28 18:01:35 +03:00
// ViewOption view option
type ViewOption struct {
Replace bool // If true, exec `CREATE`. If false, exec `CREATE OR REPLACE`
CheckOption string // optional. e.g. `WITH [ CASCADED | LOCAL ] CHECK OPTION`
Query *DB // required subquery.
2020-01-28 18:01:35 +03:00
}
// ColumnType column type interface
type ColumnType interface {
Name() string
DatabaseTypeName() string // varchar
ColumnType() (columnType string, ok bool) // varchar(64)
PrimaryKey() (isPrimaryKey bool, ok bool)
AutoIncrement() (isAutoIncrement bool, ok bool)
Length() (length int64, ok bool)
DecimalSize() (precision int64, scale int64, ok bool)
Nullable() (nullable bool, ok bool)
Unique() (unique bool, ok bool)
ScanType() reflect.Type
Comment() (value string, ok bool)
DefaultValue() (value string, ok bool)
}
type Index interface {
Table() string
Name() string
Columns() []string
PrimaryKey() (isPrimaryKey bool, ok bool)
Unique() (unique bool, ok bool)
Option() string
}
// TableType table type interface
type TableType interface {
Schema() string
Name() string
Type() string
Comment() (comment string, ok bool)
}
// Migrator migrator interface
2020-01-28 18:01:35 +03:00
type Migrator interface {
// AutoMigrate
AutoMigrate(dst ...interface{}) error
2020-02-20 18:04:03 +03:00
// Database
CurrentDatabase() string
FullDataTypeOf(*schema.Field) clause.Expr
GetTypeAliases(databaseTypeName string) []string
2020-02-20 18:04:03 +03:00
2020-01-28 18:01:35 +03:00
// Tables
CreateTable(dst ...interface{}) error
DropTable(dst ...interface{}) error
2020-02-22 12:53:57 +03:00
HasTable(dst interface{}) bool
2020-05-31 05:24:49 +03:00
RenameTable(oldName, newName interface{}) error
GetTables() (tableList []string, err error)
TableType(dst interface{}) (TableType, error)
2020-01-28 18:01:35 +03:00
// 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
2020-02-22 08:09:57 +03:00
HasColumn(dst interface{}, field string) bool
2020-01-28 18:01:35 +03:00
RenameColumn(dst interface{}, oldName, field string) error
ColumnTypes(dst interface{}) ([]ColumnType, error)
2020-01-28 18:01:35 +03:00
// Views
CreateView(name string, option ViewOption) error
DropView(name string) error
// Constraints
CreateConstraint(dst interface{}, name string) error
DropConstraint(dst interface{}, name string) error
2020-02-22 08:09:57 +03:00
HasConstraint(dst interface{}, name string) bool
2020-01-28 18:01:35 +03:00
// Indexes
CreateIndex(dst interface{}, name string) error
DropIndex(dst interface{}, name string) error
2020-02-20 18:04:03 +03:00
HasIndex(dst interface{}, name string) bool
2020-01-28 18:01:35 +03:00
RenameIndex(dst interface{}, oldName, newName string) error
GetIndexes(dst interface{}) ([]Index, error)
2020-01-28 18:01:35 +03:00
}