From 142c5438e63dba5b48da34a864adc68677e1796e Mon Sep 17 00:00:00 2001 From: Vincent Riquer Date: Tue, 8 Oct 2013 13:40:03 +0200 Subject: [PATCH] SQL Schema versioning, VACUUM on exit --- lib/database/checkVersion | 26 ++++++++++++++++++++++++++ lib/database/close | 1 + lib/database/open | 1 + share/schema.sql | 9 ++++++--- 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 lib/database/checkVersion diff --git a/lib/database/checkVersion b/lib/database/checkVersion new file mode 100644 index 0000000..eb80d20 --- /dev/null +++ b/lib/database/checkVersion @@ -0,0 +1,26 @@ +#!/bin/bash +currentdbversion=1 +checkDatabaseVersion() { + local dbversion + if dbversion=$(Select atom version <<<"1 = 1") + then + if (( dbversion == currentdbversion )) + then + return 0 + elif (( dbversion < currentversion )) + then + until (( dbversion == currentversion )) + do + upgradedatabase_${dbversion}_$((dbversion+1)) + dbversion=$(Select atom version <<<"1 = 1") + done + else + echo "Database schema version $dbversion is higher than + that of this version of AtOM + ($currentdbversion). Bailing out." >&2 + exit 1 + fi + else + Insert atom 1 <<<"version $currentdbversion" + fi +} diff --git a/lib/database/close b/lib/database/close index 2d6e1a2..19a412b 100644 --- a/lib/database/close +++ b/lib/database/close @@ -1,5 +1,6 @@ #!/bin/bash closeDatabase() { + echo 'vacuum;' >&3 echo .quit >&3 (( debug )) && echo -n "Waiting for SQLite to terminate... " wait diff --git a/lib/database/open b/lib/database/open index ff829fe..c20caca 100644 --- a/lib/database/open +++ b/lib/database/open @@ -15,4 +15,5 @@ openDatabase() { cat $schema >&3 echo '.separator ::AtOM:SQL:Sep::' >&3 echo 'PRAGMA foreign_keys = ON;' >&3 + checkDatabaseVersion } diff --git a/share/schema.sql b/share/schema.sql index 9de9a43..d8f6888 100644 --- a/share/schema.sql +++ b/share/schema.sql @@ -1,4 +1,7 @@ BEGIN TRANSACTION; +CREATE TABLE IF NOT EXISTS atom ( + version INTEGER +); CREATE TABLE IF NOT EXISTS source_files ( id INTEGER PRIMARY KEY, filename TEXT UNIQUE NOT NULL, @@ -111,8 +114,7 @@ CREATE TRIGGER IF NOT EXISTS create_tags AFTER INSERT ON source_files BEGIN INSERT INTO tags (source_file,last_change) VALUES (new.id,0); END; -DROP TRIGGER IF EXISTS force_destination_update_on_tag_update; -CREATE TRIGGER force_destination_update_on_tag_update +CREATE TRIGGER IF NOT EXISTS force_destination_update_on_tag_update AFTER UPDATE OF genre, albumartist, @@ -126,7 +128,8 @@ CREATE TRIGGER force_destination_update_on_tag_update performer, rate, channels, - bitrate + bitrate, + bitdepth ON tags BEGIN UPDATE destination_files SET last_change=0