diff options
| author | Daniel Theophanes <kardianos@gmail.com> | 2016-11-23 09:10:30 -0800 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2016-12-01 16:52:12 +0000 |
| commit | e5e05627745764fb9989bf3966919d6715f21abc (patch) | |
| tree | a504ad49f44371aab7d2b62eeb92108e6470df5d /src/database/sql/convert.go | |
| parent | ea1b90f855fe2891ff0f39d3a3f4b0a5f72a04ed (diff) | |
| download | go-e5e05627745764fb9989bf3966919d6715f21abc.tar.xz | |
database/sql: document expectations for named parameters
Require parameter names to not begin with a symbol.
Change-Id: I5dfe9d4e181f0daf71dad2f395aca41c68678cbe
Reviewed-on: https://go-review.googlesource.com/33493
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/database/sql/convert.go')
| -rw-r--r-- | src/database/sql/convert.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/database/sql/convert.go b/src/database/sql/convert.go index 4b4dfc40d7..ea2f377810 100644 --- a/src/database/sql/convert.go +++ b/src/database/sql/convert.go @@ -13,6 +13,8 @@ import ( "reflect" "strconv" "time" + "unicode" + "unicode/utf8" ) var errNilPtr = errors.New("destination pointer is nil") // embedded in descriptive error @@ -24,6 +26,17 @@ func describeNamedValue(nv *driver.NamedValue) string { return fmt.Sprintf("with name %q", nv.Name) } +func validateNamedValueName(name string) error { + if len(name) == 0 { + return nil + } + r, _ := utf8.DecodeRuneInString(name) + if unicode.IsLetter(r) { + return nil + } + return fmt.Errorf("name %q does not begin with a letter", name) +} + // driverArgs converts arguments from callers of Stmt.Exec and // Stmt.Query into driver Values. // @@ -43,6 +56,9 @@ func driverArgs(ds *driverStmt, args []interface{}) ([]driver.NamedValue, error) nv := &nvargs[n] nv.Ordinal = n + 1 if np, ok := arg.(NamedArg); ok { + if err := validateNamedValueName(np.Name); err != nil { + return nil, err + } arg = np.Value nvargs[n].Name = np.Name } @@ -60,6 +76,9 @@ func driverArgs(ds *driverStmt, args []interface{}) ([]driver.NamedValue, error) nv := &nvargs[n] nv.Ordinal = n + 1 if np, ok := arg.(NamedArg); ok { + if err := validateNamedValueName(np.Name); err != nil { + return nil, err + } arg = np.Value nv.Name = np.Name } |
