From 11afe913ff34c8b466a1635ca15d99a684904b78 Mon Sep 17 00:00:00 2001 From: deva Date: Mon, 17 Sep 2007 13:16:26 +0000 Subject: Added UID class for use when generating transaction ids. --- server/src/Makefile.am | 2 ++ server/src/database.cc | 52 +++++++++++++++++++++++------------------ server/src/uid.cc | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ server/src/uid.h | 49 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 23 deletions(-) create mode 100644 server/src/uid.cc create mode 100644 server/src/uid.h (limited to 'server') diff --git a/server/src/Makefile.am b/server/src/Makefile.am index 12b3a21..ac5ed0a 100644 --- a/server/src/Makefile.am +++ b/server/src/Makefile.am @@ -14,6 +14,7 @@ pracrod_SOURCES = \ server.cc \ tcpsocket.cc \ tostring.cc \ + uid.cc \ xmlparser.cc EXTRA_DIST = \ @@ -25,4 +26,5 @@ EXTRA_DIST = \ server.h \ tcpsocket.h \ tostring.h \ + uid.h \ xmlparser.h diff --git a/server/src/database.cc b/server/src/database.cc index 4bf9c61..1d4915e 100644 --- a/server/src/database.cc +++ b/server/src/database.cc @@ -27,9 +27,8 @@ #include "database.h" #include "tostring.h" +#include "uid.h" #include -#include -#include Database::Database(std::string hostname, std::string user, std::string password) : c("host=" + hostname + @@ -37,18 +36,6 @@ Database::Database(std::string hostname, std::string user, std::string password) " password=" + password + " dbname=pracro") { - /* - try { - char port_string[32]; - sprintf(port_string, "%d", port); - std::string hoststring = "host=" + host + " port=" + port_string + - " user=" + user + " password=" + password + " dbname=" + database; - c = new pqxx::connection(hoststring); - - } catch(const std::exception &e) { - //throw PostgreSQLException(e.what()); - } - */ } Database::~Database() @@ -57,26 +44,24 @@ Database::~Database() int Database::post(Transaction &transaction) { - time_t now = time(NULL); - std::string transidbase = toString((unsigned int)now) + "-" - + toString((unsigned int)getpid()) + "-"; // Here we put the commit index + UID uid; + std::string now = toString((unsigned int)time(NULL)); try { pqxx::work W(c); Commits::iterator i = transaction.commits.begin(); - unsigned int idx = 0; while(i != transaction.commits.end()) { Commit &commit = *i; - std::string transid = transidbase + toString(idx); + // std::string transid = transidbase + toString(idx); // Insert transaction entry std::string sql = "INSERT INTO transactions VALUES('" + transaction.cpr + "', '" + - transid + "', '" + + uid.toString() + "', '" + commit.macro + "', '" + commit.version + "', '" + - toString((unsigned int)now) + "', '" + + now + "', '" + commit.user + "')"; W.exec(sql); @@ -86,7 +71,7 @@ int Database::post(Transaction &transaction) Field &field = *j; sql = "INSERT INTO fields VALUES('" + - transid + "', '" + + uid.toString() + "', '" + field.name + "', '" + field.value + "')"; W.exec(sql); @@ -94,7 +79,7 @@ int Database::post(Transaction &transaction) j++; } - idx++; + uid++; i++; } @@ -105,6 +90,27 @@ int Database::post(Transaction &transaction) return 0; } +/* +int Database::getTransaction(cpr, transid) +{ + SELECT fields.name, fields.value + FROM transactions, fields + WHERE transactions.cpr='2003791613' + AND transactions.transaction='1234567890' + AND transactions.transaction=fields.transaction +} +*/ + +/* +int Database::getMakro(cpr, macro) +{ + SELECT fields.name, fields.value + FROM transactions, fields + WHERE transactions.cpr='2003791613' + AND transactions.macro='dims' + AND transactions.transaction=fields.transaction +} +*/ // som root // # createuser -P -h localhost -U postgres diff --git a/server/src/uid.cc b/server/src/uid.cc new file mode 100644 index 0000000..f9f98ae --- /dev/null +++ b/server/src/uid.cc @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * uid.cc + * + * Mon Sep 17 14:43:02 CEST 2007 + * Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup + * deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro 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. + * + * Pracro 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 Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "uid.h" + +static time_t gettime() +{ + return time(NULL); +} + +UID::UID() +{ + this->time = gettime(); + this->pid = getpid(); + this->cnt = 0; +} + +void UID::operator++(int) +{ + cnt++; +} + +/* +std::string UID::operator(std::string)() +{ + // time_t now = time(NULL); + // std::string transidbase = toString((unsigned int)now) + "-" + // + toString((unsigned int)getpid()) + "-"; // Here we put the commit index + + return std::string("ding"); +} +*/ + +std::string UID::toString() +{ + // std::string uid; + char buf[256]; + sprintf(buf, "%08x%04x%02x", time, pid, cnt); + return buf; +} diff --git a/server/src/uid.h b/server/src/uid.h new file mode 100644 index 0000000..846986b --- /dev/null +++ b/server/src/uid.h @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * uid.h + * + * Mon Sep 17 14:43:02 CEST 2007 + * Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup + * deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro 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. + * + * Pracro 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 Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __PRACRO_UID_H__ +#define __PRACRO_UID_H__ + +#include +#include +#include +#include + +class UID { +public: + UID(); + void operator++(int); + // std::string operator(std::string)(); + + std::string toString(); + +private: + time_t time; + pid_t pid; + unsigned int cnt; +}; + +#endif/*__PRACRO_UID_H__*/ -- cgit v1.2.3