From 79517aaa0e5d9cccf3bf8c7398eb0fa6b03c0c8a Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Fri, 21 Jul 2017 15:22:32 -0500 Subject: [PATCH] Fix batch query with query syntax error --- batch.go | 15 +++++++++------ batch_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/batch.go b/batch.go index 3c16fd13..fc6f0d03 100644 --- a/batch.go +++ b/batch.go @@ -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 diff --git a/batch_test.go b/batch_test.go index ffd3cc50..e12e4f32 100644 --- a/batch_test.go +++ b/batch_test.go @@ -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") + } +}