summaryrefslogtreecommitdiff
path: root/server/src/database.h
diff options
context:
space:
mode:
authordeva <deva>2009-11-12 10:02:54 +0000
committerdeva <deva>2009-11-12 10:02:54 +0000
commit93500a9656dffde57ab32410642c2dd74098b9f8 (patch)
tree92cc783992ec34b495f0f08354b435fa786e4454 /server/src/database.h
parent484d5c2b4dcf59f88093614903c6da5bec54ebda (diff)
Make database connection shared among threads and make is thread safe.
Diffstat (limited to 'server/src/database.h')
-rw-r--r--server/src/database.h31
1 files changed, 25 insertions, 6 deletions
diff --git a/server/src/database.h b/server/src/database.h
index 396dda4..f253ba5 100644
--- a/server/src/database.h
+++ b/server/src/database.h
@@ -32,7 +32,7 @@
#include "pracrodao.h"
#include "transaction.h"
#include "template.h"
-
+#include "mutex.h"
#include "debug.h"
class Database {
@@ -42,22 +42,31 @@ public:
// Make a commit to the db
void commitTransaction(std::string user, std::string patientid, Macro &macro, Fields &fields, time_t now = time(NULL)) {
+ if(!dao) return;
+ mutex.lock();
PRACRO_DEBUG(db, "%s, %s, %s,...\n", user.c_str(), patientid.c_str(), macro.attributes["name"].c_str());
- if(dao) dao->commitTransaction(user, patientid, macro, fields, now);
+ dao->commitTransaction(user, patientid, macro, fields, now);
+ mutex.unlock();
}
// Get a list of values from the db
Values getValues(std::string patientid, Fieldnames &fieldnames, time_t oldest = 0) {
+ if(!dao) return Values();
+ mutex.lock();
PRACRO_DEBUG(db, "%s, <%u fieldnames>, %ld\n", patientid.c_str(), fieldnames.size(), oldest);
- if(dao) return dao->getLatestValues(patientid, NULL, fieldnames, oldest);
- else return Values();
+ Values values = dao->getLatestValues(patientid, NULL, fieldnames, oldest);
+ mutex.unlock();
+ return values;
}
// Check if a macro has been committed.
bool checkMacro(std::string patientid, std::string macro, time_t oldest = 0) {
PRACRO_DEBUG(db, "%s, %s, %ld\n", patientid.c_str(), macro.c_str(), oldest);
if(!dao) return false;
- return dao->nrOfCommits(patientid, macro, oldest) > 0;
+ mutex.lock();
+ bool res = dao->nrOfCommits(patientid, macro, oldest) > 0;
+ mutex.unlock();
+ return res;
}
// Get latest resume of a given macro
@@ -66,7 +75,9 @@ public:
if(!dao) return "";
Fieldnames fn;
fn.push_back("journal.resume");
+ mutex.lock();
Values v = dao->getLatestValues(patientid, &macro, fn, oldest);
+ mutex.unlock();
Values::iterator i = v.find("journal.resume");
if(i != v.end()) return i->second.value;
else return "";
@@ -75,13 +86,17 @@ public:
void addFieldname(std::string name, std::string description)
{
if(!dao) return;
+ mutex.lock();
dao->addFieldname(name, description);
+ mutex.unlock();
}
void delFieldname(std::string name)
{
if(!dao) return;
+ mutex.lock();
dao->delFieldname(name);
+ mutex.unlock();
}
std::vector<Fieldname> getFieldnames()
@@ -90,11 +105,15 @@ public:
std::vector<Fieldname> fieldnames;
return fieldnames;
}
- return dao->getFieldnames();
+ mutex.lock();
+ std::vector<Fieldname> fieldnames = dao->getFieldnames();
+ mutex.unlock();
+ return fieldnames;
}
private:
PracroDAO *dao;
+ Mutex mutex;
};
#endif/*__PRACRO_DATABASE_H__*/