Initial multi-database support

git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@465 05730e5d-ab1b-0410-a4ac-84af385074fa
This commit is contained in:
Thorvald Natvig 2007-06-11 14:50:00 +00:00
parent 8a1f436cbf
commit 9577644104
3 changed files with 53 additions and 26 deletions

View File

@ -62,6 +62,8 @@ ServerParams::ServerParams() {
iMaxUsers = 1000;
qsWelcomeText = QString("Welcome to this server");
qsDatabase = QString();
iDBPort = 0;
qsDBDriver = "QSQLITE";
}
void ServerParams::read(QString fname) {
@ -76,7 +78,14 @@ void ServerParams::read(QString fname) {
iMaxBandwidth = qs.value("bandwidth", iMaxBandwidth).toInt();
iMaxUsers = qs.value("users", iMaxUsers).toInt();
qsWelcomeText = qs.value("welcometext", qsWelcomeText).toString();
qsDatabase = qs.value("database", qsDatabase).toString();
qsDBDriver = qs.value("dbDriver", qsDBDriver).toString();
qsDBUserName = qs.value("dbUsername", qsDBUserName).toString();
qsDBPassword = qs.value("dbPassword", qsDBPassword).toString();
qsDBHostName = qs.value("dbHost", qsDBHostName).toString();
iDBPort = qs.value("dbPort", iDBPort).toInt();
}
BandwidthRecord::BandwidthRecord() {

View File

@ -127,8 +127,16 @@ struct ServerParams {
int iMaxUsers;
QString qsPassword;
QString qsWelcomeText;
QString qsDatabase;
bool bTestloop;
QString qsDatabase;
QString qsDBDriver;
QString qsDBUserName;
QString qsDBPassword;
QString qsDBHostName;
int iDBPort;
ServerParams();
void read(QString fname = QString("murmur.ini"));
};

View File

@ -61,46 +61,56 @@ class TransactionHolder {
};
ServerDB::ServerDB() {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
QSettings qs;
if (! QSqlDatabase::isDriverAvailable(g_sp.qsDBDriver)) {
qFatal("Database driver %s not available", qPrintable(g_sp.qsDBDriver));
}
QSqlDatabase db = QSqlDatabase::addDatabase(g_sp.qsDBDriver);
QStringList datapaths;
int i;
bool found = false;
if (! g_sp.qsDatabase.isEmpty()) {
db.setDatabaseName(g_sp.qsDatabase);
found = db.open();
} else {
if (g_sp.qsDBDriver == "QSQLITE") {
if (! g_sp.qsDatabase.isEmpty()) {
db.setDatabaseName(g_sp.qsDatabase);
found = db.open();
} else {
datapaths << QCoreApplication::instance()->applicationDirPath();
datapaths << QDir::currentPath();
datapaths << QDir::homePath();
datapaths << qs.value("DBPath").toString();
datapaths << QCoreApplication::instance()->applicationDirPath();
datapaths << QDir::currentPath();
datapaths << QDir::homePath();
for(i = 0; (i < datapaths.size()) && ! found; i++) {
if (!datapaths[i].isEmpty()) {
QFile f(datapaths[i] + "/murmur.sqlite");
if (f.exists()) {
db.setDatabaseName(f.fileName());
found = db.open();
}
}
}
if (! found) {
for(i = 0; (i < datapaths.size()) && ! found; i++) {
if (!datapaths[i].isEmpty()) {
QFile f(datapaths[i] + "/murmur.sqlite");
db.setDatabaseName(f.fileName());
found = db.open();
if (f.exists()) {
db.setDatabaseName(f.fileName());
found = db.open();
}
}
}
if (! found) {
for(i = 0; (i < datapaths.size()) && ! found; i++) {
if (!datapaths[i].isEmpty()) {
QFile f(datapaths[i] + "/murmur.sqlite");
db.setDatabaseName(f.fileName());
found = db.open();
}
}
}
}
} else {
db.setDatabaseName(g_sp.qsDatabase);
db.setHostName(g_sp.qsDBHostName);
db.setPort(g_sp.iDBPort);
db.setUserName(g_sp.qsDBUserName);
db.setPassword(g_sp.qsDBPassword);
found = db.open();
}
if (! found) {
qFatal("ServerDB: Failed initialization");
QSqlError e = db.lastError();
qFatal("ServerDB: Failed initialization: %s",qPrintable(e.text()));
} else {
qWarning("ServerDB: Opened successfully");
}