Data_deduplication_service
Service that will use hashes to deduplicate files
dbManager.h
Go to the documentation of this file.
1 #ifndef DATA_DEDUPLICATION_SERVICE_DBMANAGER_H
2 #define DATA_DEDUPLICATION_SERVICE_DBMANAGER_H
3 
4 #include <iostream>
5 #include <vector>
6 #include <utility>
7 #include <string>
8 
9 #include <pqxx/pqxx>
10 
11 #include "myConcepts.h"
12 #include "dbCommon.h"
13 #include "HashUtils.h"
14 
15 
17 using
19 using namespace hash_utils;
20 
21 
23 namespace db_services {
24  using myConcepts::gClk;
25 
30  void diconnect(conPtr &conn);
31 
39  class dbManager {
40  public:
41  dbManager() : cString_(db_services::defaultConfiguration()), conn_(nullptr) {}
42 
43  explicit dbManager(myConnString &ss) : cString_(ss), conn_(nullptr) {}
44 
46  cString_ = ss;
47  disconnect();
48  }
49 
50  [[nodiscard]] const myConnString &getCString() const {
51  return cString_;
52  }
53 
54  int connectToDb();
55 
56  void disconnect() {
58  }
59 
60  //inpired by https://stackoverflow.com/questions/49122358/libbqxx-c-api-to-connect-to-postgresql-without-db-name
65  int createDatabase(std::string_view dbName);
66 
71  int dropDatabase(std::string_view dbName);
72 
76  int fillSchemas();
77 
81  int clearSegments();
82 
87  std::vector<std::pair<indexType, std::string>> getAllFiles(std::string_view dirPath);
88 
95  indexType createFile(std::string_view filePath, uintmax_t fileSize = 0, size_t segmentSize = 0,
96  hash_function hash = SHA_256);
97 
103  indexType createDirectory(std::string_view dirPath);
104 
110  int deleteFile(std::string_view filePath, indexType fileId = paramType::EmptyParameterValue);
111 
116  int deleteDirectory(std::string_view directoryPath);
117 
124  int getFileStreamed(std::string_view fileName, std::ostream &output,
126 
134  int insertFileFromStream(std::string_view fileName, std::istream &in, size_t segmentSize, std::size_t fileSize,
135  const hash_function& hash=SHA_256);
136 
142  int finishFileProcessing(std::string_view filePath, indexType fileId);
143 
145  return db_services::checkConnection(conn_);
146  }
147 
149  disconnect();
150  }
151 
159  template<typename ResultType, typename ... Args>
160  tl::expected<ResultType, int>
161  executeInTransaction(ResultType (*call)(trasnactionType &, Args ...), Args &&... args) {
162  return db_services::executeInTransaction(conn_, call, std::forward<Args>(args)...);
163  }
164 
172  template<typename ResultType, typename ... Args>
173  tl::expected<ResultType, int>
174  executeInTransaction(const std::function<ResultType(trasnactionType &, Args ...)> &call, Args &&... args) {
175  return db_services::executeInTransaction(conn_, call, std::forward<Args>(args)...);
176  }
177 
178  private:
183  int updateFileTime(indexType fileId);
184 
185  myConnString cString_;
186  conPtr conn_;
187 
188  };
189 
190 
191 
192 
193 }
194 
195 
196 #endif //DATA_DEDUPLICATION_SERVICE_DBMANAGER_H
Database manager that handles database management.
Definition: dbManager.h:39
tl::expected< ResultType, int > executeInTransaction(ResultType(*call)(trasnactionType &, Args ...), Args &&... args)
Definition: dbManager.h:161
~dbManager()
Definition: dbManager.h:148
const myConnString & getCString() const
Definition: dbManager.h:50
dbManager(myConnString &ss)
Definition: dbManager.h:43
void disconnect()
Definition: dbManager.h:56
void setCString(myConnString &ss)
Definition: dbManager.h:45
tl::expected< ResultType, int > executeInTransaction(const std::function< ResultType(trasnactionType &, Args ...)> &call, Args &&... args)
Definition: dbManager.h:174
dbManager()
Definition: dbManager.h:41
bool checkConnection()
Definition: dbManager.h:144
db_services namespace
Definition: dbCommon.h:17
pqxx::transaction< pqxx::isolation_level::read_committed > trasnactionType
Definition: dbCommon.h:35
int64_t indexType
Definition: dbCommon.h:34
tl::expected< ResultType, int > executeInTransaction(conPtr &conn, ResultType(*call)(trasnactionType &, Args ...), Args &&... args)
Definition: dbCommon.h:246
bool checkConnection(const conPtr &conn)
Definition: dbCommon.cpp:309
void diconnect(conPtr &conn)
Definition: dbManager.cpp:4
std::shared_ptr< connectionType > conPtr
Definition: dbCommon.h:37
hash utils namespace
Definition: HashUtils.h:19
hash_function
Definition: HashUtils.h:28
@ SHA_256
Definition: HashUtils.h:30
paramType
Definition: myConcepts.h:57
@ EmptyParameterValue
Definition: myConcepts.h:58
clockType gClk
Definition: myConcepts.cpp:9
Structure to store and format connection string.
Definition: myConnString.h:15