diff --git a/driver/driver.go b/driver/driver.go index cd464f8..a92ec17 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -157,11 +157,10 @@ func (r rows) Columns() []string { func (r rows) Next(dest []driver.Value) error { if !r.s.Step() { - err := r.s.Err() - if err == nil { - return io.EOF + if err := r.s.Err(); err != nil { + return err } - return err + return io.EOF } for i := range dest { @@ -173,9 +172,14 @@ func (r rows) Next(dest []driver.Value) error { case sqlite3.TEXT: dest[i] = maybeDate(r.s.ColumnText(i)) case sqlite3.BLOB: - dest[i] = r.s.ColumnBlob(i, nil) + buf, _ := dest[i].([]byte) + dest[i] = r.s.ColumnBlob(i, buf) case sqlite3.NULL: - dest[i] = nil + if buf, ok := dest[i].([]byte); ok { + dest[i] = buf[0:0] + } else { + dest[i] = nil + } default: panic(assertErr) } diff --git a/driver/example_test.go b/driver/example_test.go index 35be1ba..e396bd5 100644 --- a/driver/example_test.go +++ b/driver/example_test.go @@ -106,19 +106,19 @@ func albumsByArtist(name string) ([]Album, error) { rows, err := db.Query("SELECT * FROM album WHERE artist = ?", name) if err != nil { - return nil, fmt.Errorf("albumsByArtist %q: %v", name, err) + return nil, fmt.Errorf("albumsByArtist %q: %w", name, err) } defer rows.Close() // Loop through rows, using Scan to assign column data to struct fields. for rows.Next() { var alb Album if err := rows.Scan(&alb.ID, &alb.Title, &alb.Artist, &alb.Price); err != nil { - return nil, fmt.Errorf("albumsByArtist %q: %v", name, err) + return nil, fmt.Errorf("albumsByArtist %q: %w", name, err) } albums = append(albums, alb) } if err := rows.Err(); err != nil { - return nil, fmt.Errorf("albumsByArtist %q: %v", name, err) + return nil, fmt.Errorf("albumsByArtist %q: %w", name, err) } return albums, nil } @@ -133,7 +133,7 @@ func albumByID(id int64) (Album, error) { if err == sql.ErrNoRows { return alb, fmt.Errorf("albumsById %d: no such album", id) } - return alb, fmt.Errorf("albumsById %d: %v", id, err) + return alb, fmt.Errorf("albumsById %d: %w", id, err) } return alb, nil } @@ -143,11 +143,11 @@ func albumByID(id int64) (Album, error) { func addAlbum(alb Album) (int64, error) { result, err := db.Exec("INSERT INTO album (title, artist, price) VALUES (?, ?, ?)", alb.Title, alb.Artist, alb.Price) if err != nil { - return 0, fmt.Errorf("addAlbum: %v", err) + return 0, fmt.Errorf("addAlbum: %w", err) } id, err := result.LastInsertId() if err != nil { - return 0, fmt.Errorf("addAlbum: %v", err) + return 0, fmt.Errorf("addAlbum: %w", err) } return id, nil }