aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-07-14 16:28:28 -0400
committerRuss Cox <rsc@golang.org>2015-07-15 04:31:41 +0000
commit3c9f60c99a1212e6dd1233fea930d45ce9c32198 (patch)
treee72b02eca8d62f92b040609e9f9131f109366f97
parentf8c97abf5449610251b9c3c8c12332c79c66efdd (diff)
downloadgo-3c9f60c99a1212e6dd1233fea930d45ce9c32198.tar.gz
go-3c9f60c99a1212e6dd1233fea930d45ce9c32198.zip
database/sql: document closing requirements for Stmts
Fixes #8952. Change-Id: I678f9706eccb5a344eeb0244f45b7b7669830bdc Reviewed-on: https://go-review.googlesource.com/12204 Reviewed-by: Andrew Gerrand <adg@golang.org>
-rw-r--r--src/database/sql/sql.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go
index 17afa4966b..aaa4ea28be 100644
--- a/src/database/sql/sql.go
+++ b/src/database/sql/sql.go
@@ -840,6 +840,8 @@ const maxBadConnRetries = 2
// Prepare creates a prepared statement for later queries or executions.
// Multiple queries or executions may be run concurrently from the
// returned statement.
+// The caller must call the statement's Close method
+// when the statement is no longer needed.
func (db *DB) Prepare(query string) (*Stmt, error) {
var stmt *Stmt
var err error
@@ -1074,6 +1076,10 @@ func (db *DB) Driver() driver.Driver {
//
// After a call to Commit or Rollback, all operations on the
// transaction fail with ErrTxDone.
+//
+// The statements prepared for a transaction by calling
+// the transaction's Prepare or Stmt methods are closed
+// by the call to Commit or Rollback.
type Tx struct {
db *DB
@@ -1209,6 +1215,9 @@ func (tx *Tx) Prepare(query string) (*Stmt, error) {
// tx, err := db.Begin()
// ...
// res, err := tx.Stmt(updateMoney).Exec(123.45, 98293203)
+//
+// The returned statement operates within the transaction and can no longer
+// be used once the transaction has been committed or rolled back.
func (tx *Tx) Stmt(stmt *Stmt) *Stmt {
// TODO(bradfitz): optimize this. Currently this re-prepares
// each time. This is fine for now to illustrate the API but
@@ -1300,7 +1309,8 @@ type connStmt struct {
si driver.Stmt
}
-// Stmt is a prepared statement. Stmt is safe for concurrent use by multiple goroutines.
+// Stmt is a prepared statement.
+// A Stmt is safe for concurrent use by multiple goroutines.
type Stmt struct {
// Immutable:
db *DB // where we came from