1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include <iostream>
#include "strmanip.h"
#include "immsdb.h"
using std::cerr;
using std::endl;
ImmsDb::ImmsDb()
{
sql_schema_upgrade();
sql_create_tables();
}
void ImmsDb::sql_create_tables()
{
BasicDb::sql_create_tables();
CorrelationDb::sql_create_tables();
PlaylistDb::sql_create_tables();
}
void ImmsDb::sql_schema_upgrade(int from)
{
try {
Q("CREATE TABLE 'Schema' ('version' TEXT NOT NULL, "
"'description' TEXT UNIQUE NOT NULL);").execute();
} catch (SQLException &e) {}
try {
Q q("SELECT version FROM 'Schema' WHERE description ='latest';");
if (q.next())
q >> from;
}
WARNIFFAILED();
if (from > SCHEMA_VERSION)
{
cerr << "IMMS: Newer database schema detected." << endl;
cerr << "IMMS: Please update IMMS!" << endl;
close_database();
return;
}
if (from == SCHEMA_VERSION)
return;
cerr << "IMMS: Outdated database schema detected." << endl;
cerr << "IMMS: Attempting to update." << endl;
BasicDb::sql_schema_upgrade(from);
CorrelationDb::sql_schema_upgrade(from);
PlaylistDb::sql_schema_upgrade(from);
try {
Q("INSERT OR REPLACE INTO 'Schema' ('description', 'version') "
"VALUES ('latest', '" + itos(SCHEMA_VERSION) + "');").execute();
}
WARNIFFAILED();
}
|