@@ -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:\n have: %s\n want: %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:\n have: %s\n want: %s" , rows .Err (), tt .wantRowsErr )
1067+ }
1068+ }
1069+ })
1070+ }
1071+ }
1072+
10401073func 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 ("\n have: %#v\n want: %#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 ("\n have:\n %s\n want:\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