summaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-10-15 13:10:14 -0400
committerRuss Cox <rsc@golang.org>2014-10-15 13:10:14 -0400
commitae4161ab2a8b51aca660c5ab6b23dd277aa77044 (patch)
treec2f3a5c74e46db0ef7400282fea23c1eb66f342a /src/database
parentdad1b5c702a5408d47fdc7d622913be348a22731 (diff)
downloadgo-ae4161ab2a8b51aca660c5ab6b23dd277aa77044.tar.gz
database/sql: add Drivers, returning list of registered drivers
Fixes issue 7969. LGTM=bradfitz R=bradfitz CC=golang-codereviews https://codereview.appspot.com/158950043
Diffstat (limited to 'src/database')
-rw-r--r--src/database/sql/fakedb_test.go22
-rw-r--r--src/database/sql/sql.go11
2 files changed, 33 insertions, 0 deletions
diff --git a/src/database/sql/fakedb_test.go b/src/database/sql/fakedb_test.go
index c7db0dd77..171c322d4 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 731b7a7f7..ad9179cf7 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.