60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
|
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
|
||
|
}
|