mirror of https://github.com/jackc/pgx.git
Failure of Prepare should not break connection
parent
6fb360ba6c
commit
07c2ad1846
|
@ -274,9 +274,7 @@ func (c *Connection) Prepare(name, sql string) (err error) {
|
|||
ps := PreparedStatement{Name: name}
|
||||
|
||||
for {
|
||||
var t byte
|
||||
var r *MessageReader
|
||||
if t, r, err = c.rxMsg(); err == nil {
|
||||
if t, r, rxErr := c.rxMsg(); rxErr == nil {
|
||||
switch t {
|
||||
case parseComplete:
|
||||
case parameterDescription:
|
||||
|
@ -293,12 +291,12 @@ func (c *Connection) Prepare(name, sql string) (err error) {
|
|||
c.preparedStatements[name] = &ps
|
||||
return
|
||||
default:
|
||||
if err = c.processContextFreeMsg(t, r); err != nil {
|
||||
return
|
||||
if e := c.processContextFreeMsg(t, r); e != nil && err == nil {
|
||||
err = e
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return
|
||||
return rxErr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue