package database import ( "path/filepath" "certmanager/pkg/logger" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" ) const schema = ` --- DROP TABLE IF EXISTS manifests; CREATE TABLE IF NOT EXISTS manifests ( id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, reference VARCHAR(255) NOT NULL, contentType VARCHAR(255) NOT NULL, payload VARCHAR(4096) NOT NULL ); CREATE INDEX IF NOT EXISTS manifest_index ON manifests(name, reference); CREATE TABLE IF NOT EXISTS blobs ( id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, digest VARCHAR(255) NOT NULL, used INTEGER ); CREATE INDEX IF NOT EXISTS blobs_index ON blobs(name, digest); ` type Database struct { datapath string db *sqlx.DB log *logger.Logger } func NewDatabase(datapath string) (*Database, error) { var err error db := &Database{ datapath: datapath, } db.log = logger.NewLogger("database") return db, err } func (db *Database) InitDatabase() error { var err error dbPath := filepath.Join(db.datapath, "certmanager.db") db.db, err = sqlx.Open("sqlite3", dbPath) if err != nil { return err } err = db.db.Ping() if err != nil { return err } _, err = db.db.Exec(schema) if err != nil { return err } return err }