Skip to content

Rows assigned within a conditional fail to trigger "missing close" #11

Description

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions