libdballe  8.3
db.h
1 #ifndef DBALLE_DB_H
2 #define DBALLE_DB_H
3 
4 #include <dballe/fwd.h>
5 #include <wreport/var.h>
6 #include <memory>
7 #include <vector>
8 
9 namespace dballe {
10 
18 {
24  std::string url;
25 
27  bool wipe = false;
28 
35  void reset_actions();
36 
40  static std::unique_ptr<DBConnectOptions> create(const std::string& url);
41 
46  static std::unique_ptr<DBConnectOptions> test_create(const char* backend=nullptr);
47 
48 protected:
49  DBConnectOptions() = default;
50  DBConnectOptions(const DBConnectOptions&) = default;
52  DBConnectOptions& operator=(const DBConnectOptions&) = default;
53  DBConnectOptions& operator=(DBConnectOptions&&) = default;
54 };
55 
56 
64 {
71  std::string report;
72 
74  bool import_attributes = false;
75 
83  bool update_station = false;
84 
92  bool overwrite = false;
93 
97  std::vector<wreport::Varcode> varlist;
98 
99  static std::unique_ptr<DBImportOptions> create();
100 
101  static const DBImportOptions defaults;
102 
103  friend class DB;
104  friend class Transaction;
105 protected:
106  DBImportOptions() = default;
107  DBImportOptions(const DBImportOptions&) = default;
108  DBImportOptions(DBImportOptions&&) = default;
109  DBImportOptions& operator=(const DBImportOptions&) = default;
110  DBImportOptions& operator=(DBImportOptions&&) = default;
111 };
112 
113 
121 {
123  bool can_replace = false;
124 
131  bool can_add_stations = true;
132 
133  static std::unique_ptr<DBInsertOptions> create();
134 
135  static const DBInsertOptions defaults;
136 
137 protected:
138  DBInsertOptions() = default;
139  DBInsertOptions(const DBInsertOptions&) = default;
140  DBInsertOptions(DBInsertOptions&&) = default;
141  DBInsertOptions& operator=(const DBInsertOptions&) = default;
142  DBInsertOptions& operator=(DBInsertOptions&&) = default;
143 };
144 
145 
146 class Transaction : public std::enable_shared_from_this<Transaction>
147 {
148 public:
149  virtual ~Transaction();
150 
152  virtual void commit() = 0;
153 
155  virtual void rollback() = 0;
156 
158  virtual void rollback_nothrow() noexcept = 0;
159 
173  virtual std::unique_ptr<CursorStation> query_stations(const Query& query) = 0;
174 
186  virtual std::unique_ptr<CursorStationData> query_station_data(const Query& query) = 0;
187 
199  virtual std::unique_ptr<CursorData> query_data(const Query& query) = 0;
200 
209  virtual std::unique_ptr<CursorSummary> query_summary(const Query& query) = 0;
210 
219  virtual std::unique_ptr<CursorMessage> query_messages(const Query& query) = 0;
220 
230  virtual void remove_all() = 0;
231 
238  virtual void remove_station_data(const Query& query) = 0;
239 
246  virtual void remove_data(const Query& query) = 0;
247 
256  virtual void import_message(const Message& message, const DBImportOptions& opts=DBImportOptions::defaults) = 0;
257 
266  virtual void import_messages(const std::vector<std::shared_ptr<Message>>& messages, const DBImportOptions& opts=DBImportOptions::defaults);
267 
279  virtual void insert_station_data(Data& data, const DBInsertOptions& opts=DBInsertOptions::defaults) = 0;
280 
292  virtual void insert_data(Data& data, const DBInsertOptions& opts=DBInsertOptions::defaults) = 0;
293 };
294 
295 
296 struct DB: public std::enable_shared_from_this<DB>
297 {
298  virtual ~DB();
299 
303  static std::shared_ptr<DB> connect(const DBConnectOptions& opts);
304 
309  virtual std::shared_ptr<dballe::Transaction> transaction(bool readonly=false) = 0;
310 
324  virtual std::unique_ptr<CursorStation> query_stations(const Query& query);
325 
337  virtual std::unique_ptr<CursorStationData> query_station_data(const Query& query);
338 
350  virtual std::unique_ptr<CursorData> query_data(const Query& query);
351 
360  virtual std::unique_ptr<CursorSummary> query_summary(const Query& query);
361 
370  virtual std::unique_ptr<CursorMessage> query_messages(const Query& query);
371 
378  void remove_all();
379 
386  void remove_station_data(const Query& query);
387 
394  void remove_data(const Query& query);
395 
404  void import_message(const Message& message, const DBImportOptions& opts=DBImportOptions::defaults);
405 
414  void import_messages(const std::vector<std::shared_ptr<Message>>& messages, const DBImportOptions& opts=DBImportOptions::defaults);
415 
427  void insert_station_data(Data& vals, const DBInsertOptions& opts=DBInsertOptions::defaults);
428 
445  void insert_data(Data& vals, const DBInsertOptions& opts=DBInsertOptions::defaults);
446 };
447 
448 }
449 
450 #endif
Options controlling how values are inserted in the database.
Definition: db.h:120
Definition: db.h:146
static std::unique_ptr< DBConnectOptions > test_create(const char *backend=nullptr)
Create a DBConnectOptions for running unit tests.
Options controlling how to connect to a database.
Definition: db.h:17
std::string url
URL to use to connect to the database.
Definition: db.h:24
A bulletin that has been decoded and physically interpreted.
Definition: message.h:28
Definition: db.h:296
Definition: cmdline.h:18
void reset_actions()
Disable all the one-off actions set to perform on connection.
static std::unique_ptr< DBConnectOptions > create(const std::string &url)
Create a DBConnectOptions parsing the given URL.
std::vector< wreport::Varcode > varlist
If not empty, import only the given data values.
Definition: db.h:97
Query used to filter DB-All.e data.
Definition: query.h:14
std::string report
Report name to use to import data.
Definition: db.h:71
Key/value store where keys are strings and values are wreport variables.
Definition: data.h:17
bool wipe
Wipe database on connection.
Definition: db.h:27
Options controlling how messages are imported in the database.
Definition: db.h:63