migrator.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package mysql
  2. import (
  3. "fmt"
  4. "github.com/jinzhu/gorm"
  5. "github.com/jinzhu/gorm/clause"
  6. "github.com/jinzhu/gorm/migrator"
  7. )
  8. type Migrator struct {
  9. migrator.Migrator
  10. }
  11. func (m Migrator) AlterColumn(value interface{}, field string) error {
  12. return m.RunWithValue(value, func(stmt *gorm.Statement) error {
  13. if field := stmt.Schema.LookUpField(field); field != nil {
  14. return m.DB.Exec(
  15. "ALTER TABLE ? MODIFY COLUMN ? TYPE ?",
  16. clause.Table{Name: stmt.Table}, clause.Column{Name: field.DBName}, clause.Expr{SQL: field.DBDataType},
  17. ).Error
  18. }
  19. return fmt.Errorf("failed to look up field with name: %s", field)
  20. })
  21. }
  22. func (m Migrator) DropConstraint(value interface{}, name string) error {
  23. return m.RunWithValue(value, func(stmt *gorm.Statement) error {
  24. for _, chk := range stmt.Schema.ParseCheckConstraints() {
  25. if chk.Name == name {
  26. return m.DB.Exec(
  27. "ALTER TABLE ? DROP CHECK ?",
  28. clause.Table{Name: stmt.Table}, clause.Column{Name: name},
  29. ).Error
  30. }
  31. }
  32. return m.DB.Exec(
  33. "ALTER TABLE ? DROP FOREIGN KEY ?",
  34. clause.Table{Name: stmt.Table}, clause.Column{Name: name},
  35. ).Error
  36. })
  37. }