diff --git a/CHANGELOG.md b/CHANGELOG.md index 412a897c..0af91a59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# Unreleased + +## Fixes + +* Fix *ConnPool.Deallocate() not deleting prepared statement from map + # 2.8.1 (March 24, 2016) ## Features diff --git a/conn_pool.go b/conn_pool.go index e6b44934..680be677 100644 --- a/conn_pool.go +++ b/conn_pool.go @@ -366,6 +366,7 @@ func (p *ConnPool) Deallocate(name string) (err error) { } p.invalidateAcquired() + delete(p.preparedStatements, name) return nil } diff --git a/conn_pool_test.go b/conn_pool_test.go index 959dde41..5c8920a2 100644 --- a/conn_pool_test.go +++ b/conn_pool_test.go @@ -733,6 +733,36 @@ func TestConnPoolPrepare(t *testing.T) { } } +func TestConnPoolPrepareDeallocatePrepare(t *testing.T) { + t.Parallel() + + pool := createConnPool(t, 2) + defer pool.Close() + + _, err := pool.Prepare("test", "select $1::varchar") + if err != nil { + t.Fatalf("Unable to prepare statement: %v", err) + } + err = pool.Deallocate("test") + if err != nil { + t.Fatalf("Unable to deallocate statement: %v", err) + } + _, err = pool.Prepare("test", "select $1::varchar") + if err != nil { + t.Fatalf("Unable to prepare statement: %v", err) + } + + var s string + err = pool.QueryRow("test", "hello").Scan(&s) + if err != nil { + t.Fatalf("Executing prepared statement failed: %v", err) + } + + if s != "hello" { + t.Errorf("Prepared statement did not return expected value: %v", s) + } +} + func TestConnPoolPrepareWhenConnIsAlreadyAcquired(t *testing.T) { t.Parallel()