gastownhall/beads · error
reading SHOW CREATE TABLE %s: %w
Error message
reading SHOW CREATE TABLE %s: %w
What it means
Wraps a failure to run and read SHOW CREATE TABLE for a table. This is the only way Dolt exposes generated-column shape — INFORMATION_SCHEMA.COLUMNS returns EXTRA and GENERATION_EXPRESSION empty for generated columns — so wispDepHasStoredGeneratedDependsOnID depends on it. Thrown when the query fails or the row cannot be scanned (e.g., the table does not exist at call time).
Source
Thrown at internal/storage/schema/migration_repairs.go:745
if err := db.QueryRowContext(ctx, `
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND CONSTRAINT_NAME = ?
`, table, constraint).Scan(&count); err != nil {
return false, fmt.Errorf("checking constraint %s on %s: %w", constraint, table, err)
}
return count > 0, nil
}
// schemaShowCreateTable returns a table's CREATE statement. It is the only
// place Dolt exposes generated-column shape: INFORMATION_SCHEMA.COLUMNS returns
// EXTRA and GENERATION_EXPRESSION empty for a generated column, and IS_GENERATED
// does not exist there at all.
func schemaShowCreateTable(ctx context.Context, db DBConn, table string) (string, error) {
var name, ddl string
// table is a package constant, never caller input; SHOW CREATE TABLE takes
// no placeholders.
if err := db.QueryRowContext(ctx, "SHOW CREATE TABLE `"+table+"`").Scan(&name, &ddl); err != nil {
return "", fmt.Errorf("reading SHOW CREATE TABLE %s: %w", table, err)
}
return ddl, nil
}
// schemaColumnInPrimaryKey reports whether column is (one of) table's PRIMARY
// KEY column(s) specifically -- distinct from schemaHasPrimaryKey, which only
// says a primary key exists without saying which column(s) it covers.
func schemaColumnInPrimaryKey(ctx context.Context, db DBConn, table, column string) (bool, error) {
var count int
if err := db.QueryRowContext(ctx, `
SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ? AND CONSTRAINT_NAME = 'PRIMARY'
`, table, column).Scan(&count); err != nil {
return false, err
}
return count > 0, nil
}
View on GitHub (pinned to 71377f2769)
Solutions
- Confirm the table still exists before calling (or re-run the repair, which re-checks presence).
- Inspect the wrapped driver error; restore connectivity if the server is down.
- If the table genuinely does not exist and the repair expected it, determine whether a prior migration step already replaced it — re-running the repair flow should take the correct branch.
- Check Dolt server version supports SHOW CREATE TABLE output with generated-column expression.
Defensive patterns
Strategy: validation
Validate before calling
// ensure the table exists before asking for its DDL
exists, err := schemaTableExists(ctx, db, table)
if err != nil || !exists { /* skip SHOW CREATE TABLE path */ } Type guard
func isMissingTableErr(err error) bool {
return strings.Contains(err.Error(), "doesn't exist") || strings.Contains(err.Error(), "not found")
} Try / catch
ddl, err := schemaShowCreateTable(ctx, db, table)
if err != nil {
if isMissingTableErr(err) { return nil /* table already replaced/dropped */ }
return err
} Prevention
- Always check table existence before SHOW CREATE TABLE
- Avoid concurrent migrations that drop/rename the same table
- Run within a single migration session so the table cannot disappear mid-check
- Use a Dolt version that reports generated-column shape in SHOW CREATE TABLE
When it happens
Trigger: SHOW CREATE TABLE `<table>` errors: the table was dropped between the existence check and this call, the server is down, or the Scan into (name, ddl) fails because no row was returned.
Common situations: Race where a concurrent migration drops/renames the table mid-repair; querying a database where the table never existed because the caller skipped the presence check; connection failure.
Related errors
- adding wisp_dependencies.%s for migration 0053: %w
- creating %s: %w
- pre-repair for migration %s: %w
- dropping idx_wisp_dep_type_target for the 0058 repair: %w
- dropping %s for the 0058 repair: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/bca2ed949fe911fc.
Report an issue: GitHub.