From 8f51f82abc5bf5b16f01bd34fd110f988bda1471 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Tue, 31 May 2016 10:30:16 +0200 Subject: [PATCH] Re-enable delete subcommand --- CMakeLists.txt | 2 +- include/backends/db_backend.hpp | 5 +++++ src/backends/postgresql/CMakeLists.txt | 2 +- src/backends/postgresql/backend_postgresql.cpp | 5 +++++ src/backends/postgresql/backend_postgresql.hpp | 2 ++ src/backends/postgresql/delete.cpp | 14 +++++++------- src/backends/postgresql/delete.hpp | 9 ++++++--- src/delete/main.cpp | 6 ++++-- 8 files changed, 31 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a636901..d2711e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,7 +133,7 @@ add_subdirectory(src/backends) #Actions add_subdirectory(src/main) #add_subdirectory(src/scan) -#add_subdirectory(src/delete) +add_subdirectory(src/delete) #add_subdirectory(src/query) #add_subdirectory(src/locate) #add_subdirectory(src/navigate) diff --git a/include/backends/db_backend.hpp b/include/backends/db_backend.hpp index 9744ff0..aadb962 100644 --- a/include/backends/db_backend.hpp +++ b/include/backends/db_backend.hpp @@ -23,10 +23,14 @@ #include #include #include +#include +#include namespace dindb { using GroupIDType = uint32_t; using FileIDType = uint64_t; + using IDDescMap = std::map; + using ConfirmDeleCallback = std::function; constexpr const GroupIDType InvalidGroupID = 0; constexpr const FileIDType InvalidFileID = 0; @@ -43,6 +47,7 @@ namespace dindb { virtual void delete_all_tags ( const std::vector& parFiles, GroupIDType parSet ) = 0; virtual void delete_all_tags ( const std::vector& parRegexes, GroupIDType parSet ) = 0; + virtual void delete_group ( const std::vector& parIDs, ConfirmDeleCallback parConf ) = 0; }; } //namespace dindb diff --git a/src/backends/postgresql/CMakeLists.txt b/src/backends/postgresql/CMakeLists.txt index 6b840e4..8196219 100644 --- a/src/backends/postgresql/CMakeLists.txt +++ b/src/backends/postgresql/CMakeLists.txt @@ -2,7 +2,7 @@ project(${bare_name}-backend-postgresql CXX) add_library(${PROJECT_NAME} SHARED tag.cpp - #delete.cpp + delete.cpp #locate.cpp #scan.cpp #dbsource.cpp diff --git a/src/backends/postgresql/backend_postgresql.cpp b/src/backends/postgresql/backend_postgresql.cpp index f51d0b3..7de7b4a 100644 --- a/src/backends/postgresql/backend_postgresql.cpp +++ b/src/backends/postgresql/backend_postgresql.cpp @@ -18,6 +18,7 @@ #include "backend_postgresql.hpp" #include "backends/exposed_functions.hpp" #include "tag.hpp" +#include "delete.hpp" #include "pq/connection.hpp" #include #include @@ -99,6 +100,10 @@ namespace dindb { void BackendPostgreSql::delete_all_tags (const std::vector& parRegexes, GroupIDType parSet) { dindb::delete_all_tags(*m_conn, parRegexes, parSet); } + + void BackendPostgreSql::delete_group (const std::vector& parIDs, ConfirmDeleCallback parConf) { + dindb::delete_group_from_db(*m_conn, parIDs, parConf); + } } //namespace dindb extern "C" dindb::Backend* dindexer_create_backend (const YAML::Node* parConfig) { diff --git a/src/backends/postgresql/backend_postgresql.hpp b/src/backends/postgresql/backend_postgresql.hpp index bc87c4a..15cb0e4 100644 --- a/src/backends/postgresql/backend_postgresql.hpp +++ b/src/backends/postgresql/backend_postgresql.hpp @@ -41,6 +41,8 @@ namespace dindb { virtual void delete_all_tags ( const std::vector& parFiles, GroupIDType parSet ) override; virtual void delete_all_tags ( const std::vector& parRegexes, GroupIDType parSet ) override; + virtual void delete_group ( const std::vector& parIDs, ConfirmDeleCallback parConf ) override; + private: std::unique_ptr m_conn; }; diff --git a/src/backends/postgresql/delete.cpp b/src/backends/postgresql/delete.cpp index f75c54a..a87fda4 100644 --- a/src/backends/postgresql/delete.cpp +++ b/src/backends/postgresql/delete.cpp @@ -15,8 +15,7 @@ * along with "dindexer". If not, see . */ -#include "db/delete.hpp" -#include "db/settings.hpp" +#include "delete.hpp" #include "pq/connection.hpp" #include "helpers/infix_iterator.hpp" #include @@ -26,6 +25,7 @@ #include #include #include +#include namespace dindb { namespace { @@ -50,10 +50,10 @@ namespace dindb { } } //unnamed namespace - void delete_group_from_db (const Settings& parDB, const std::vector& parIDs, ConfirmDeleCallback parConf) { - pq::Connection conn(std::string(parDB.username), std::string(parDB.password), std::string(parDB.dbname), std::string(parDB.address), parDB.port); - conn.connect(); - const auto dele_ids = fetch_existing_ids(conn, parIDs); + void delete_group_from_db (pq::Connection& parDB, const std::vector& parIDs, ConfirmDeleCallback parConf) { + assert(parDB.is_connected()); + + const auto dele_ids = fetch_existing_ids(parDB, parIDs); if (dele_ids.empty()) { return; } @@ -70,6 +70,6 @@ namespace dindb { boost::copy(dele_ids | boost::adaptors::map_keys, infix_ostream_iterator(oss, " OR \"id\"=")); oss << ";\nCOMMIT;"; - conn.query(oss.str()); + parDB.query(oss.str()); } } //namespace dindb diff --git a/src/backends/postgresql/delete.hpp b/src/backends/postgresql/delete.hpp index 90d2c6a..341cc47 100644 --- a/src/backends/postgresql/delete.hpp +++ b/src/backends/postgresql/delete.hpp @@ -18,19 +18,22 @@ #ifndef idB070B86E0E4047B1AF4144DEF2759F3C #define idB070B86E0E4047B1AF4144DEF2759F3C +#include "backends/db_backend.hpp" #include #include #include #include #include -namespace dindb { - struct Settings; +namespace pq { + class Connection; +} //namespace pq +namespace dindb { using IDDescMap = std::map; using ConfirmDeleCallback = std::function; - void delete_group_from_db ( const Settings& parDB, const std::vector& parIDs, ConfirmDeleCallback parConf ); + void delete_group_from_db ( pq::Connection& parDB, const std::vector& parIDs, ConfirmDeleCallback parConf ); } //namespace dindb #endif diff --git a/src/delete/main.cpp b/src/delete/main.cpp index e3e17bf..0c42fb2 100644 --- a/src/delete/main.cpp +++ b/src/delete/main.cpp @@ -18,7 +18,6 @@ #include "commandline.hpp" #include "dindexer-common/settings.hpp" #include "dindexerConfig.h" -#include "db/delete.hpp" #include #include #include @@ -69,6 +68,9 @@ int main (int parArgc, char* parArgv[]) { return 1; } } + //TODO: throw if plugin loading failed + assert(settings.backend_plugin.name() == settings.backend_name); + assert(settings.backend_plugin.is_loaded()); if (not vm.count("groupid")) { std::cerr << "No IDs specified\n"; @@ -77,7 +79,7 @@ int main (int parArgc, char* parArgv[]) { const auto ids = vm["groupid"].as>(); auto confirm_func = (vm.count("confirm") ? &always_delete : &confirm_delete); - dindb::delete_group_from_db(settings.db, ids, confirm_func); + settings.backend_plugin.backend().delete_group(ids, confirm_func); return 0; }