]> Cypherpunks repositories - gostls13.git/commitdiff
database/sql: fix Tx.Query
authorBlake Mizerany <blake.mizerany@gmail.com>
Thu, 26 Jan 2012 01:49:30 +0000 (17:49 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 26 Jan 2012 01:49:30 +0000 (17:49 -0800)
Fixes #2784

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5574073

src/pkg/database/sql/sql.go
src/pkg/database/sql/sql_test.go

index 70499b9a952e3f7f5fe6391973f7cdf6bbabfba9..7e226b17dc62f52ed7f3c6e30dde2d85700084ad 100644 (file)
@@ -556,8 +556,11 @@ func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) {
        if err != nil {
                return nil, err
        }
-       defer stmt.Close()
-       return stmt.Query(args...)
+       rows, err := stmt.Query(args...)
+       if err == nil {
+               rows.closeStmt = stmt
+       }
+       return rows, err
 }
 
 // QueryRow executes a query that is expected to return at most one row.
index 3fb137eb24d49543a7db21fd961febe5ae2a7378..08db6d38ff87945acbbacb7683eee40edece8c5e 100644 (file)
@@ -311,6 +311,40 @@ func TestTxStmt(t *testing.T) {
        }
 }
 
+// Issue: http://golang.org/issue/2784
+// This test didn't fail before because we got luckly with the fakedb driver.
+// It was failing, and now not, in github.com/bradfitz/go-sql-test
+func TestTxQuery(t *testing.T) {
+       db := newTestDB(t, "")
+       defer closeDB(t, db)
+       exec(t, db, "CREATE|t1|name=string,age=int32,dead=bool")
+       exec(t, db, "INSERT|t1|name=Alice")
+
+       tx, err := db.Begin()
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer tx.Rollback()
+
+       r, err := tx.Query("SELECT|t1|name|")
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       if !r.Next() {
+               if r.Err() != nil {
+                       t.Fatal(r.Err())
+               }
+               t.Fatal("expected one row")
+       }
+
+       var x string
+       err = r.Scan(&x)
+       if err != nil {
+               t.Fatal(err)
+       }
+}
+
 // Tests fix for issue 2542, that we release a lock when querying on
 // a closed connection.
 func TestIssue2542Deadlock(t *testing.T) {