Fix batch query with query syntax error

v3-ann
Jack Christensen 2017-07-21 15:22:32 -05:00
parent dde965bc9d
commit 79517aaa0e
2 changed files with 43 additions and 6 deletions

View File

@ -167,25 +167,28 @@ func (b *Batch) ExecResults() (CommandTag, error) {
// QueryResults reads the results from the next query in the batch as if the
// query has been sent with Query.
func (b *Batch) QueryResults() (*Rows, error) {
rows := b.conn.getRows("batch query", nil)
if b.err != nil {
return nil, b.err
rows.fatal(b.err)
return rows, b.err
}
select {
case <-b.ctx.Done():
b.die(b.ctx.Err())
return nil, b.ctx.Err()
rows.fatal(b.err)
return rows, b.ctx.Err()
default:
}
b.resultsRead++
rows := b.conn.getRows("batch query", nil)
fieldDescriptions, err := b.conn.readUntilRowDescription()
if err != nil {
b.die(b.ctx.Err())
return nil, err
b.die(err)
rows.fatal(b.err)
return rows, err
}
rows.batch = b

View File

@ -442,3 +442,37 @@ func TestConnBeginBatchQueryError(t *testing.T) {
t.Error("conn should be dead, but was alive")
}
}
func TestConnBeginBatchQuerySyntaxError(t *testing.T) {
t.Parallel()
conn := mustConnect(t, *defaultConnConfig)
defer closeConn(t, conn)
batch := conn.BeginBatch()
batch.Queue("select 1 1",
nil,
nil,
[]int16{pgx.BinaryFormatCode},
)
err := batch.Send(context.Background(), nil)
if err != nil {
t.Fatal(err)
}
var n int32
err = batch.QueryRowResults().Scan(&n)
if pgErr, ok := err.(pgx.PgError); !(ok && pgErr.Code == "42601") {
t.Errorf("rows.Err() => %v, want error code %v", err, 42601)
}
err = batch.Close()
if err == nil {
t.Error("Expected error")
}
if conn.IsAlive() {
t.Error("conn should be dead, but was alive")
}
}