ввел мьютекс на запросы SQL работает

This commit is contained in:
krivoshein
2024-11-28 10:19:07 +03:00
parent 1a08f9b6da
commit 988812a1cb
28 changed files with 240 additions and 264 deletions

View File

@@ -18,23 +18,29 @@ DataBaseLMS::~DataBaseLMS()
bool DataBaseLMS::createConnection()
{
mtxAccess.lock();
db = new QSqlDatabase(QSqlDatabase::addDatabase(dbType));
db->setDatabaseName(dbName);
db->setUserName(dbUserName);
db->setPassword(dbPassword);
if(!db->open())
{
mtxAccess.unlock();
deleteConnection();
return false;
}
else
{
mtxAccess.unlock();
return true;
}
}
void DataBaseLMS::deleteConnection()
{
mtxAccess.lock();
if(transactionBegined)
QSqlDatabase::database().rollback();
@@ -46,17 +52,29 @@ void DataBaseLMS::deleteConnection()
delete db;
db = nullptr;
}
mtxAccess.unlock();
}
bool DataBaseLMS::isConnected()
{
mtxAccess.lock();
if(db == nullptr)
{
mtxAccess.unlock();
return false;
}
else
{
if(db->isOpen())
{
mtxAccess.unlock();
return true;
}
}
mtxAccess.unlock();
return false;
}
@@ -97,11 +115,7 @@ QList<Instructor> DataBaseLMS::selectAllInstructors()
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
while (query.next())
{//Инструктор
@@ -136,11 +150,7 @@ QList<Trainee> DataBaseLMS::selectAllTrainees()
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
while (query.next())
{//Обучаемый
@@ -179,11 +189,7 @@ QList<Group> DataBaseLMS::selectAllGroups()
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
while (query.next())
{//Группа
@@ -209,11 +215,7 @@ Instructor DataBaseLMS::selectInstructor(int id_instructor)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
if (query.first())
{//Инструктор
@@ -260,18 +262,7 @@ QString DataBaseLMS::selectInstructorNameByLogin(QString login)
"WHERE instructors.login = '%1' ").arg(
login );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toString();
}
return QStringLiteral("");
return queryExecString(queryStr);
}
bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor)
@@ -281,18 +272,7 @@ bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor)
"WHERE instructor_id = %1 ").arg(
id_instructor );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toBool();
}
return false;
return queryExecBool(queryStr);
}
bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor)
@@ -302,18 +282,7 @@ bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor)
"WHERE instructor_id = %1 ").arg(
id_instructor );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toBool();
}
return false;
return queryExecBool(queryStr);
}
bool DataBaseLMS::selectInstructorArchived(int id_instructor)
@@ -323,18 +292,7 @@ bool DataBaseLMS::selectInstructorArchived(int id_instructor)
"WHERE instructor_id = %1 ").arg(
id_instructor );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toBool();
}
return false;
return queryExecBool(queryStr);
}
int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn)
@@ -357,15 +315,7 @@ bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
return false;
}
else
{
return true;
}
return queryExec(queryStr, &query);
}
int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived)
@@ -442,11 +392,7 @@ Group DataBaseLMS::selectGroup(int id_group)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
if (query.first())
{//Инструктор
@@ -515,11 +461,7 @@ Trainee DataBaseLMS::selectTrainee(int id_trainee)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
if (query.first())
{//Инструктор
@@ -561,11 +503,7 @@ QList<Trainee> DataBaseLMS::selectAllTraineesInGroup(int id_group)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
while (query.next())
{//Обучаемый
@@ -624,18 +562,7 @@ QString DataBaseLMS::selectTraineeNameByLogin(QString login)
"WHERE trainees.login = '%1' ").arg(
login );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toString();
}
return QStringLiteral("");
return queryExecString(queryStr);
}
QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name)
@@ -645,18 +572,7 @@ QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name)
"WHERE computers.name = '%1' ").arg(
computer_name);
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toString();
}
return QStringLiteral("");
return queryExecString(queryStr);
}
Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name)
@@ -675,11 +591,7 @@ Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
if (query.first())
{//Инструктор
@@ -711,18 +623,7 @@ bool DataBaseLMS::selectTraineeArchived(int id_trainee)
"WHERE trainee_id = %1 ").arg(
id_trainee );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toBool();
}
return false;
return queryExecBool(queryStr);
}
bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee)
@@ -732,18 +633,7 @@ bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee)
"WHERE trainee_id = %1 ").arg(
id_trainee );
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
{
if(query.first())
return query.value(0).toBool();
}
return false;
return queryExecBool(queryStr);
}
int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn)
@@ -766,15 +656,7 @@ bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
return false;
}
else
{
return true;
}
return queryExec(queryStr, &query);
}
int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived)
@@ -860,11 +742,7 @@ QList<Task> DataBaseLMS::selectTasksOfTrainee(int trainee_id)
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
}
else
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
@@ -882,18 +760,49 @@ int DataBaseLMS::queryExecInt(QString queryStr)
{
QSqlQuery query = QSqlQuery(*db);
if(!query.exec(queryStr))
{
messageWarningErrorQuery(queryStr, &query);
return 0;
}
else
if(queryExec(queryStr, &query))
{
if(query.first())
return query.value(0).toInt();
else
return 0;
}
return 0;
}
QString DataBaseLMS::queryExecString(QString queryStr)
{
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if(query.first())
return query.value(0).toString();
}
return QStringLiteral("");
}
bool DataBaseLMS::queryExecBool(QString queryStr)
{
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if(query.first())
return query.value(0).toBool();
}
return false;
}
bool DataBaseLMS::queryExec(QString queryStr, QSqlQuery *query)
{
bool res = false;
mtxAccess.lock();
if(! (res = query->exec(queryStr)) )
messageWarningErrorQuery(queryStr, query);
mtxAccess.unlock();
return res;
}
void DataBaseLMS::messageWarningErrorQuery(QString queryStr, QSqlQuery* query)

View File

@@ -2,6 +2,7 @@
#define DATABASELMS_H
#include <QSqlDatabase>
#include <QMutex>
#include "instructor.h"
#include "trainee.h"
@@ -73,6 +74,9 @@ protected:
private:
int queryExecInt(QString queryStr);
QString queryExecString(QString queryStr);
bool queryExecBool(QString queryStr);
bool queryExec(QString queryStr, QSqlQuery* query);
void messageWarningErrorQuery(QString queryStr, QSqlQuery* query);
protected:
@@ -83,6 +87,8 @@ private:
const QString dbUserName = "postgres";
const QString dbPassword = "12345678";
const QString dbType = "QPSQL";
QMutex mtxAccess;
};
#endif // DATABASELMS_H