|
@@ -21,11 +21,27 @@
|
|
|
#include "src/opl.h"
|
|
|
#include "src/functions/alog.h"
|
|
|
|
|
|
+const QStringList ADatabase::userTableNames = {
|
|
|
+ QStringLiteral("flights"),
|
|
|
+ QStringLiteral("pilots"),
|
|
|
+ QStringLiteral("tails")
|
|
|
+};
|
|
|
+const QStringList ADatabase::templateTableNames = {
|
|
|
+ QStringLiteral("aircraft"),
|
|
|
+ QStringLiteral("airports"),
|
|
|
+ QStringLiteral("currencies"),
|
|
|
+ QStringLiteral("changelog")
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
ADatabaseError::ADatabaseError(QString msg_)
|
|
|
- : QSqlError::QSqlError(msg_)
|
|
|
+ : QSqlError::QSqlError(QString(), msg_, QSqlError::UnknownError, QLatin1String("opl"))
|
|
|
{}
|
|
|
|
|
|
+ADatabaseError::ADatabaseError(QSqlError err_)
|
|
|
+ : QSqlError(err_)
|
|
|
+{};
|
|
|
+
|
|
|
QString ADatabaseError::text() const
|
|
|
{
|
|
|
return QLatin1String("Database Error: ") + QSqlError::text();
|
|
@@ -52,6 +68,16 @@ int ADatabase::checkDbVersion() const
|
|
|
return query.value(0).toInt();
|
|
|
}
|
|
|
|
|
|
+QStringList ADatabase::getTemplateTableNames()
|
|
|
+{
|
|
|
+ return templateTableNames;
|
|
|
+}
|
|
|
+
|
|
|
+QStringList ADatabase::getUserTableNames()
|
|
|
+{
|
|
|
+ return userTableNames;
|
|
|
+}
|
|
|
+
|
|
|
const ColumnNames_T ADatabase::getTableColumns(TableName_T table_name) const
|
|
|
{
|
|
|
return tableColumns.value(table_name);
|
|
@@ -114,6 +140,7 @@ bool ADatabase::connect()
|
|
|
if (!db.open()) {
|
|
|
LOG << QString("Unable to establish database connection.<br>The following error has ocurred:<br><br>%1")
|
|
|
.arg(db.lastError().databaseText());
|
|
|
+ lastError = db.lastError();
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -163,19 +190,17 @@ bool ADatabase::remove(AEntry entry)
|
|
|
QSqlQuery query;
|
|
|
query.prepare(statement);
|
|
|
query.addBindValue(entry.getPosition().rowId);
|
|
|
- query.exec();
|
|
|
|
|
|
- if (query.lastError().type() == QSqlError::NoError)
|
|
|
+ if (!query.exec())
|
|
|
{
|
|
|
DEB << "Entry " << entry.getPosition() << " removed.";
|
|
|
emit dataBaseUpdated();
|
|
|
- lastError = QString();
|
|
|
return true;
|
|
|
} else {
|
|
|
DEB << "Unable to delete.";
|
|
|
DEB << "Query: " << statement;
|
|
|
DEB << "Query Error: " << query.lastError().text();
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -197,31 +222,27 @@ bool ADatabase::removeMany(QList<DataPosition> data_position_list)
|
|
|
|
|
|
query.prepare(statement);
|
|
|
query.addBindValue(data_position.rowId);
|
|
|
- query.exec();
|
|
|
|
|
|
- if (!(query.lastError().type() == QSqlError::NoError))
|
|
|
+ if (!query.exec())
|
|
|
errorCount++;
|
|
|
}
|
|
|
|
|
|
if (errorCount == 0) {
|
|
|
query.prepare(QStringLiteral("COMMIT"));
|
|
|
- query.exec();
|
|
|
- if(query.lastError().type() == QSqlError::NoError) {
|
|
|
+ if(query.exec()) {
|
|
|
emit dataBaseUpdated();
|
|
|
- lastError = QString();
|
|
|
return true;
|
|
|
} else {
|
|
|
- lastError = ADatabaseError(
|
|
|
- "Transaction unsuccessful (Interrupted). Error count: "
|
|
|
- + QString::number(errorCount));
|
|
|
+ DEB << "Transaction unsuccessful (Interrupted). Error count: "
|
|
|
+ + QString::number(errorCount);
|
|
|
+ lastError = query.lastError();
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
query.prepare(QStringLiteral("ROLLBACK"));
|
|
|
query.exec();
|
|
|
- lastError = ADatabaseError(
|
|
|
- "Transaction unsuccessful (no changes have been made). Error count: "
|
|
|
- + QString::number(errorCount));
|
|
|
+ DEB << "Transaction unsuccessful (no changes have been made). Error count: "
|
|
|
+ + QString::number(errorCount);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -241,7 +262,7 @@ bool ADatabase::exists(AEntry entry)
|
|
|
query.exec();
|
|
|
//this returns either 1 or 0 since row ids are unique
|
|
|
if (!query.isActive()) {
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
DEB << "Query Error: " << query.lastError().text() << statement;
|
|
|
return false;
|
|
|
}
|
|
@@ -271,7 +292,7 @@ bool ADatabase::exists(DataPosition data_position)
|
|
|
query.exec();
|
|
|
//this returns either 1 or 0 since row ids are unique
|
|
|
if (!query.isActive()) {
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
DEB << "Query Error: " << query.lastError().text() << statement;
|
|
|
}
|
|
|
query.next();
|
|
@@ -285,6 +306,21 @@ bool ADatabase::exists(DataPosition data_position)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+bool ADatabase::clear()
|
|
|
+{
|
|
|
+ QSqlQuery q;
|
|
|
+
|
|
|
+ for (const auto &table_name : userTableNames) {
|
|
|
+ q.prepare(QLatin1String("DELETE FROM ") + table_name);
|
|
|
+ if (!q.exec()) {
|
|
|
+ DEB << "Error: " << q.lastError().text();
|
|
|
+ lastError = q.lastError();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
bool ADatabase::update(AEntry updated_entry)
|
|
|
{
|
|
@@ -305,19 +341,17 @@ bool ADatabase::update(AEntry updated_entry)
|
|
|
}
|
|
|
}
|
|
|
query.addBindValue(updated_entry.getPosition().rowId);
|
|
|
- query.exec();
|
|
|
|
|
|
- if (query.lastError().type() == QSqlError::NoError)
|
|
|
+ if (query.exec())
|
|
|
{
|
|
|
DEB << "Entry successfully committed.";
|
|
|
emit dataBaseUpdated();
|
|
|
- lastError = QString();
|
|
|
return true;
|
|
|
} else {
|
|
|
DEB << "Unable to commit.";
|
|
|
DEB << "Query: " << statement;
|
|
|
DEB << "Query Error: " << query.lastError().text();
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -350,19 +384,17 @@ bool ADatabase::insert(AEntry new_entry)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- query.exec();
|
|
|
//check result.
|
|
|
- if (query.lastError().type() == QSqlError::NoError)
|
|
|
+ if (!query.exec())
|
|
|
{
|
|
|
DEB << "Entry successfully committed.";
|
|
|
emit dataBaseUpdated();
|
|
|
- lastError = QString();
|
|
|
return true;
|
|
|
} else {
|
|
|
DEB << "Unable to commit.";
|
|
|
DEB << "Query: " << statement;
|
|
|
DEB << "Query Error: " << query.lastError().text();
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -383,15 +415,13 @@ RowData_T ADatabase::getEntryData(DataPosition data_position)
|
|
|
check_query.prepare(statement);
|
|
|
check_query.addBindValue(data_position.rowId);
|
|
|
check_query.setForwardOnly(true);
|
|
|
- check_query.exec();
|
|
|
|
|
|
- if (check_query.lastError().type() != QSqlError::NoError) {
|
|
|
+ if (!check_query.exec()) {
|
|
|
DEB << "SQL error: " << check_query.lastError().text();
|
|
|
DEB << "Statement: " << statement;
|
|
|
- lastError = check_query.lastError().text();
|
|
|
+ lastError = check_query.lastError();
|
|
|
return RowData_T();
|
|
|
}
|
|
|
-
|
|
|
check_query.next();
|
|
|
if (check_query.value(0).toInt() == 0) {
|
|
|
DEB << "No Entry found for row id: " << data_position.rowId;
|
|
@@ -407,12 +437,12 @@ RowData_T ADatabase::getEntryData(DataPosition data_position)
|
|
|
select_query.prepare(statement);
|
|
|
select_query.addBindValue(data_position.rowId);
|
|
|
select_query.setForwardOnly(true);
|
|
|
- select_query.exec();
|
|
|
|
|
|
- if (select_query.lastError().type() != QSqlError::NoError) {
|
|
|
+
|
|
|
+ if (!select_query.exec()) {
|
|
|
DEB << "SQL error: " << select_query.lastError().text();
|
|
|
- DEB << "Statement: " << statement;
|
|
|
- lastError = select_query.lastError().text();
|
|
|
+ DEB << "Statement: " << select_query.lastQuery();
|
|
|
+ lastError = select_query.lastError();
|
|
|
return {};
|
|
|
}
|
|
|
|
|
@@ -503,7 +533,7 @@ const QStringList ADatabase::getCompletionList(ADatabaseTarget target)
|
|
|
query.exec();
|
|
|
|
|
|
if(!query.isActive()) {
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
return QStringList();
|
|
|
}
|
|
|
|
|
@@ -554,7 +584,7 @@ QMap<QString, RowId_T> ADatabase::getIdMap(ADatabaseTarget target)
|
|
|
DEB << "No result found. Check Query and Error.";
|
|
|
DEB << "Query: " << statement;
|
|
|
DEB << "Error: " << query.lastError().text();
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
return {};
|
|
|
}
|
|
|
|
|
@@ -616,7 +646,7 @@ QList<RowId_T> ADatabase::getForeignKeyConstraints(RowId_T foreign_row_id, AData
|
|
|
query.exec();
|
|
|
|
|
|
if (!query.isActive()) {
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = query.lastError();
|
|
|
DEB << "Error";
|
|
|
DEB << statement;
|
|
|
DEB << query.lastError().text();
|
|
@@ -643,13 +673,17 @@ ATailEntry ADatabase::resolveForeignTail(RowId_T foreign_key)
|
|
|
QVector<QVariant> ADatabase::customQuery(QString statement, int return_values)
|
|
|
{
|
|
|
QSqlQuery query(statement);
|
|
|
- query.exec();
|
|
|
+ if(!query.exec()) {
|
|
|
+ lastError = query.lastError();
|
|
|
+ DEB << "Query Error: " << lastError.text();
|
|
|
+ return {};
|
|
|
+ }
|
|
|
|
|
|
if (!query.first()) {
|
|
|
DEB << "No result found. Check Query and Error.";
|
|
|
DEB << "Error: " << query.lastError().text();
|
|
|
DEB << "Statement: " << statement;
|
|
|
- lastError = query.lastError().text();
|
|
|
+ lastError = ADatabaseError("No result found.");
|
|
|
return QVector<QVariant>();
|
|
|
} else {
|
|
|
query.first();
|
|
@@ -784,12 +818,11 @@ QVector<RowData_T> ADatabase::getTable(ADatabaseTable table_name)
|
|
|
QSqlQuery q;
|
|
|
q.prepare(query_str);
|
|
|
q.setForwardOnly(true);
|
|
|
- q.exec();
|
|
|
|
|
|
- if (q.lastError().type() != QSqlError::NoError) {
|
|
|
+ if (!q.exec()) {
|
|
|
LOG << "SQL error: " << q.lastError().text();
|
|
|
LOG << "Statement: " << query_str;
|
|
|
- lastError = q.lastError().text();
|
|
|
+ lastError = q.lastError();
|
|
|
return {};
|
|
|
}
|
|
|
|