diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-04-25 22:52:30 +0100 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-04-25 22:52:30 +0100 | 
| commit | 75dbb263aeab0f6ed2726d2a5375fbf1f7696ac6 (patch) | |
| tree | ec78e5aeed9948913137960a217fc40d92cf94ac | |
| parent | Refactor utils (diff) | |
| download | gentoobrowse-api-75dbb263aeab0f6ed2726d2a5375fbf1f7696ac6.tar.bz2 gentoobrowse-api-75dbb263aeab0f6ed2726d2a5375fbf1f7696ac6.tar.xz gentoobrowse-api-75dbb263aeab0f6ed2726d2a5375fbf1f7696ac6.zip | |
Add some db utils functions for easing patching
| -rw-r--r-- | gentoobrowse-api/service/utils/dbUtils.cpp | 31 | ||||
| -rw-r--r-- | gentoobrowse-api/service/utils/dbUtils.h | 6 | 
2 files changed, 37 insertions, 0 deletions
| diff --git a/gentoobrowse-api/service/utils/dbUtils.cpp b/gentoobrowse-api/service/utils/dbUtils.cpp index f2b7f4d..4ec0f54 100644 --- a/gentoobrowse-api/service/utils/dbUtils.cpp +++ b/gentoobrowse-api/service/utils/dbUtils.cpp @@ -1,4 +1,7 @@  #include "dbUtils.h" +#include <boost/lexical_cast.hpp> +#include <boost/algorithm/string/join.hpp> +#include <tablepatch.h>  namespace Gentoo {  	namespace Utils { @@ -15,6 +18,34 @@ namespace Gentoo {  				db->bindNull(c);  				return false;  			} + +			std::string +			emptyClone(DB::Connection * db, const std::string & orig) +			{ +				auto tempTable = orig; +				auto dot = tempTable.rfind('.'); +				if (dot != std::string::npos) { +					tempTable = tempTable.substr(dot + 1); +				} +				tempTable += "_clone_" + boost::lexical_cast<std::string>(db); +				db->execute("CREATE TEMPORARY TABLE " + tempTable + " AS SELECT * FROM " + orig + " WHERE false"); +				return tempTable; +			} + +			void +			drop(DB::Connection * db, const std::string & table) +			{ +				db->execute("DROP TABLE " + table); +			} + +			DB::ModifyCommandPtr +			tablePatchInserter(DB::Connection * dbc, const DB::TablePatch & p) +			{ +				return dbc->modify( +						"INSERT INTO " + p.src + +						"(" + boost::algorithm::join(p.cols, ", ") + +						") VALUES(" + boost::algorithm::join(std::vector<std::string>(p.cols.size(), "?"), ", ") + ")"); +			}  		}  	}  } diff --git a/gentoobrowse-api/service/utils/dbUtils.h b/gentoobrowse-api/service/utils/dbUtils.h index e609c2d..57554e3 100644 --- a/gentoobrowse-api/service/utils/dbUtils.h +++ b/gentoobrowse-api/service/utils/dbUtils.h @@ -2,11 +2,17 @@  #define GENTOOBROWSE_API_SERVICE_DBUTILS_H  #include <command.h> +#include <modifycommand.h> +#include <connection.h>  namespace Gentoo {  	namespace Utils {  		namespace Database {  			bool bindOptionalsS(DB::Command * db, unsigned int c, const std::vector<boost::optional<Glib::ustring> > & vs); + +			std::string emptyClone(DB::Connection *, const std::string &); +			void drop(DB::Connection *, const std::string &); +			DB::ModifyCommandPtr tablePatchInserter(DB::Connection *, const DB::TablePatch &);  		}  	}  } | 
