package sqlite import ( "context" "database/sql" "github.com/pkg/errors" ) type MigrateFunc func(ctx context.Context, tx *sql.Tx) error var documentStoreMigrations = []MigrateFunc{ documentStoreMigrationBaseSchema, documentStoreMigrationAddIDIndex, documentStoreMigrationAddRevisionColumn, } func documentStoreMigrationBaseSchema(ctx context.Context, tx *sql.Tx) error { query := ` CREATE TABLE IF NOT EXISTS documents ( id TEXT PRIMARY KEY, collection TEXT NOT NULL, data TEXT, created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL, UNIQUE(id, collection) ON CONFLICT REPLACE ); ` if _, err := tx.ExecContext(ctx, query); err != nil { return errors.WithStack(err) } return nil } func documentStoreMigrationAddIDIndex(ctx context.Context, tx *sql.Tx) error { query := ` CREATE INDEX IF NOT EXISTS collection_idx ON documents (collection); ` if _, err := tx.ExecContext(ctx, query); err != nil { return errors.WithStack(err) } return nil } func documentStoreMigrationAddRevisionColumn(ctx context.Context, tx *sql.Tx) error { query := ` ALTER TABLE documents ADD COLUMN revision INTEGER DEFAULT 0; ` if _, err := tx.ExecContext(ctx, query); err != nil { return errors.WithStack(err) } return nil }