migrator.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package mssql
  2. import (
  3. "github.com/jinzhu/gorm"
  4. "github.com/jinzhu/gorm/migrator"
  5. )
  6. type Migrator struct {
  7. migrator.Migrator
  8. }
  9. func (m Migrator) HasIndex(value interface{}, name string) bool {
  10. var count int
  11. m.RunWithValue(value, func(stmt *gorm.Statement) error {
  12. return m.DB.Raw(
  13. "SELECT count(*) FROM sys.indexes WHERE name=? AND object_id=OBJECT_ID(?)",
  14. name, stmt.Table,
  15. ).Row().Scan(&count)
  16. })
  17. return count > 0
  18. }
  19. func (m Migrator) HasConstraint(value interface{}, name string) bool {
  20. var count int64
  21. m.RunWithValue(value, func(stmt *gorm.Statement) error {
  22. return m.DB.Raw(
  23. `SELECT count(*) FROM sys.foreign_keys as F inner join sys.tables as T on F.parent_object_id=T.object_id inner join information_schema.tables as I on I.TABLE_NAME = T.name WHERE F.name = ? AND T.Name = ? AND I.TABLE_CATALOG = ?;`,
  24. name, stmt.Table, m.CurrentDatabase(),
  25. ).Row().Scan(&count)
  26. })
  27. return count > 0
  28. }
  29. func (m Migrator) CurrentDatabase() (name string) {
  30. m.DB.Raw("SELECT DB_NAME() AS [Current Database]").Row().Scan(&name)
  31. return
  32. }