summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2024-05-09 21:31:19 +0200
committerxengineering <me@xengineering.eu>2024-05-09 21:31:19 +0200
commitca19c73b305932a4ef41d31787eabb25f9417a05 (patch)
treec35a6855053c8f4f6cfec05c154f6e9bfb3a1d9a
parent2db08f564ddb38e80c79c9338047f4e8f3a977e8 (diff)
downloadceres-ca19c73b305932a4ef41d31787eabb25f9417a05.tar
ceres-ca19c73b305932a4ef41d31787eabb25f9417a05.tar.zst
ceres-ca19c73b305932a4ef41d31787eabb25f9417a05.zip
model: Detect if database is empty
An empty database requires to add the metadata table with the version entry to make migrations possible. Thus this detection will be required.
-rw-r--r--model/database.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/model/database.go b/model/database.go
index 3953c92..16a6cea 100644
--- a/model/database.go
+++ b/model/database.go
@@ -57,8 +57,33 @@ func Transaction(f func(*sql.Tx) error) error {
return tx.Commit()
}
+func isDatabaseEmpty(tx *sql.Tx) bool {
+ cmd := `SELECT COUNT(*) FROM sqlite_master WHERE type='table'`
+ rows, err := tx.Query(cmd)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer rows.Close()
+
+ if !rows.Next() {
+ log.Fatalf("No rows on request of database table number")
+ }
+
+ var number int
+ err = rows.Scan(&number)
+ if err != nil {
+ log.Fatalf("Failed to scan number of database tables to integer")
+ }
+
+ return number == 0
+}
+
func MigrateDatabase() {
err := Transaction(func(tx *sql.Tx) error {
+ if isDatabaseEmpty(tx) {
+ log.Println("Starting with empty database")
+ }
+
query, err := GetSql(`migrate`)
if err != nil {
log.Fatal(err)