diff options
| author | Russ Cox <rsc@golang.org> | 2014-10-15 13:10:14 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-10-15 13:10:14 -0400 |
| commit | 5318a1b5b12d2836b23eb6b706f96f0247f2144a (patch) | |
| tree | 23c0c9342657b022192d4a4b28db2fa01781ece1 /src/database/sql | |
| parent | 05c4b69f848a2de7acc604285d18e995f646adfc (diff) | |
| download | go-5318a1b5b12d2836b23eb6b706f96f0247f2144a.tar.xz | |
database/sql: add Drivers, returning list of registered drivers
Fixes #7969.
LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://golang.org/cl/158950043
Diffstat (limited to 'src/database/sql')
| -rw-r--r-- | src/database/sql/fakedb_test.go | 22 | ||||
| -rw-r--r-- | src/database/sql/sql.go | 11 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/database/sql/fakedb_test.go b/src/database/sql/fakedb_test.go index c7db0dd77b..171c322d49 100644 --- a/src/database/sql/fakedb_test.go +++ b/src/database/sql/fakedb_test.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "log" + "sort" "strconv" "strings" "sync" @@ -126,6 +127,27 @@ func init() { Register("test", fdriver) } +func contains(list []string, y string) bool { + for _, x := range list { + if x == y { + return true + } + } + return false +} + +type Dummy struct { + driver.Driver +} + +func TestDrivers(t *testing.T) { + Register("invalid", Dummy{}) + all := Drivers() + if len(all) < 2 || !sort.StringsAreSorted(all) || !contains(all, "test") || !contains(all, "invalid") { + t.Fatalf("Drivers = %v, want sorted list with at least [invalid, test]", all) + } +} + // Supports dsn forms: // <dbname> // <dbname>;<opts> (only currently supported option is `badConn`, diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index 731b7a7f79..ad9179cf7d 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -18,6 +18,7 @@ import ( "fmt" "io" "runtime" + "sort" "sync" ) @@ -36,6 +37,16 @@ func Register(name string, driver driver.Driver) { drivers[name] = driver } +// Drivers returns a sorted list of the names of the registered drivers. +func Drivers() []string { + var list []string + for name := range drivers { + list = append(list, name) + } + sort.Strings(list) + return list +} + // RawBytes is a byte slice that holds a reference to memory owned by // the database itself. After a Scan into a RawBytes, the slice is only // valid until the next call to Next, Scan, or Close. |
