gastownhall/beads · error
invalid database name: %s
Error message
invalid database name: %s
What it means
ValidateDatabaseName rejects names that do not match validDatabasePattern (safe identifier characters). This is an injection guard: database names are interpolated into backtick-quoted CREATE DATABASE statements, and characters that could break out of backtick escaping are disallowed. The offending name is included in the message.
Source
Thrown at internal/storage/dolt/history.go:37
var validDatabasePattern = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_\-]*$`)
// validateRef checks if a ref is safe to use in queries.
// Delegates to issueops.ValidateRef.
func validateRef(ref string) error {
return issueops.ValidateRef(ref)
}
// ValidateDatabaseName checks if a database name is safe to use in queries.
// Prevents SQL injection via backtick escaping in CREATE DATABASE statements.
func ValidateDatabaseName(name string) error {
if name == "" {
return fmt.Errorf("database name cannot be empty")
}
if len(name) > 64 {
return fmt.Errorf("database name too long")
}
if !validDatabasePattern.MatchString(name) {
return fmt.Errorf("invalid database name: %s", name)
}
return nil
}
// validateTableName checks if a table name is safe to use in queries
func validateTableName(table string) error {
if table == "" {
return fmt.Errorf("table name cannot be empty")
}
if len(table) > 64 {
return fmt.Errorf("table name too long")
}
if !validTablePattern.MatchString(table) {
return fmt.Errorf("invalid table name: %s", table)
}
return nil
}
View on GitHub (pinned to 71377f2769)
Solutions
- Sanitize the database name to match the allowed identifier pattern (alphanumerics/underscores, no backticks, quotes, spaces or path separators).
- If the name comes from a repo slug, replace '/' and other separators with '_' before calling bootstrap/connect.
- Trim whitespace from configuration/env-sourced values; re-read the config to confirm the intended short name is used, not a URL.
Example fix
// before dbName := strings.TrimPrefix(remote, "https://doltremoteapi.dolthub.com/") // "org/repo" store, err := dolt.BootstrapFromRemoteWithDB(ctx, remote, dbName) // after dbName := strings.ReplaceAll(strings.TrimPrefix(remote, "https://doltremoteapi.dolthub.com/"), "/", "_") // "org_repo" store, err := dolt.BootstrapFromRemoteWithDB(ctx, remote, dbName)
Defensive patterns
Strategy: validation
Validate before calling
var dbPattern = regexp.MustCompile(`^[A-Za-z0-9_]+$`)
func validDBName(name string) bool { return dbPattern.MatchString(name) }
if !validDBName(dbName) { return fmt.Errorf("db name %q contains invalid characters", dbName) } Prevention
- Never pass raw URLs or org/repo slugs as database names; normalize separators to '_' first.
- Trim whitespace from config/env-sourced values before use.
- Treat identifiers as untrusted input — validate against a strict allowlist pattern everywhere they are constructed.
When it happens
Trigger: Passing BootstrapFromRemoteWithDB or openServerConnection a database name containing characters outside the allowed identifier set — e.g. backticks, quotes, spaces, slashes, hyphens in positions the pattern rejects, or non-ASCII characters.
Common situations: Using an org/repo string like 'myorg/myrepo' or 'my repo' as a database name; names with URL-encoded characters or trailing whitespace from config files; programmatic name generation inserting separators like ':' or '#'.
Related errors
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/559a1c09d2d99fb0.
Report an issue: GitHub.