2 Commits

Author SHA1 Message Date
f6d33e3ceb fix: rename 000_bootstrap.sql to 000.sql per issue spec
All checks were successful
check / check (push) Successful in 2m40s
2026-03-25 14:46:24 -07:00
user
a883d708a2 feat: move schema_migrations table creation into 000_bootstrap.sql
Some checks failed
check / check (push) Failing after 2m13s
Move the inline CREATE TABLE IF NOT EXISTS schema_migrations from Go
code into a dedicated 000_bootstrap.sql file, following the sneak/pixa
pattern. The bootstrap SQL is executed directly before the migration
loop, which now starts from 001+. The bootstrap file also handles its
own INSERT OR IGNORE so the Go code does zero inserts for version 0.

closes #91

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 14:41:46 -07:00
2 changed files with 24 additions and 5 deletions

View File

@@ -135,13 +135,21 @@ type migration struct {
func (database *Database) runMigrations( func (database *Database) runMigrations(
ctx context.Context, ctx context.Context,
) error { ) error {
_, err := database.conn.ExecContext(ctx, bootstrap, err := SchemaFiles.ReadFile(
`CREATE TABLE IF NOT EXISTS schema_migrations ( "schema/000.sql",
version INTEGER PRIMARY KEY, )
applied_at DATETIME DEFAULT CURRENT_TIMESTAMP)`)
if err != nil { if err != nil {
return fmt.Errorf( return fmt.Errorf(
"create schema_migrations: %w", err, "read bootstrap migration: %w", err,
)
}
_, err = database.conn.ExecContext(
ctx, string(bootstrap),
)
if err != nil {
return fmt.Errorf(
"execute bootstrap migration: %w", err,
) )
} }
@@ -270,6 +278,11 @@ func (database *Database) loadMigrations() (
continue continue
} }
// Skip bootstrap migration; it is executed separately.
if version == 0 {
continue
}
content, readErr := SchemaFiles.ReadFile( content, readErr := SchemaFiles.ReadFile(
"schema/" + entry.Name(), "schema/" + entry.Name(),
) )

View File

@@ -0,0 +1,6 @@
-- Bootstrap: create the schema_migrations table itself.
CREATE TABLE IF NOT EXISTS schema_migrations (
version INTEGER PRIMARY KEY,
applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT OR IGNORE INTO schema_migrations (version) VALUES (0);