Skip to content

Commit 32ba56b

Browse files
committed
Expand tests for multiple result sets
While looking at #566 and #633, I found both were already fixed. But expand the test for #566 and add a test for #633.
1 parent c2cfac1 commit 32ba56b

1 file changed

Lines changed: 90 additions & 5 deletions

File tree

conn_test.go

Lines changed: 90 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,17 +1037,102 @@ func TestMultipleResult(t *testing.T) {
10371037
}
10381038
}
10391039

1040+
func TestMultipleResultError(t *testing.T) {
1041+
db := pqtest.MustDB(t)
1042+
1043+
tests := []struct {
1044+
query string
1045+
wantErr string
1046+
wantRowsErr string
1047+
}{
1048+
{`select nonexistent; select 1;`, `column "nonexistent" does not exist`, ``},
1049+
{`select 1; select nonexistent;`, ``, `column "nonexistent" does not exist`},
1050+
{`select 1; select 2; select 3; select nonexistent; select 4;`, ``, `column "nonexistent" does not exist`},
1051+
}
1052+
1053+
for _, tt := range tests {
1054+
t.Run("", func(t *testing.T) {
1055+
rows, err := db.Query(tt.query)
1056+
if !pqtest.ErrorContains(err, tt.wantErr) {
1057+
t.Fatalf("wrong error:\nhave: %s\nwant: %s", err, tt.wantErr)
1058+
}
1059+
if err == nil {
1060+
defer rows.Close()
1061+
for rows.Next() {
1062+
}
1063+
for rows.NextResultSet() {
1064+
}
1065+
if !pqtest.ErrorContains(rows.Err(), tt.wantRowsErr) {
1066+
t.Fatalf("wrong error:\nhave: %s\nwant: %s", rows.Err(), tt.wantRowsErr)
1067+
}
1068+
}
1069+
})
1070+
}
1071+
}
1072+
10401073
func TestMultipleResultEmpty(t *testing.T) {
10411074
t.Parallel()
10421075

1043-
have := pqtest.QueryRow[int](t, pqtest.MustDB(t), `select 1 where false; select 2`)
1044-
want := map[string]int{"(rs 1) ?column?": 2}
1045-
if !reflect.DeepEqual(have, want) {
1046-
t.Errorf("\nhave: %#v\nwant: %#v", have, want)
1076+
db := pqtest.MustDB(t)
1077+
pqtest.Exec(t, db, `create temp table tbl (i int, t text)`)
1078+
pqtest.Exec(t, db, `insert into tbl values (7, $1), (8, $2), (9, $3)`, "aa", "bb", "cc")
1079+
1080+
rows, err := db.Query(`
1081+
select 1 as first where false;
1082+
select 2 as second where false;
1083+
select * from tbl;
1084+
select 4 as fourth where false;
1085+
select * from tbl where i = 8;
1086+
`)
1087+
if err != nil {
1088+
t.Fatal(err)
1089+
}
1090+
defer rows.Close()
1091+
1092+
var (
1093+
have = new(strings.Builder)
1094+
rs int
1095+
)
1096+
read := func() {
1097+
cols, err := rows.Columns()
1098+
if err != nil {
1099+
t.Fatal(err)
1100+
}
1101+
fmt.Fprintf(have, "rs %d: %v\n", rs, cols)
1102+
for rows.Next() {
1103+
args, argsp := make([]any, len(cols)), make([]any, len(cols))
1104+
for i := range args {
1105+
argsp[i] = &args[i]
1106+
}
1107+
err := rows.Scan(argsp...)
1108+
if err != nil {
1109+
t.Fatal(err)
1110+
}
1111+
fmt.Fprintf(have, "ROW: %v\n", args)
1112+
}
1113+
rs++
1114+
}
1115+
read()
1116+
for rows.NextResultSet() {
1117+
read()
1118+
}
1119+
want := strings.ReplaceAll(`
1120+
rs 0: [first]
1121+
rs 1: [second]
1122+
rs 2: [i t]
1123+
ROW: [7 aa]
1124+
ROW: [8 bb]
1125+
ROW: [9 cc]
1126+
rs 3: [fourth]
1127+
rs 4: [i t]
1128+
ROW: [8 bb]
1129+
`[1:], "\t", "")
1130+
if have.String() != want {
1131+
t.Errorf("\nhave:\n%s\nwant:\n%s", have, want)
10471132
}
10481133
}
10491134

1050-
func TestMultipleSimpleQuery(t *testing.T) {
1135+
func TestMultipleResultSimpleQuery(t *testing.T) {
10511136
t.Parallel()
10521137
db := pqtest.MustDB(t)
10531138

0 commit comments

Comments
 (0)