Skip to content

Commit a64dbd7

Browse files
committed
attempt to fix drop tables test
Signed-off-by: Andrew Thornton <[email protected]>
1 parent c8ac860 commit a64dbd7

File tree

3 files changed

+58
-38
lines changed

3 files changed

+58
-38
lines changed

models/migrations/migrations.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -819,9 +819,24 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
819819
}
820820
for _, constraint := range constraints {
821821
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` DROP CONSTRAINT `%s`", tableName, constraint)); err != nil {
822-
return fmt.Errorf("Drop table `%s` constraint `%s`: %v", tableName, constraint, err)
822+
return fmt.Errorf("Drop table `%s` default constraint `%s`: %v", tableName, constraint, err)
823823
}
824824
}
825+
sql = fmt.Sprintf("SELECT DISTINCT Name FROM SYS.INDEXES INNER JOIN SYS.INDEX_COLUMNS ON INDEXES.INDEX_ID = INDEX_COLUMNS.INDEX_ID AND INDEXES.OBJECT_ID = INDEX_COLUMNS.OBJECT_ID WHERE INDEXES.OBJECT_ID = OBJECT_ID('%[1]s') AND INDEX_COLUMNS.COLUMN_ID IN (SELECT column_id FROM sys.columns WHERE lower(NAME) IN (%[2]s) AND object_id = OBJECT_ID('%[1]s'))",
826+
tableName, strings.ReplaceAll(cols, "`", "'"))
827+
constraints = make([]string, 0)
828+
if err := sess.SQL(sql).Find(&constraints); err != nil {
829+
return fmt.Errorf("Find constraints: %v", err)
830+
}
831+
for _, constraint := range constraints {
832+
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` DROP CONSTRAINT IF EXISTS `%s`", tableName, constraint)); err != nil {
833+
return fmt.Errorf("Drop table `%s` index constraint `%s`: %v", tableName, constraint, err)
834+
}
835+
if _, err := sess.Exec(fmt.Sprintf("DROP INDEX IF EXISTS `%[2]s` ON `%[1]s`", tableName, constraint)); err != nil {
836+
return fmt.Errorf("Drop index `%[2]s` on `%[1]s`: %v", tableName, constraint, err)
837+
}
838+
}
839+
825840
if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` DROP COLUMN %s", tableName, cols)); err != nil {
826841
return fmt.Errorf("Drop table `%s` columns %v: %v", tableName, columnNames, err)
827842
}

models/migrations/migrations_test.go

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -80,26 +80,9 @@ func removeAllWithRetry(dir string) error {
8080
return err
8181
}
8282

83-
func getEngine() (*xorm.Engine, error) {
84-
connStr, err := setting.DBConnStr()
85-
if err != nil {
86-
return nil, err
87-
}
88-
89-
engine, err := xorm.NewEngine(setting.Database.Type, connStr)
90-
if err != nil {
91-
return nil, err
92-
}
93-
if setting.Database.Type == "mysql" {
94-
engine.Dialect().SetParams(map[string]string{"rowFormat": "DYNAMIC"})
95-
}
96-
engine.SetSchema(setting.Database.Schema)
97-
return engine, nil
98-
}
99-
10083
// SetEngine sets the xorm.Engine
10184
func SetEngine() (*xorm.Engine, error) {
102-
x, err := getEngine()
85+
x, err := models.GetNewEngine()
10386
if err != nil {
10487
return x, fmt.Errorf("Failed to connect to database: %v", err)
10588
}
@@ -190,45 +173,66 @@ func Test_dropTableColumns(t *testing.T) {
190173
}
191174

192175
columns := []string{
193-
"FirstColumn",
194-
"ToDropColumn",
195-
"AnotherColumn",
196-
"CreatedUnix",
197-
"UpdatedUnix",
176+
"first_column",
177+
"to_drop_column",
178+
"another_column",
179+
"created_unix",
180+
"updated_unix",
198181
}
199182

200183
for i := range columns {
184+
x.SetMapper(names.GonicMapper{})
201185
if err := x.Sync2(new(DropTest)); err != nil {
202-
assert.Fail(t, "%v", err)
186+
t.Errorf("unable to create DropTest table: %v", err)
203187
return
204188
}
205189
sess := x.NewSession()
206-
190+
if err := sess.Begin(); err != nil {
191+
sess.Close()
192+
t.Errorf("unable to begin transaction: %v", err)
193+
return
194+
}
207195
if err := dropTableColumns(sess, "drop_test", columns[i:]...); err != nil {
208196
sess.Close()
209-
assert.Fail(t, "%v", err)
197+
t.Errorf("Unable to drop columns[%d:]: %s from drop_test: %v", i, columns[i:], err)
198+
return
199+
}
200+
if err := sess.Commit(); err != nil {
201+
sess.Close()
202+
t.Errorf("unable to commit transaction: %v", err)
210203
return
211204
}
212205
sess.Close()
213-
if _, err := x.DB().DB.Exec("DROP TABLE drop_test"); err != nil {
214-
assert.Fail(t, "%v", err)
206+
if err := x.DropTables(new(DropTest)); err != nil {
207+
t.Errorf("unable to drop table: %v", err)
215208
return
216209
}
217-
for j := range columns[i:] {
210+
for j := range columns[i+1:] {
211+
x.SetMapper(names.GonicMapper{})
218212
if err := x.Sync2(new(DropTest)); err != nil {
219-
assert.Fail(t, "%v", err)
213+
t.Errorf("unable to create DropTest table: %v", err)
220214
return
221215
}
222-
dropcols := append([]string{columns[i]}, columns[j:]...)
216+
dropcols := append([]string{columns[i]}, columns[j+i+1:]...)
223217
sess := x.NewSession()
218+
if err := sess.Begin(); err != nil {
219+
sess.Close()
220+
t.Errorf("unable to begin transaction: %v", err)
221+
return
222+
}
224223
if err := dropTableColumns(sess, "drop_test", dropcols...); err != nil {
225224
sess.Close()
226-
assert.Fail(t, "%v", err)
225+
t.Errorf("Unable to drop columns: %s from drop_test: %v", dropcols, err)
226+
return
227+
}
228+
if err := sess.Commit(); err != nil {
229+
sess.Close()
230+
t.Errorf("unable to commit transaction: %v", err)
227231
return
228232
}
229233
sess.Close()
230-
if _, err := x.DB().DB.Exec("DROP TABLE drop_test"); err != nil {
231-
assert.Fail(t, "%v", err)
234+
if err := x.DropTables(new(DropTest)); err != nil {
235+
t.Errorf("unable to drop table: %v", err)
232236
return
233237
}
234238
}

models/models.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ func init() {
142142
}
143143
}
144144

145-
func getEngine() (*xorm.Engine, error) {
145+
// GetNewEngine returns a new xorm engine from the configuration
146+
func GetNewEngine() (*xorm.Engine, error) {
146147
connStr, err := setting.DBConnStr()
147148
if err != nil {
148149
return nil, err
@@ -172,7 +173,7 @@ func getEngine() (*xorm.Engine, error) {
172173

173174
// NewTestEngine sets a new test xorm.Engine
174175
func NewTestEngine() (err error) {
175-
x, err = getEngine()
176+
x, err = GetNewEngine()
176177
if err != nil {
177178
return fmt.Errorf("Connect to database: %v", err)
178179
}
@@ -185,7 +186,7 @@ func NewTestEngine() (err error) {
185186

186187
// SetEngine sets the xorm.Engine
187188
func SetEngine() (err error) {
188-
x, err = getEngine()
189+
x, err = GetNewEngine()
189190
if err != nil {
190191
return fmt.Errorf("Failed to connect to database: %v", err)
191192
}

0 commit comments

Comments
 (0)