2019-12-28 21:15:47 +01:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type AlterTableSqlBuilder struct {
|
|
|
|
Dialect DialectType
|
|
|
|
Name string
|
|
|
|
Changes []string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *AlterTableSqlBuilder) AddColumn(col *Column) *AlterTableSqlBuilder {
|
|
|
|
if colVal, err := col.String(); err == nil {
|
|
|
|
b.Changes = append(b.Changes, fmt.Sprintf("ADD COLUMN %s", colVal))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
2019-12-30 19:32:06 +01:00
|
|
|
func (b *AlterTableSqlBuilder) ChangeColumn(name string, col *Column) *AlterTableSqlBuilder {
|
|
|
|
if colVal, err := col.String(); err == nil {
|
|
|
|
b.Changes = append(b.Changes, fmt.Sprintf("CHANGE COLUMN %s %s", name, colVal))
|
|
|
|
}
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *AlterTableSqlBuilder) AddUniqueConstraint(name string, columns ...string) *AlterTableSqlBuilder {
|
|
|
|
b.Changes = append(b.Changes, fmt.Sprintf("ADD CONSTRAINT %s UNIQUE (%s)", name, strings.Join(columns, ", ")))
|
|
|
|
return b
|
|
|
|
}
|
|
|
|
|
2019-12-28 21:15:47 +01:00
|
|
|
func (b *AlterTableSqlBuilder) ToSQL() (string, error) {
|
|
|
|
var str strings.Builder
|
|
|
|
|
|
|
|
str.WriteString("ALTER TABLE ")
|
|
|
|
str.WriteString(b.Name)
|
|
|
|
str.WriteString(" ")
|
|
|
|
|
|
|
|
if len(b.Changes) == 0 {
|
|
|
|
return "", fmt.Errorf("no changes provide for table: %s", b.Name)
|
|
|
|
}
|
|
|
|
changeCount := len(b.Changes)
|
|
|
|
for i, thing := range b.Changes {
|
|
|
|
str.WriteString(thing)
|
|
|
|
if i < changeCount-1 {
|
|
|
|
str.WriteString(", ")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return str.String(), nil
|
|
|
|
}
|