builder.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package migrations
  2. type MigrationBase struct {
  3. id string
  4. }
  5. func (m *MigrationBase) Id() string {
  6. return m.id
  7. }
  8. func (m *MigrationBase) SetId(id string) {
  9. m.id = id
  10. }
  11. type RawSqlMigration struct {
  12. MigrationBase
  13. sqlite string
  14. mysql string
  15. }
  16. func (m *RawSqlMigration) Sql(dialect Dialect) string {
  17. switch dialect.DriverName() {
  18. case MYSQL:
  19. return m.mysql
  20. case SQLITE:
  21. return m.sqlite
  22. }
  23. panic("db type not supported")
  24. }
  25. func (m *RawSqlMigration) Sqlite(sql string) *RawSqlMigration {
  26. m.sqlite = sql
  27. return m
  28. }
  29. func (m *RawSqlMigration) Mysql(sql string) *RawSqlMigration {
  30. m.mysql = sql
  31. return m
  32. }
  33. type AddColumnMigration struct {
  34. MigrationBase
  35. tableName string
  36. column *Column
  37. }
  38. func (m *AddColumnMigration) Table(tableName string) *AddColumnMigration {
  39. m.tableName = tableName
  40. return m
  41. }
  42. func (m *AddColumnMigration) Column(col *Column) *AddColumnMigration {
  43. m.column = col
  44. return m
  45. }
  46. func (m *AddColumnMigration) Sql(dialect Dialect) string {
  47. return dialect.AddColumnSql(m.tableName, m.column)
  48. }
  49. type AddIndexMigration struct {
  50. MigrationBase
  51. tableName string
  52. index Index
  53. }
  54. func (m *AddIndexMigration) Name(name string) *AddIndexMigration {
  55. m.index.Name = name
  56. return m
  57. }
  58. func (m *AddIndexMigration) Table(tableName string) *AddIndexMigration {
  59. m.tableName = tableName
  60. return m
  61. }
  62. func (m *AddIndexMigration) Unique() *AddIndexMigration {
  63. m.index.Type = UniqueIndex
  64. return m
  65. }
  66. func (m *AddIndexMigration) Columns(columns ...string) *AddIndexMigration {
  67. m.index.Cols = columns
  68. return m
  69. }
  70. func (m *AddIndexMigration) Sql(dialect Dialect) string {
  71. return dialect.CreateIndexSql(m.tableName, &m.index)
  72. }
  73. type AddTableMigration struct {
  74. MigrationBase
  75. table Table
  76. }
  77. func (m *AddTableMigration) Sql(d Dialect) string {
  78. return d.CreateTableSql(&m.table)
  79. }
  80. func (m *AddTableMigration) Name(name string) *AddTableMigration {
  81. m.table.Name = name
  82. return m
  83. }
  84. func (m *AddTableMigration) WithColumns(columns ...*Column) *AddTableMigration {
  85. for _, col := range columns {
  86. m.table.Columns = append(m.table.Columns, col)
  87. if col.IsPrimaryKey {
  88. m.table.PrimaryKeys = append(m.table.PrimaryKeys, col.Name)
  89. }
  90. }
  91. return m
  92. }
  93. func (m *AddTableMigration) WithColumn(col *Column) *AddTableMigration {
  94. m.table.Columns = append(m.table.Columns, col)
  95. if col.IsPrimaryKey {
  96. m.table.PrimaryKeys = append(m.table.PrimaryKeys, col.Name)
  97. }
  98. return m
  99. }