sqlclosecheck
sqlclosecheck copied to clipboard
Rows assigned within a conditional fail to trigger "missing close"
Thank you for the tool. Here's a repro of an issue I encountered.
Expected: The linter warns me that I never closed this rows
Actual: Not detected
package sqlx_examples
import (
"context"
"database/sql"
"log"
"strings"
)
func conditionalRowsMissingClose(onlyAdults bool) {
age := 21
var (
rows *sql.Rows
err error
)
if onlyAdults {
rows, err = db.QueryContext(context.Background(), "SELECT name FROM users WHERE age >= ?", age)
} else {
rows, err = db.QueryContext(context.Background(), "SELECT name FROM users", age)
}
if err != nil {
log.Fatal(err)
}
// defer rows.Close()
names := make([]string, 0)
for rows.Next() {
var name string
if err := rows.Scan(&name); err != nil {
log.Fatal(err)
}
names = append(names, name)
}
// Check for errors from iterating over rows.
if err := rows.Err(); err != nil {
log.Fatal(err)
}
log.Printf("%s are at least %d years old", strings.Join(names, ", "), age)
}
Thank you for the test case. I am adding to my list of things to look at. No hard ETA, hoping to have some time of the next couple of weeks.