2
2
package driver
3
3
4
4
import (
5
- "errors"
6
5
"fmt"
7
6
neturl "net/url" // alias to allow `url string` func signature in New
8
7
@@ -14,6 +13,14 @@ import (
14
13
"github.com/mattes/migrate/file"
15
14
)
16
15
16
+ var driverMap = map [string ]Driver {
17
+ "postgres" : & postgres.Driver {},
18
+ "mysql" : & mysql.Driver {},
19
+ "bash" : & bash.Driver {},
20
+ "cassandra" : & cassandra.Driver {},
21
+ "sqlite3" : & sqlite3.Driver {},
22
+ }
23
+
17
24
// Driver is the interface type that needs to implemented by all drivers.
18
25
type Driver interface {
19
26
@@ -47,48 +54,14 @@ func New(url string) (Driver, error) {
47
54
return nil , err
48
55
}
49
56
50
- switch u .Scheme {
51
- case "postgres" :
52
- d := & postgres.Driver {}
53
- verifyFilenameExtension ("postgres" , d )
54
- if err := d .Initialize (url ); err != nil {
55
- return nil , err
56
- }
57
- return d , nil
58
-
59
- case "mysql" :
60
- d := & mysql.Driver {}
61
- verifyFilenameExtension ("mysql" , d )
62
- if err := d .Initialize (url ); err != nil {
63
- return nil , err
64
- }
65
- return d , nil
66
-
67
- case "bash" :
68
- d := & bash.Driver {}
69
- verifyFilenameExtension ("bash" , d )
70
- if err := d .Initialize (url ); err != nil {
71
- return nil , err
72
- }
73
- return d , nil
74
-
75
- case "cassandra" :
76
- d := & cassandra.Driver {}
77
- verifyFilenameExtension ("cassanda" , d )
78
- if err := d .Initialize (url ); err != nil {
79
- return nil , err
80
- }
81
- return d , nil
82
- case "sqlite3" :
83
- d := & sqlite3.Driver {}
84
- verifyFilenameExtension ("sqlite3" , d )
57
+ if d , found := driverMap [u .Scheme ]; found {
58
+ verifyFilenameExtension (u .Scheme , d )
85
59
if err := d .Initialize (url ); err != nil {
86
60
return nil , err
87
61
}
88
62
return d , nil
89
- default :
90
- return nil , errors .New (fmt .Sprintf ("Driver '%s' not found." , u .Scheme ))
91
63
}
64
+ return nil , fmt .Errorf ("Driver '%s' not found." , u .Scheme )
92
65
}
93
66
94
67
// verifyFilenameExtension panics if the drivers filename extension
0 commit comments