package database import ( "fmt" "github.com/gobuffalo/packr/v2" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/source" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" "github.com/stashapp/stash/pkg/logger" "github.com/stashapp/stash/pkg/utils" "os" ) var DB *sqlx.DB var appSchemaVersion uint = 1 func Initialize(databasePath string) { runMigrations(databasePath) // https://github.com/mattn/go-sqlite3 conn, err := sqlx.Open("sqlite3", "file:"+databasePath+"?_fk=true") conn.SetMaxOpenConns(25) conn.SetMaxIdleConns(4) if err != nil { logger.Fatalf("db.Open(): %q\n", err) } DB = conn } func Reset(databasePath string) { _ = DB.Close() _ = os.Remove(databasePath) Initialize(databasePath) } // Migrate the database func runMigrations(databasePath string) { migrationsBox := packr.New("Migrations Box", "./migrations") packrSource := &Packr2Source{ Box: migrationsBox, Migrations: source.NewMigrations(), } databasePath = utils.FixWindowsPath(databasePath) s, _ := WithInstance(packrSource) m, err := migrate.NewWithSourceInstance( "packr2", s, fmt.Sprintf("sqlite3://%s", "file:"+databasePath), ) if err != nil { panic(err.Error()) } databaseSchemaVersion, _, _ := m.Version() stepNumber := appSchemaVersion - databaseSchemaVersion if stepNumber != 0 { err = m.Steps(int(stepNumber)) if err != nil { panic(err.Error()) } } }