112 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package gorm
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 
 | |
| 	"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 {
 | |
| 		tx = tx.executeScopes()
 | |
| 	}
 | |
| 
 | |
| 	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   // If true, exec `CREATE`. If false, exec `CREATE OR REPLACE`
 | |
| 	CheckOption string // optional. e.g. `WITH [ CASCADED | LOCAL ] CHECK OPTION`
 | |
| 	Query       *DB    // required subquery.
 | |
| }
 | |
| 
 | |
| // 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
 | |
| type Migrator interface {
 | |
| 	// AutoMigrate
 | |
| 	AutoMigrate(dst ...interface{}) error
 | |
| 
 | |
| 	// Database
 | |
| 	CurrentDatabase() string
 | |
| 	FullDataTypeOf(*schema.Field) clause.Expr
 | |
| 	GetTypeAliases(databaseTypeName string) []string
 | |
| 
 | |
| 	// Tables
 | |
| 	CreateTable(dst ...interface{}) error
 | |
| 	DropTable(dst ...interface{}) error
 | |
| 	HasTable(dst interface{}) bool
 | |
| 	RenameTable(oldName, newName interface{}) error
 | |
| 	GetTables() (tableList []string, err error)
 | |
| 	TableType(dst interface{}) (TableType, 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
 | |
| 	// MigrateColumnUnique migrate column's UNIQUE constraint, it's part of MigrateColumn.
 | |
| 	MigrateColumnUnique(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
 | |
| 	GetIndexes(dst interface{}) ([]Index, error)
 | |
| }
 |