@@ -102,6 +102,8 @@ type tester struct {
102
102
mdb * sql.DB
103
103
name string
104
104
105
+ originalSchemas map [string ]struct {}
106
+
105
107
curr * Conn
106
108
107
109
buf bytes.Buffer
@@ -274,6 +276,20 @@ func (t *tester) preProcess() {
274
276
log .Fatalf ("Open db err %v" , err )
275
277
}
276
278
279
+ if ! reserveSchema {
280
+ // store original schemas
281
+ t .originalSchemas = make (map [string ]struct {})
282
+ rows , err := mdb .Query ("show databases" )
283
+ if err != nil {
284
+ log .Errorf ("failed to get databases: %s" , err .Error ())
285
+ return
286
+ }
287
+ for rows .Next () {
288
+ rows .Scan (& dbName )
289
+ t .originalSchemas [dbName ] = struct {}{}
290
+ }
291
+ }
292
+
277
293
dbName = strings .ReplaceAll (t .name , "/" , "__" )
278
294
log .Debugf ("Create new db `%s`" , dbName )
279
295
if _ , err = mdb .Exec (fmt .Sprintf ("create database `%s`" , dbName )); err != nil {
@@ -290,16 +306,30 @@ func (t *tester) preProcess() {
290
306
}
291
307
292
308
func (t * tester ) postProcess () {
309
+ defer func () {
310
+ for _ , v := range t .conn {
311
+ v .conn .Close ()
312
+ }
313
+ t .mdb .Close ()
314
+ }()
293
315
if ! reserveSchema {
294
- _ , err := t .mdb .Exec ( fmt . Sprintf ( "drop database `%s`" , strings . ReplaceAll ( t . name , "/" , "__" )) )
316
+ rows , err := t .mdb .Query ( "show databases" )
295
317
if err != nil {
296
- log .Errorf ("failed to drop database: %s" , err .Error ())
318
+ log .Errorf ("failed to get databases: %s" , err .Error ())
319
+ return
320
+ }
321
+ var dbName string
322
+ for rows .Next () {
323
+ rows .Scan (& dbName )
324
+ if _ , exists := t .originalSchemas [dbName ]; ! exists {
325
+ _ , err := t .mdb .Exec (fmt .Sprintf ("drop database `%s`" , dbName ))
326
+ if err != nil {
327
+ log .Errorf ("failed to drop database: %s" , err .Error ())
328
+ return
329
+ }
330
+ }
297
331
}
298
332
}
299
- for _ , v := range t .conn {
300
- v .conn .Close ()
301
- }
302
- t .mdb .Close ()
303
333
}
304
334
305
335
func (t * tester ) addFailure (testSuite * XUnitTestSuite , err * error , cnt int ) {
0 commit comments