Commit 5318a1b5 authored by Russ Cox's avatar Russ Cox

database/sql: add Drivers, returning list of registered drivers

Fixes #7969.

LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://golang.org/cl/158950043
parent 05c4b69f
......@@ -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`,
......
......@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment