mirror of https://github.com/jackc/pgx.git
Fix prepare failure
parent
c4050134cc
commit
340a2a5886
|
@ -438,6 +438,8 @@ func (pgConn *PgConn) Prepare(ctx context.Context, name, sql string, paramOIDs [
|
||||||
|
|
||||||
psd := &PreparedStatementDescription{Name: name, SQL: sql}
|
psd := &PreparedStatementDescription{Name: name, SQL: sql}
|
||||||
|
|
||||||
|
var parseErr error
|
||||||
|
|
||||||
readloop:
|
readloop:
|
||||||
for {
|
for {
|
||||||
msg, err := pgConn.ReceiveMessage()
|
msg, err := pgConn.ReceiveMessage()
|
||||||
|
@ -454,14 +456,17 @@ readloop:
|
||||||
psd.Fields = make([]pgproto3.FieldDescription, len(msg.Fields))
|
psd.Fields = make([]pgproto3.FieldDescription, len(msg.Fields))
|
||||||
copy(psd.Fields, msg.Fields)
|
copy(psd.Fields, msg.Fields)
|
||||||
case *pgproto3.ErrorResponse:
|
case *pgproto3.ErrorResponse:
|
||||||
go pgConn.recoverFromTimeout()
|
parseErr = errorResponseToPgError(msg)
|
||||||
return nil, errorResponseToPgError(msg)
|
|
||||||
case *pgproto3.ReadyForQuery:
|
case *pgproto3.ReadyForQuery:
|
||||||
break readloop
|
break readloop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<-pgConn.controller
|
<-pgConn.controller
|
||||||
|
|
||||||
|
if parseErr != nil {
|
||||||
|
return nil, parseErr
|
||||||
|
}
|
||||||
return psd, nil
|
return psd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -235,6 +235,20 @@ func TestConnectWithAfterConnectTargetSessionAttrsReadWrite(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConnPrepareFailure(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
pgConn, err := pgconn.Connect(context.Background(), os.Getenv("PGX_TEST_DATABASE"))
|
||||||
|
require.Nil(t, err)
|
||||||
|
defer closeConn(t, pgConn)
|
||||||
|
|
||||||
|
psd, err := pgConn.Prepare(context.Background(), "ps1", "SYNTAX ERROR", nil)
|
||||||
|
require.Nil(t, psd)
|
||||||
|
require.NotNil(t, err)
|
||||||
|
|
||||||
|
ensureConnValid(t, pgConn)
|
||||||
|
}
|
||||||
|
|
||||||
func TestConnExec(t *testing.T) {
|
func TestConnExec(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue