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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/*
Copyright (C) 2007-2010 Tuomas Suutari <thsuut@utu.fi>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program (see the file COPYING); if not, write to the
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
MA 02110-1301 USA.
*/
#include "DatabaseInitialization.h"
#include "DriverManager.h"
#include "Schema/KPhotoAlbumSchema.h"
#include "QueryHelper.h"
#include "QueryErrors.h"
#include <klocale.h>
namespace
{
static void insertInitialData(SQLDB::Connection& /*conn*/)
{
#if 0 // When importing a database, we do not want default items.
// The only thing we can do so far is importing, so lets keep this out for now
// 4 Sep. 2008 14:44 -- Jesper K. Pedersen
struct
{
const char* name;
const char* icon;
bool visible;
DB::Category::ViewType viewtype;
int thumbnailSize;
} entry[] = {
{ "Tokens", "preferences-other",
true, DB::Category::IconView, 32 },
{ "Events", "editimage",
true, DB::Category::IconView, 32 },
{ "Places", "network-workgroup",
true, DB::Category::ListView, 32 },
{ "People", "system-users",
true, DB::Category::ThumbedListView, 96 },
{ 0, 0, false, DB::Category::ListView, 0 }
};
SQLDB::QueryHelper qh(conn);
for (int i = 0; entry[i].name != 0; ++i)
qh.insertCategory(QString::fromLatin1(entry[i].name),
QString::fromLatin1(entry[i].icon),
entry[i].visible,
entry[i].viewtype, entry[i].thumbnailSize);
#endif
}
static SQLDB::Schema::Identifier
getDatabaseIdentifier(SQLDB::Connection& conn)
{
SQLDB::Schema::string name;
int versionMajor(0);
int versionMinor(0);
int year(0);
int month(0);
int day(0);
try {
QString x =
QString::fromLatin1("SELECT value FROM database_metadata "
"WHERE property=");
name =
conn.executeQuery(
(x + QString::fromLatin1("'name'")).toAscii().constData()
).firstItem().
toString().toLatin1().constData();
versionMajor =
conn.executeQuery(
(x + QString::fromLatin1("'version major'"))
.toAscii().constData()
).firstItem().toInt();
versionMinor =
conn.executeQuery(
(x + QString::fromLatin1("'version minor'"))
.toAscii().constData()
).firstItem().toInt();
year = conn.executeQuery(
(x + QString::fromLatin1("'date year')")).toAscii().constData()
).firstItem().toInt();
month = conn.executeQuery(
(x + QString::fromLatin1("'date month'")).toAscii().constData()
).firstItem().toInt();
day = conn.executeQuery(
(x + QString::fromLatin1("'date day'")).toAscii().constData()
).firstItem().toInt();
}
catch (...) {
}
SQLDB::Schema::Identifier id(name, versionMajor, versionMinor);
if (year != 0 && month != 0 && day != 0)
id.setDate(year, month, day);
return id;
}
}
SQLDB::ConnectionSPtr
SQLDB::initializeKPhotoAlbumDatabase(const DatabaseAddress& address)
{
DatabaseManager::APtr dbMgr
(DriverManager::instance().
getDatabaseManager(address.driverName(),
address.connectionParameters()));
bool databaseCreated = false;
const QString& dbName = address.databaseName();
if (!dbMgr->databaseExists(dbName)) {
dbMgr->createDatabase(dbName, Schema::getKPhotoAlbumSchema());
databaseCreated = true;
}
ConnectionSPtr dbConn(dbMgr->connectToDatabase(dbName));
if (databaseCreated) {
insertInitialData(*dbConn);
}
else {
// Test schema version
if (!Schema::getKPhotoAlbumSchema().identifier().
isCompatibleWith(getDatabaseIdentifier(*dbConn)))
throw DatabaseSchemaError(i18n("Database schema is incompatible."));
}
return dbConn;
}
|