gastownhall/beads · error

iter dependents: query: %w

Error message

iter dependents: query: %w

What it means

After acquiring a connection, iterIssuesWithDepType runs the dependents query with conn.QueryContext. This error wraps a failure of that query execution — SQL error, missing/corrupt dependency tables, bad query args, or connection failure — and the connection is closed before returning. It happens before any row iteration begins.

Source

Thrown at internal/storage/dolt/iter_dependents.go:99

	deps, err := s.GetDependenciesWithMetadata(ctx, issueID)
	if err != nil {
		return nil, err
	}
	return storage.NewSliceIter(deps), nil
}

func (s *DoltStore) iterIssuesWithDepType(ctx context.Context, q string, args ...any) (storage.Iter[types.IssueWithDependencyMetadata], error) {
	if s.closed.Load() {
		return nil, ErrStoreClosed
	}
	conn, err := s.db.Conn(ctx)
	if err != nil {
		return nil, fmt.Errorf("iter dependents: acquire conn: %w", err)
	}
	rows, err := conn.QueryContext(ctx, q, args...)
	if err != nil {
		_ = conn.Close()
		return nil, fmt.Errorf("iter dependents: query: %w", err)
	}
	return &doltDependentsIter{s: s, conn: conn, rows: rows}, nil
}

func (it *doltDependentsIter) Next(ctx context.Context) bool {
	if it.err != nil || it.closed {
		return false
	}
	if err := ctx.Err(); err != nil {
		it.err = err
		return false
	}
	if !it.rows.Next() {
		it.err = it.rows.Err()
		return false
	}
	iss, depType, err := scanIssueWithDepTypeFrom(it.rows)
	if err != nil {

View on GitHub (pinned to 71377f2769)

Solutions

  1. Read the wrapped SQL error; if it names a missing table/column, run the beads schema migration.
  2. Verify the argument (issue/prefix ID) is well-formed — a type or format mismatch surfaces here.
  3. Retry with a longer context deadline if the failure is a timeout on a large dependency graph.
  4. Check Dolt server health and driver/server version compatibility; restart or upgrade as needed.

Example fix

// before
rows, err := conn.QueryContext(ctx, q, args...)
if err != nil {
    _ = conn.Close()
    return nil, fmt.Errorf("iter dependents: query: %w", err)
}
// after (validate schema prerequisites first)
var n int
if err := s.db.QueryRowContext(ctx, "SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'dependencies'").Scan(&n); err == nil && n == 0 {
    return nil, fmt.Errorf("iter dependents: dependencies table missing; run schema migration")
}
rows, err := conn.QueryContext(ctx, q, args...)
if err != nil {
    _ = conn.Close()
    return nil, fmt.Errorf("iter dependents: query: %w", err)
}
Defensive patterns

Strategy: try-catch

Validate before calling

var n int
if err := db.QueryRow("SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'dependencies'").Scan(&n); err != nil || n == 0 {
    return fmt.Errorf("dependencies table missing; run schema migration")
}

Type guard

func isDependentsQueryErr(err error) bool {
    return err != nil && strings.Contains(err.Error(), "iter dependents: query")
}

Try / catch

it, err := store.IterDependentsWithMetadata(ctx, issueID)
if err != nil {
    if isDependentsQueryErr(err) {
        log.Printf("dependents query failed (check schema/migration): %v", errors.Unwrap(err))
        return fmt.Errorf("retry after schema check: %w", err)
    }
    return err
}
defer it.Close()

Prevention

When it happens

Trigger: Calling IterDependentsWithMetadata when the underlying dependents SQL (join over issues/dependencies tables) fails: malformed dependency table schema, SQL syntax/type error in the composed query, cancelled context during query start, or the freshly acquired connection failing on first use.

Common situations: Databases restored from old exports missing dependency tables/columns; driver/server version mismatch rejecting SQL features used in the query; context deadlines too short for large dependency graphs.

Related errors


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/6da0bb26384823e1. Report an issue: GitHub.