File: immsdb.cc

package info (click to toggle)
imms 2.0.3-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 736 kB
  • ctags: 901
  • sloc: cpp: 5,532; ansic: 1,096; sh: 186; makefile: 113
file content (59 lines) | stat: -rw-r--r-- 1,385 bytes parent folder | download
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();
}