diff options
| author | Jack Christensen <jack@jackchristensen.com> | 2025-05-31 15:27:15 +0000 |
|---|---|---|
| committer | Sean Liao <sean@liao.dev> | 2025-08-11 14:27:36 -0700 |
| commit | 3dbef65bf37f1b7ccd1f884761341a5a15456ffa (patch) | |
| tree | af9f6a80091cf86f6d029849e9de220d231724a1 /src/database/sql/sql.go | |
| parent | 2b804abf0712d45801671232585e0011902a5c48 (diff) | |
| download | go-3dbef65bf37f1b7ccd1f884761341a5a15456ffa.tar.xz | |
database/sql: allow drivers to override Scan behavior
Implementing RowsColumnScanner allows the driver
to completely control how values are scanned.
Fixes #67546
Change-Id: Id8e7c3a973479c9665e4476fe2d29e1255aee687
GitHub-Last-Rev: ed0cacaec4a4feead56b09c0d6eee86ed58fe1ee
GitHub-Pull-Request: golang/go#67648
Reviewed-on: https://go-review.googlesource.com/c/go/+/588435
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Sean Liao <sean@liao.dev>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/database/sql/sql.go')
| -rw-r--r-- | src/database/sql/sql.go | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index 4be450ca87..85b9ffc37d 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -3396,7 +3396,16 @@ func (rs *Rows) scanLocked(dest ...any) error { } for i, sv := range rs.lastcols { - err := convertAssignRows(dest[i], sv, rs) + err := driver.ErrSkip + + if rcs, ok := rs.rowsi.(driver.RowsColumnScanner); ok { + err = rcs.ScanColumn(dest[i], i) + } + + if err == driver.ErrSkip { + err = convertAssignRows(dest[i], sv, rs) + } + if err != nil { return fmt.Errorf(`sql: Scan error on column index %d, name %q: %w`, i, rs.rowsi.Columns()[i], err) } |
