SQL Schema versioning, VACUUM on exit

This commit is contained in:
Vincent Riquer 2013-10-08 13:40:03 +02:00
parent 34b31e5974
commit 142c5438e6
4 changed files with 34 additions and 3 deletions

26
lib/database/checkVersion Normal file
View File

@ -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
}

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
closeDatabase() { closeDatabase() {
echo 'vacuum;' >&3
echo .quit >&3 echo .quit >&3
(( debug )) && echo -n "Waiting for SQLite to terminate... " (( debug )) && echo -n "Waiting for SQLite to terminate... "
wait wait

View File

@ -15,4 +15,5 @@ openDatabase() {
cat $schema >&3 cat $schema >&3
echo '.separator ::AtOM:SQL:Sep::' >&3 echo '.separator ::AtOM:SQL:Sep::' >&3
echo 'PRAGMA foreign_keys = ON;' >&3 echo 'PRAGMA foreign_keys = ON;' >&3
checkDatabaseVersion
} }

View File

@ -1,4 +1,7 @@
BEGIN TRANSACTION; BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS atom (
version INTEGER
);
CREATE TABLE IF NOT EXISTS source_files ( CREATE TABLE IF NOT EXISTS source_files (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
filename TEXT UNIQUE NOT NULL, filename TEXT UNIQUE NOT NULL,
@ -111,8 +114,7 @@ CREATE TRIGGER IF NOT EXISTS create_tags AFTER INSERT ON source_files
BEGIN BEGIN
INSERT INTO tags (source_file,last_change) VALUES (new.id,0); INSERT INTO tags (source_file,last_change) VALUES (new.id,0);
END; END;
DROP TRIGGER IF EXISTS force_destination_update_on_tag_update; CREATE TRIGGER IF NOT EXISTS force_destination_update_on_tag_update
CREATE TRIGGER force_destination_update_on_tag_update
AFTER UPDATE OF AFTER UPDATE OF
genre, genre,
albumartist, albumartist,
@ -126,7 +128,8 @@ CREATE TRIGGER force_destination_update_on_tag_update
performer, performer,
rate, rate,
channels, channels,
bitrate bitrate,
bitdepth
ON tags ON tags
BEGIN BEGIN
UPDATE destination_files SET last_change=0 UPDATE destination_files SET last_change=0