@@ -192,6 +192,54 @@ localhost:*:*:*:pass_C
192192 assertPassword (values {"host" : "server" , "passfile" : pgpassFile , "dbname" : "some_db" , "user" : "some_user" }, "pass_A" )
193193}
194194
195+ func TestExecNilSlice (t * testing.T ) {
196+ db := pqtest .MustDB (t )
197+ defer db .Close ()
198+
199+ _ , err := db .Exec ("create temp table x (b1 text, b2 text, b3 text)" )
200+ if err != nil {
201+ t .Fatal (err )
202+ }
203+ var (
204+ b1 []byte
205+ b2 []string
206+ b3 = []byte {}
207+ )
208+ _ , err = db .Exec ("insert into x (b1, b2, b3) values ($1, $2, $3)" , b1 , b2 , b3 )
209+ if err != nil {
210+ t .Fatal (err )
211+ }
212+
213+ rows , err := db .Query (`select * from x` )
214+ if err != nil {
215+ t .Fatal (err )
216+ }
217+ defer rows .Close ()
218+ for rows .Next () {
219+ if rows .Err () != nil {
220+ t .Fatal (rows .Err ())
221+ }
222+ var b1 , b2 , b3 * string
223+ err = rows .Scan (& b1 , & b2 , & b3 )
224+ if err != nil {
225+ t .Fatal (err )
226+ }
227+
228+ deref := func (s * string ) string {
229+ if s == nil {
230+ return "<nil>"
231+ }
232+ return fmt .Sprintf ("%q" , * s )
233+ }
234+
235+ want := `b1=<nil>; b2=<nil>; b3=""`
236+ have := fmt .Sprintf ("b1=%s; b2=%s; b3=%s" , deref (b1 ), deref (b2 ), deref (b3 ))
237+ if want != have {
238+ t .Errorf ("\n want: %s\n have: %s" , want , have )
239+ }
240+ }
241+ }
242+
195243func TestExec (t * testing.T ) {
196244 db := pqtest .MustDB (t )
197245 defer db .Close ()
@@ -205,7 +253,6 @@ func TestExec(t *testing.T) {
205253 if err != nil {
206254 t .Fatal (err )
207255 }
208-
209256 if n , _ := r .RowsAffected (); n != 1 {
210257 t .Fatalf ("expected 1 row affected, not %d" , n )
211258 }
@@ -214,29 +261,24 @@ func TestExec(t *testing.T) {
214261 if err != nil {
215262 t .Fatal (err )
216263 }
217-
218264 if n , _ := r .RowsAffected (); n != 3 {
219265 t .Fatalf ("expected 3 rows affected, not %d" , n )
220266 }
221267
222- // SELECT doesn't send the number of returned rows in the command tag
223- // before 9.0
224- if getServerVersion (t , db ) >= 90000 {
225- r , err = db .Exec ("SELECT g FROM generate_series(1, 2) g" )
226- if err != nil {
227- t .Fatal (err )
228- }
229- if n , _ := r .RowsAffected (); n != 2 {
230- t .Fatalf ("expected 2 rows affected, not %d" , n )
231- }
268+ r , err = db .Exec ("SELECT g FROM generate_series(1, 2) g" )
269+ if err != nil {
270+ t .Fatal (err )
271+ }
272+ if n , _ := r .RowsAffected (); n != 2 {
273+ t .Fatalf ("expected 2 rows affected, not %d" , n )
274+ }
232275
233- r , err = db .Exec ("SELECT g FROM generate_series(1, $1) g" , 3 )
234- if err != nil {
235- t .Fatal (err )
236- }
237- if n , _ := r .RowsAffected (); n != 3 {
238- t .Fatalf ("expected 3 rows affected, not %d" , n )
239- }
276+ r , err = db .Exec ("SELECT g FROM generate_series(1, $1) g" , 3 )
277+ if err != nil {
278+ t .Fatal (err )
279+ }
280+ if n , _ := r .RowsAffected (); n != 3 {
281+ t .Fatalf ("expected 3 rows affected, not %d" , n )
240282 }
241283}
242284
0 commit comments