From 329ac717857b081c628b5837ad269a77ae6c8f0a Mon Sep 17 00:00:00 2001 From: restitux Date: Fri, 15 Apr 2022 00:00:19 -0600 Subject: [PATCH] DB is only initalized when freshly created --- main.go | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index faea142..7c9854a 100644 --- a/main.go +++ b/main.go @@ -121,8 +121,12 @@ func open_database(data_dir string) (*sql.DB, error) { return nil, fmt.Errorf("Could not open database: %v", err) } + + // check if the database is new + is_db_new := `SELECT CASE WHEN EXISTS(SELECT 1 FROM sqlite_master) THEN 0 ELSE 1 END AS IsEmpty;` + // initalize database - sqlStmt := ` + db_init := ` CREATE TABLE tvshows( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, @@ -140,9 +144,35 @@ CREATE TABLE episodes( ); ` - _, err = db.Exec(sqlStmt) + // transaction new check isn't racy + tx, err := db.Begin() if err != nil { - return nil, fmt.Errorf("Could not initalize database: %v", err) + return nil, fmt.Errorf("Could not begin db transaction: %v", err) + } + defer tx.Commit() + + // check if the database is new + rows, err := tx.Query(is_db_new) + if err != nil { + return nil, fmt.Errorf("Could not check if database was new: %v", err) + } + defer rows.Close() + + + rows.Next() + var isEmpty int + rows.Scan(&isEmpty) + + // if the sqlite_master table is empty (the databse is newly created) + if isEmpty == 1 { + log.Infof("Creating new database at %v\n", db_path) + // initalize database + _, err = tx.Exec(db_init) + if err != nil { + return nil, fmt.Errorf("Could not initalize database: %v", err) + } + } else { + log.Infof("Existing database found at %v", db_path) } return db, nil