Failure of Prepare should not break connection

This commit is contained in:
Jack Christensen 2013-07-09 12:51:00 -05:00
parent 6fb360ba6c
commit 07c2ad1846
2 changed files with 21 additions and 6 deletions

View File

@ -274,9 +274,7 @@ func (c *Connection) Prepare(name, sql string) (err error) {
ps := PreparedStatement{Name: name} ps := PreparedStatement{Name: name}
for { for {
var t byte if t, r, rxErr := c.rxMsg(); rxErr == nil {
var r *MessageReader
if t, r, err = c.rxMsg(); err == nil {
switch t { switch t {
case parseComplete: case parseComplete:
case parameterDescription: case parameterDescription:
@ -293,12 +291,12 @@ func (c *Connection) Prepare(name, sql string) (err error) {
c.preparedStatements[name] = &ps c.preparedStatements[name] = &ps
return return
default: default:
if err = c.processContextFreeMsg(t, r); err != nil { if e := c.processContextFreeMsg(t, r); e != nil && err == nil {
return err = e
} }
} }
} else { } else {
return return rxErr
} }
} }
} }

View File

@ -437,3 +437,20 @@ func TestPrepare(t *testing.T) {
} }
} }
} }
func TestPrepareFailure(t *testing.T) {
conn, err := Connect(*defaultConnectionParameters)
if err != nil {
t.Fatalf("Unable to establish connection: %v", err)
}
defer conn.Close()
if err = conn.Prepare("badSQL", "select foo"); err == nil {
t.Fatal("Prepare should have failed with syntax error")
}
if _, err = conn.SelectValue("select 1"); err != nil {
t.Fatalf("Prepare failure appears to have broken connection: %v", err)
}
}