Index: /trunk/FACT++/src/Database.h
===================================================================
--- /trunk/FACT++/src/Database.h	(revision 19123)
+++ /trunk/FACT++/src/Database.h	(revision 19124)
@@ -4,4 +4,5 @@
 #include <exception>
 #include <boost/regex.hpp>
+#include <boost/algorithm/string.hpp>
 
 #include <mysql++/mysql++.h>
@@ -14,8 +15,9 @@
     std::string db;
     int port;
+    char compression;
 
-    DatabaseName(const std::string &database)
+    DatabaseName(const std::string &database) : compression(0)
     {
-        static const boost::regex expr("(([[:word:].-]+)(:(.+))?@)?([[:word:].-]+)(:([[:digit:]]+))?(/([[:word:].-]+))");
+        static const boost::regex expr("(([[:word:].-]+)(:(.+))?@)?([[:word:].-]+)(:([[:digit:]]+))?(/([[:word:].-]+))(/[+-])?");
 
         boost::smatch what;
@@ -23,5 +25,5 @@
             throw std::runtime_error("Couldn't parse database URI '"+database+"'.");
 
-        if (what.size()!=10)
+        if (what.size()!=11)
             throw std::runtime_error("Error parsing database URI '"+database+"'.");
 
@@ -30,4 +32,6 @@
         server = what[5];
         db     = what[9];
+
+        compression = std::string(what[10])[1];
 
         try
@@ -59,6 +63,12 @@
 public:
     Database(const std::string &desc) : DatabaseName(desc),
-        mysqlpp::Connection(db.c_str(), server.c_str(), user.c_str(), passwd.c_str(), port)
+        mysqlpp::Connection()
     {
+        if ((compression!='-' && boost::algorithm::to_lower_copy(server)!="localhost" && server!="127.0.0.1")||
+            compression=='+')
+            set_option(new mysqlpp::CompressOption());
+
+        // Connect to the database
+        connect(db.c_str(), server.c_str(), user.c_str(), passwd.c_str(), port);
     }
 };
