// Package database represents a connector to the sqlite storage // backend to store persistent data from core and plugins package database import ( "io/fs" "github.com/jmoiron/sqlx" // Included support for pure-go sqlite _ "github.com/glebarez/go-sqlite" ) type ( // Connector represents a database connection having some extra // convenience methods Connector interface { Close() error DB() *sqlx.DB Migrate(module string, migrations MigrationStorage) error ReadCoreMeta(key string, value any) error StoreCoreMeta(key string, value any) error ReadEncryptedCoreMeta(key string, value any) error StoreEncryptedCoreMeta(key string, value any) error DecryptField(string) (string, error) EncryptField(string) (string, error) } // MigrationStorage represents a file storage containing migration // files to migrate a namespace to its desired state. The files // MUST be named in the schema `[0-9]+\.sql`. // // The storage is scanned recursively and all files are then // string-sorted by their base-name (`/migrations/001.sql => 001.sql`). // The last executed number is stored in numeric format, the next // migration which basename evaluates to higher numeric will be // executed. // // Numbers MUST be consecutive and MUST NOT leave out a number. A // missing number will result in the migration processing not to // catch up any migration afterwards. // // The first migration MUST be number 1 // // Previously executed migrations MUST NOT be modified! MigrationStorage interface { ReadDir(name string) ([]fs.DirEntry, error) ReadFile(name string) ([]byte, error) } )