libdballe  8.6
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 {
19 public:
25  std::string url;
26 
28  bool wipe = false;
29 
36  void reset_actions();
37 
41  static std::unique_ptr<DBConnectOptions> create(const std::string& url);
42 
47  static std::unique_ptr<DBConnectOptions> test_create(const char* backend=nullptr);
48 
49 protected:
50  DBConnectOptions() = default;
51  DBConnectOptions(const DBConnectOptions&) = default;
53  DBConnectOptions& operator=(const DBConnectOptions&) = default;
54  DBConnectOptions& operator=(DBConnectOptions&&) = default;
55 };
56 
57 
65 {
66 public:
73  std::string report;
74 
76  bool import_attributes = false;
77 
85  bool update_station = false;
86 
94  bool overwrite = false;
95 
99  std::vector<wreport::Varcode> varlist;
100 
101  static std::unique_ptr<DBImportOptions> create();
102 
103  static const DBImportOptions defaults;
104 
105  friend class DB;
106  friend class Transaction;
107 protected:
108  DBImportOptions() = default;
109  DBImportOptions(const DBImportOptions&) = default;
110  DBImportOptions(DBImportOptions&&) = default;
111  DBImportOptions& operator=(const DBImportOptions&) = default;
112  DBImportOptions& operator=(DBImportOptions&&) = default;
113 };
114 
115 
123 {
124 public:
126  bool can_replace = false;
127 
134  bool can_add_stations = true;
135 
136  static std::unique_ptr<DBInsertOptions> create();
137 
138  static const DBInsertOptions defaults;
139 
140 protected:
141  DBInsertOptions() = default;
142  DBInsertOptions(const DBInsertOptions&) = default;
143  DBInsertOptions(DBInsertOptions&&) = default;
144  DBInsertOptions& operator=(const DBInsertOptions&) = default;
145  DBInsertOptions& operator=(DBInsertOptions&&) = default;
146 };
147 
148 
149 class Transaction : public std::enable_shared_from_this<Transaction>
150 {
151 public:
152  virtual ~Transaction();
153 
155  virtual void commit() = 0;
156 
158  virtual void rollback() = 0;
159 
161  virtual void rollback_nothrow() noexcept = 0;
162 
176  virtual std::unique_ptr<CursorStation> query_stations(const Query& query) = 0;
177 
189  virtual std::unique_ptr<CursorStationData> query_station_data(const Query& query) = 0;
190 
202  virtual std::unique_ptr<CursorData> query_data(const Query& query) = 0;
203 
212  virtual std::unique_ptr<CursorSummary> query_summary(const Query& query) = 0;
213 
222  virtual std::unique_ptr<CursorMessage> query_messages(const Query& query) = 0;
223 
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 class DB: public std::enable_shared_from_this<DB>
297 {
298 public:
299  virtual ~DB();
300 
304  static std::shared_ptr<DB> connect(const DBConnectOptions& opts);
305 
310  virtual std::shared_ptr<dballe::Transaction> transaction(bool readonly=false) = 0;
311 
325  virtual std::unique_ptr<CursorStation> query_stations(const Query& query);
326 
338  virtual std::unique_ptr<CursorStationData> query_station_data(const Query& query);
339 
351  virtual std::unique_ptr<CursorData> query_data(const Query& query);
352 
361  virtual std::unique_ptr<CursorSummary> query_summary(const Query& query);
362 
371  virtual std::unique_ptr<CursorMessage> query_messages(const Query& query);
372 
379  void remove_all();
380 
387  void remove_station_data(const Query& query);
388 
395  void remove_data(const Query& query);
396 
405  void import_message(const Message& message, const DBImportOptions& opts=DBImportOptions::defaults);
406 
415  void import_messages(const std::vector<std::shared_ptr<Message>>& messages, const DBImportOptions& opts=DBImportOptions::defaults);
416 
428  void insert_station_data(Data& vals, const DBInsertOptions& opts=DBInsertOptions::defaults);
429 
441  void insert_data(Data& vals, const DBInsertOptions& opts=DBInsertOptions::defaults);
442 };
443 
444 }
445 
446 #endif
std::vector< wreport::Varcode > varlist
If not empty, import only the given data values.
Definition: db.h:99
Options controlling how messages are imported in the database.
Definition: db.h:64
Definition: db.h:149
std::string report
Report name to use to import data.
Definition: db.h:73
Definition: cmdline.h:18
bool wipe
Wipe database on connection.
Definition: db.h:28
Options controlling how values are inserted in the database.
Definition: db.h:122
void reset_actions()
Disable all the one-off actions set to perform on connection.
A bulletin that has been decoded and physically interpreted.
Definition: message.h:28
Key/value store where keys are strings and values are wreport variables.
Definition: data.h:17
Definition: db.h:296
std::string url
URL to use to connect to the database.
Definition: db.h:25
Query used to filter DB-All.e data.
Definition: query.h:14
static std::unique_ptr< DBConnectOptions > create(const std::string &url)
Create a DBConnectOptions parsing the given URL.
Options controlling how to connect to a database.
Definition: db.h:17
static std::unique_ptr< DBConnectOptions > test_create(const char *backend=nullptr)
Create a DBConnectOptions for running unit tests.