]> Cypherpunks repositories - gostls13.git/commit
database/sql: proper prepared statement support in transactions
authorSarah Adams <shadams@google.com>
Thu, 19 Jan 2017 22:17:10 +0000 (14:17 -0800)
committerDaniel Theophanes <kardianos@gmail.com>
Wed, 8 Mar 2017 17:32:12 +0000 (17:32 +0000)
commit82e1732f14d6b50ba29dcc3f0eb71c80fa52c2d3
tree8d876adb78e68780491eb7c7f083b476ee75d88c
parent3b988eb643e6f2a1cae8981590891fd95e8112e5
database/sql: proper prepared statement support in transactions

This change was originally written by Marko Tiikkaja <marko@joh.to>.
https://go-review.googlesource.com/#/c/2035/

Previously *Tx.Stmt always prepared a new statement, even if an
existing one was available on the connection the transaction was on.
Now we first see if the statement is already available on the
connection and only prepare if it isn't. Additionally, when we do
need to prepare one, we store it in the parent *Stmt to allow it to be
later reused by other calls to *Tx.Stmt on that statement or just
straight up by *Stmt.Exec et al.

To make sure that the statement doesn't disappear unexpectedly, we
record a dependency from the statement returned by *Tx.Stmt to the
*Stmt it came from and set a new field, parentStmt, to point to the
originating *Stmt. When the transaction's *Stmt is closed, we remove
the dependency. This way the "parent" *Stmt can be closed by the user
without her having to know whether any transactions are still using it
or not.

Fixes #15606

Change-Id: I41b5056847e117ac61130328b0239d1e000a4a08
Reviewed-on: https://go-review.googlesource.com/35476
Run-TryBot: Daniel Theophanes <kardianos@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Theophanes <kardianos@gmail.com>
src/database/sql/sql.go
src/database/sql/sql_test.go