]> Cypherpunks repositories - gostls13.git/commit
database/sql: record the context error in Rows if canceled
authorDaniel Theophanes <kardianos@gmail.com>
Tue, 7 Feb 2017 18:19:02 +0000 (10:19 -0800)
committerRuss Cox <rsc@golang.org>
Wed, 8 Feb 2017 18:30:39 +0000 (18:30 +0000)
commitc026845bd2984002168e7496cb9d0150f79164d0
tree90e1df19bb1179b30212f76541db43007acdb280
parent0c9325e13d5d9e2ab7459522e3556f6f44cbcb10
database/sql: record the context error in Rows if canceled

Previously it was intended that Rows.Scan would return
an error and Rows.Err would return nil. This was problematic
because drivers could not differentiate between a normal
Rows.Close or a context cancel close.

The alternative is to require drivers to return a Scan to return
an error if the driver is closed while there are still rows to be read.
This is currently not how several drivers currently work and may be
difficult to detect when there are additional rows.

At the same time guard the the Rows.lasterr and prevent a close
while a Rows operation is active.

For the drivers that do not have Context methods, do not check for
context cancelation after the operation, but before for any operation
that may modify the database state.

Fixes #18961

Change-Id: I49a25318ecd9f97a35d5b50540ecd850c01cfa5e
Reviewed-on: https://go-review.googlesource.com/36485
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/database/sql/ctxutil.go
src/database/sql/sql.go
src/database/sql/sql_test.go