Reuse byte slices.

This commit is contained in:
Nuno Cruces
2023-02-17 12:30:07 +00:00
parent 72e0415184
commit 643b004727
2 changed files with 16 additions and 12 deletions

View File

@@ -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)
}

View File

@@ -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
}