aboutsummaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
authorJustin Li <git@justinli.net>2019-01-23 15:15:06 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2019-02-08 19:52:00 +0000
commitd5a36531b2e0a904d616fec55e64575d6583dd80 (patch)
tree4cbcfa0ad76501248ec3fbf05c87f9b9df392233 /src/database
parent7ccd3583eddcd79679fb29cfc83a6e6fb6973f1e (diff)
downloadgo-d5a36531b2e0a904d616fec55e64575d6583dd80.tar.gz
go-d5a36531b2e0a904d616fec55e64575d6583dd80.zip
database/sql: document Stmt lifetime
When prepared on a DB, prepared statement code in database/sql handles everything to keep the prepared statement alive as it moves across the connection pool. Understanding this is an important part of using this API correctly, but it was only documented indirectly via `(*Tx) Prepare*`. Change-Id: Ic8757e0150d59e675d9f0252f6c15aef2cc2e831 GitHub-Last-Rev: 55dba87458542cb631baac80aeea0c3607d8f421 GitHub-Pull-Request: golang/go#29890 Reviewed-on: https://go-review.googlesource.com/c/159077 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Daniel Theophanes <kardianos@gmail.com>
Diffstat (limited to 'src/database')
-rw-r--r--src/database/sql/sql.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go
index 38a173adba..8cdc903c68 100644
--- a/src/database/sql/sql.go
+++ b/src/database/sql/sql.go
@@ -2256,6 +2256,13 @@ var (
// Stmt is a prepared statement.
// A Stmt is safe for concurrent use by multiple goroutines.
+//
+// If a Stmt is prepared on a Tx or Conn, it will be bound to a single
+// underlying connection forever. If the Tx or Conn closes, the Stmt will
+// become unusable and all operations will return an error.
+// If a Stmt is prepared on a DB, it will remain usable for the lifetime of the
+// DB. When the Stmt needs to execute on a new underlying connection, it will
+// prepare itself on the new connection automatically.
type Stmt struct {
// Immutable:
db *DB // where we came from