12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package mysql
- import (
- "fmt"
- "github.com/jinzhu/gorm"
- "github.com/jinzhu/gorm/clause"
- "github.com/jinzhu/gorm/migrator"
- )
- type Migrator struct {
- migrator.Migrator
- }
- func (m Migrator) AlterColumn(value interface{}, field string) error {
- return m.RunWithValue(value, func(stmt *gorm.Statement) error {
- if field := stmt.Schema.LookUpField(field); field != nil {
- return m.DB.Exec(
- "ALTER TABLE ? MODIFY COLUMN ? TYPE ?",
- clause.Table{Name: stmt.Table}, clause.Column{Name: field.DBName}, clause.Expr{SQL: field.DBDataType},
- ).Error
- }
- return fmt.Errorf("failed to look up field with name: %s", field)
- })
- }
- func (m Migrator) DropConstraint(value interface{}, name string) error {
- return m.RunWithValue(value, func(stmt *gorm.Statement) error {
- for _, chk := range stmt.Schema.ParseCheckConstraints() {
- if chk.Name == name {
- return m.DB.Exec(
- "ALTER TABLE ? DROP CHECK ?",
- clause.Table{Name: stmt.Table}, clause.Column{Name: name},
- ).Error
- }
- }
- return m.DB.Exec(
- "ALTER TABLE ? DROP FOREIGN KEY ?",
- clause.Table{Name: stmt.Table}, clause.Column{Name: name},
- ).Error
- })
- }
|