diff options
author | deva <deva> | 2008-06-09 14:51:41 +0000 |
---|---|---|
committer | deva <deva> | 2008-06-09 14:51:41 +0000 |
commit | a5d78e33085399d04fabeacf8142dbfe55992e7a (patch) | |
tree | cba98916959d21126411a32ad0f84a918b3f387b /server/src | |
parent | 95c75f805ec5f22f5e876dc3fddf8a72d6afd014 (diff) |
Added check to see if macro already has been committed. For later use with dependency checking.
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/database.cc | 25 | ||||
-rw-r--r-- | server/src/database.h | 5 | ||||
-rw-r--r-- | server/src/server.cc | 9 |
3 files changed, 35 insertions, 4 deletions
diff --git a/server/src/database.cc b/server/src/database.cc index 62454a2..35d9214 100644 --- a/server/src/database.cc +++ b/server/src/database.cc @@ -143,6 +143,29 @@ Values Database::getValues(std::string cpr, return values; } +bool Database::checkMacro(std::string cpr, + std::string macro, + time_t oldest) +{ + pqxx::work W(c); + + std::stringstream query; + query << "SELECT oid"; + query << " FROM transactions"; + query << " WHERE cpr = '" << cpr << "'"; + query << " AND macro = '" << macro << "'"; + query << " AND timestamp >= " << oldest; + query << " ORDER BY timestamp"; + + try { + pqxx::result R = W.exec(query.str()); + + return R.size() != 0; + } catch( ... ) { + return false; + } +} + /* -- As root: -- #createuser -P -h localhost -U postgres @@ -160,7 +183,7 @@ DROP TABLE transactions; CREATE TABLE transactions ( "cpr" varchar(11), - "makro" text, + "macro" text, "version" text, "timestamp" bigint, "user" text diff --git a/server/src/database.h b/server/src/database.h index 31d69fc..85f8cd7 100644 --- a/server/src/database.h +++ b/server/src/database.h @@ -65,6 +65,11 @@ public: Fieldnames &fieldnames, time_t oldest = 0); + // Check if a macro has been committed. + bool checkMacro(std::string cpr, + std::string macro, + time_t oldest = 0); + // Connect to the db void connect() {} diff --git a/server/src/server.cc b/server/src/server.cc index a94a0f8..c0ec223 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -168,7 +168,10 @@ static void connection(TCPSocket &socket) while(mi2 != templ->course.macroes.end()) { Macro ¯o = (*mi2); - answer += " <macro name=\"" + macro.attributes["name"] + "\">\n"; + answer += " <macro name=\"" + macro.attributes["name"] + "\" completed="; + if(db.checkMacro(transaction.cpr, macro.attributes["name"])) answer += "\"true\""; + else answer += "\"false\""; + answer += ">\n"; if(macro.attributes["name"] == request.macro) { @@ -196,7 +199,7 @@ static void connection(TCPSocket &socket) i++; } } catch(std::exception &e) { - socket.write(error_box( e.what())); + socket.write(error_box(xml_encode(e.what()))); } socket.write("</pracro>\n"); @@ -280,7 +283,7 @@ void server() char request[] = "<?xml version='1.0' encoding='UTF-8'?>\n" "<pracro cpr=\"2003791613\" version=\"1.0\">\n" - " <request macro=\"example2\" course=\"example2\"/>\n" + " <request macro=\"example\" course=\"example\"/>\n" "</pracro>\n"; int main() |