gastownhall/beads · error
db: ListRemotes: query: %w
Error message
db: ListRemotes: query: %w
What it means
This error indicates the SQL query 'SELECT name, url FROM dolt_remotes' itself failed while listing remotes. It wraps the database driver error; rows were never returned, so the failure is at query execution, not row parsing.
Source
Thrown at internal/storage/domain/db/remote.go:41
func (r *remoteSQLRepositoryImpl) AddRemote(ctx context.Context, name, url string) error {
if err := r.vc.Remote(ctx, "add", name, url); err != nil {
return fmt.Errorf("db: AddRemote %s: %w", name, err)
}
return nil
}
func (r *remoteSQLRepositoryImpl) RemoveRemote(ctx context.Context, name string) error {
if err := r.vc.Remote(ctx, "remove", name); err != nil {
return fmt.Errorf("db: RemoveRemote %s: %w", name, err)
}
return nil
}
func (r *remoteSQLRepositoryImpl) ListRemotes(ctx context.Context) ([]domain.Remote, error) {
rows, err := r.runner.QueryContext(ctx, "SELECT name, url FROM dolt_remotes")
if err != nil {
return nil, fmt.Errorf("db: ListRemotes: query: %w", err)
}
defer rows.Close()
var remotes []domain.Remote
for rows.Next() {
var rem domain.Remote
if err := rows.Scan(&rem.Name, &rem.URL); err != nil {
return nil, fmt.Errorf("db: ListRemotes: scan: %w", err)
}
remotes = append(remotes, rem)
}
if err := rows.Err(); err != nil {
return nil, fmt.Errorf("db: ListRemotes: rows: %w", err)
}
return remotes, nil
}
View on GitHub (pinned to 71377f2769)
Solutions
- Read the wrapped cause after 'query:' for the driver error
- Verify the database is initialized and dolt_remotes exists (bd doctor / dolt schema check)
- Check SQL server connectivity and credentials
- Retry on transient connection errors; fail fast on missing-schema errors by running initialization
Example fix
// before
remotes, err := store.ListRemotes(ctx)
// after
remotes, err := store.ListRemotes(ctx)
if err != nil && dberrors.IsTableNotExist(err) {
return nil, nil // no remotes yet — uninitialized repo
} Defensive patterns
Strategy: try-catch
Validate before calling
// ensure repo is initialized and reachable first
if err := ensureInitialized(ctx); err != nil { return err }
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel() Type guard
func isQueryErr(err error) bool {
return err != nil && strings.Contains(err.Error(), "ListRemotes: query:")
} Try / catch
remotes, err := store.ListRemotes(ctx)
if err != nil {
if dberrors.IsTableNotExist(err) { return nil, nil } // uninitialized repo
if isTransient(err) { return retry(ctx, store.ListRemotes) }
return nil, err
} Prevention
- Initialize the Dolt database before querying remotes
- Use bounded contexts with sane timeouts
- Verify SQL server connectivity during startup health checks
When it happens
Trigger: Calling ListRemotes when QueryContext fails: dolt_remotes table missing (uninitialized repo), database connection refused/closed, permissions denied, or context cancelled before query completion.
Common situations: Running remote listing against a database that was never Dolt-initialized; Dolt SQL server down or restarted; network interruption to the SQL server; calling too early during startup before schema creation.
Understand the failure class
Background: "query failed", "%w: SQL error" — wrapped database query errors in Go libraries explained — this error's family across 3 libraries.
Related errors
- descendants: query: %w
- ErrQuery
- failed to begin transaction: %w
- failed to recompute is_blocked: %w
- failed to commit is_blocked repairs: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/3f0bf4382335e5a1.
Report an issue: GitHub.