diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-12-15 14:48:50 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-12-15 14:48:50 +0000 |
commit | d8fc9e8e6fb3063ba394618ecbfe11d6f505e47f (patch) | |
tree | 8715ae4ac01b6d15819eecfd635312a65b09c617 | |
parent | Add multi-phase maintenance update cycles (diff) | |
download | gentoobrowse-api-d8fc9e8e6fb3063ba394618ecbfe11d6f505e47f.tar.bz2 gentoobrowse-api-d8fc9e8e6fb3063ba394618ecbfe11d6f505e47f.tar.xz gentoobrowse-api-d8fc9e8e6fb3063ba394618ecbfe11d6f505e47f.zip |
Make EntityWhereFilter a template
5 files changed, 29 insertions, 11 deletions
diff --git a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp index c88dc22..c19fda0 100644 --- a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.cpp @@ -220,7 +220,7 @@ namespace Gentoo { if (newest) { DB::TablePatch t; // HOMEPAGE - U::EntityWhereFilter pwf("packageId", packageId); + U::EntityWhereFilter<int64_t> pwf("packageId", packageId); U::SplitEbuildProps sep_homepage("packageId", packageId, "url", ecp.get("HOMEPAGE")); t.dest = "gentoobrowse.package_urls"; t.srcExpr = &sep_homepage; diff --git a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h index eb41418..93edf72 100644 --- a/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h +++ b/gentoobrowse-api/service/maintenance/ebuildMetaProcessor.h @@ -32,7 +32,7 @@ namespace Gentoo { DB::ModifyCommandPtr depInsert; DB::ModifyCommandPtr useInsert; DB::ModifyCommandPtr archInsert; - Utils::EntityWhereFilter ebuildIds; + Utils::EntityWhereFilter<int64_t> ebuildIds; std::set<std::string> catsDeleteFrom; }; } diff --git a/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp b/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp index ab0f87c..9f9705e 100644 --- a/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/useGroupProcessor.cpp @@ -43,7 +43,7 @@ namespace Gentoo { { DB::TablePatch p; p.dest = "gentoobrowse.use_group"; - U::EntityWhereFilter gwf("useGroupId", useGroupId); + U::EntityWhereFilter<int64_t> gwf("useGroupId", useGroupId); p.src = Utils::Database::emptyClone(dbc, "gentoobrowse.use_group"); p.pk = { "useGroupId", "use" }; p.cols = { "useGroupId", "use", "description" }; diff --git a/gentoobrowse-api/service/utils/entityWhereFilter.cpp b/gentoobrowse-api/service/utils/entityWhereFilter.cpp index be80971..2588edd 100644 --- a/gentoobrowse-api/service/utils/entityWhereFilter.cpp +++ b/gentoobrowse-api/service/utils/entityWhereFilter.cpp @@ -3,28 +3,32 @@ namespace Gentoo { namespace Utils { - EntityWhereFilter::EntityWhereFilter(const std::string & en) : + template<typename T> + EntityWhereFilter<T>::EntityWhereFilter(const std::string & en) : entityColName(en) { } - EntityWhereFilter::EntityWhereFilter(const std::string & en, int64_t e) : + template<typename T> + EntityWhereFilter<T>::EntityWhereFilter(const std::string & en, const T & e) : entityColName(en) { entityIds.insert(e); } - EntityWhereFilter::EntityWhereFilter(const std::string & en, const EntityIds & e) : + template<typename T> + EntityWhereFilter<T>::EntityWhereFilter(const std::string & en, const EntityIds & e) : entityIds(e), entityColName(en) { } + template<typename T> void - EntityWhereFilter::writeSql(AdHoc::Buffer & sql) + EntityWhereFilter<T>::writeSql(AdHoc::Buffer & sql) { sql.appendbf("a.%s IN (", entityColName); - for (EntityIds::const_iterator ei = entityIds.begin(); ei != entityIds.end(); ++ei) { + for (auto ei = entityIds.begin(); ei != entityIds.end(); ++ei) { if (ei != entityIds.begin()) { sql.append(", ?"); } @@ -35,13 +39,26 @@ namespace Gentoo { sql.append(")"); } + template<> void - EntityWhereFilter::bindParams(DB::Command * c, unsigned int & offset) + EntityWhereFilter<int64_t>::bindParams(DB::Command * c, unsigned int & offset) { for (const auto & entityId : entityIds) { c->bindParamI(offset++, entityId); } } + + template<> + void + EntityWhereFilter<std::string>::bindParams(DB::Command * c, unsigned int & offset) + { + for (const auto & entityId : entityIds) { + c->bindParamS(offset++, entityId); + } + } + + template class EntityWhereFilter<int64_t>; + template class EntityWhereFilter<std::string>; } } diff --git a/gentoobrowse-api/service/utils/entityWhereFilter.h b/gentoobrowse-api/service/utils/entityWhereFilter.h index a637288..94e286d 100644 --- a/gentoobrowse-api/service/utils/entityWhereFilter.h +++ b/gentoobrowse-api/service/utils/entityWhereFilter.h @@ -6,12 +6,13 @@ namespace Gentoo { namespace Utils { + template<typename T> class EntityWhereFilter : public DB::SqlWriter { public: - typedef std::set<int64_t> EntityIds; + typedef std::set<T> EntityIds; EntityWhereFilter(const std::string & en); - EntityWhereFilter(const std::string & en, int64_t e); + EntityWhereFilter(const std::string & en, const T & e); EntityWhereFilter(const std::string & en, const EntityIds & e); void writeSql(AdHoc::Buffer & sql) override; |