mirror of
https://github.com/jackc/pgx.git
synced 2025-04-27 13:14:32 +00:00
Failure of Prepare should not break connection
This commit is contained in:
parent
6fb360ba6c
commit
07c2ad1846
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user