Skip to content

Commit 16b5ee3

Browse files
committed
Improve support for AutoMigrate
1 parent b222e65 commit 16b5ee3

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ go 1.14
55
require (
66
github.com/denisenkom/go-mssqldb v0.12.0
77
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
8-
gorm.io/gorm v1.22.4
8+
gorm.io/gorm v1.23.1
99
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
1414
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
1515
github.com/jinzhu/now v1.1.3 h1:PlHq1bSCSZL9K0wUhbm2pGLoTWs2GwVhsP6emvGV/ZI=
1616
github.com/jinzhu/now v1.1.3/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
17+
github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas=
18+
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
1719
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
1820
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
1921
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -43,3 +45,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
4345
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
4446
gorm.io/gorm v1.22.4 h1:8aPcyEJhY0MAt8aY6Dc524Pn+pO29K+ydu+e/cXSpQM=
4547
gorm.io/gorm v1.22.4/go.mod h1:1aeVC+pe9ZmvKZban/gW4QPra7PRoTEssyc922qCAkk=
48+
gorm.io/gorm v1.23.1 h1:aj5IlhDzEPsoIyOPtTRVI+SyaN1u6k613sbt4pwbxG0=
49+
gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=

migrator.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,16 @@ func (m Migrator) HasColumn(value interface{}, field string) bool {
111111
func (m Migrator) AlterColumn(value interface{}, field string) error {
112112
return m.RunWithValue(value, func(stmt *gorm.Statement) error {
113113
if field := stmt.Schema.LookUpField(field); field != nil {
114-
fileType := clause.Expr{SQL: m.DataTypeOf(field)}
114+
fieldType := clause.Expr{SQL: m.DataTypeOf(field)}
115115
if field.NotNull {
116-
fileType.SQL += " NOT NULL"
116+
fieldType.SQL += " NOT NULL"
117+
} else {
118+
fieldType.SQL += " NULL"
117119
}
118120

119121
return m.DB.Exec(
120122
"ALTER TABLE ? ALTER COLUMN ? ?",
121-
clause.Table{Name: stmt.Table}, clause.Column{Name: field.DBName}, fileType,
123+
clause.Table{Name: stmt.Table}, clause.Column{Name: field.DBName}, fieldType,
122124
).Error
123125
}
124126
return fmt.Errorf("failed to look up field with name: %s", field)
@@ -171,7 +173,10 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
171173

172174
for columns.Next() {
173175
var (
174-
column migrator.ColumnType
176+
column = migrator.ColumnType{
177+
PrimaryKeyValue: sql.NullBool{Valid: true},
178+
UniqueValue: sql.NullBool{Valid: true},
179+
}
175180
datetimePrecision sql.NullInt64
176181
radixValue sql.NullInt64
177182
nullableValue sql.NullString
@@ -198,6 +203,8 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
198203
column.DefaultValueValue.String = matches[1]
199204
matches = defaultValueTrimRegexp.FindStringSubmatch(column.DefaultValueValue.String)
200205
}
206+
} else {
207+
column.DefaultValueValue.Valid = true
201208
}
202209

203210
for _, c := range rawColumnTypes {
@@ -224,7 +231,7 @@ func (m Migrator) ColumnTypes(value interface{}) ([]gorm.ColumnType, error) {
224231
if mc.NameValue.String == name {
225232
switch columnType {
226233
case "PRIMARY KEY":
227-
mc.PrimayKeyValue = sql.NullBool{Bool: true, Valid: true}
234+
mc.PrimaryKeyValue = sql.NullBool{Bool: true, Valid: true}
228235
case "UNIQUE":
229236
mc.UniqueValue = sql.NullBool{Bool: true, Valid: true}
230237
}

0 commit comments

Comments
 (0)