libdballe  9.14
db.h
1 #ifndef DBALLE_DB_H
2 #define DBALLE_DB_H
3 
4 #include <dballe/fwd.h>
5 #include <memory>
6 #include <vector>
7 #include <wreport/var.h>
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>
48  test_create(const char* backend = nullptr);
49 
50 protected:
51  DBConnectOptions() = default;
52  DBConnectOptions(const DBConnectOptions&) = default;
54  DBConnectOptions& operator=(const DBConnectOptions&) = default;
55  DBConnectOptions& operator=(DBConnectOptions&&) = default;
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 
108 protected:
109  DBImportOptions() = default;
110  DBImportOptions(const DBImportOptions&) = default;
111  DBImportOptions(DBImportOptions&&) = default;
112  DBImportOptions& operator=(const DBImportOptions&) = default;
113  DBImportOptions& operator=(DBImportOptions&&) = default;
114 };
115 
123 {
124 public:
127  bool can_replace = false;
128 
135  bool can_add_stations = true;
136 
137  static std::unique_ptr<DBInsertOptions> create();
138 
139  static const DBInsertOptions defaults;
140 
141 protected:
142  DBInsertOptions() = default;
143  DBInsertOptions(const DBInsertOptions&) = default;
144  DBInsertOptions(DBInsertOptions&&) = default;
145  DBInsertOptions& operator=(const DBInsertOptions&) = default;
146  DBInsertOptions& operator=(DBInsertOptions&&) = default;
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::shared_ptr<CursorStation>
177  query_stations(const Query& query) = 0;
178 
190  virtual std::shared_ptr<CursorStationData>
191  query_station_data(const Query& query) = 0;
192 
204  virtual std::shared_ptr<CursorData> query_data(const Query& query) = 0;
205 
214  virtual std::shared_ptr<CursorSummary>
215  query_summary(const Query& query) = 0;
216 
225  virtual std::shared_ptr<CursorMessage>
226  query_messages(const Query& query) = 0;
227 
234  virtual void remove_all() = 0;
235 
242  virtual void remove_station_data(const Query& query) = 0;
243 
250  virtual void remove_data(const Query& query) = 0;
251 
260  virtual void
261  import_message(const Message& message,
262  const DBImportOptions& opts = DBImportOptions::defaults) = 0;
263 
272  virtual void
273  import_messages(const std::vector<std::shared_ptr<Message>>& messages,
274  const DBImportOptions& opts = DBImportOptions::defaults);
275 
287  virtual void insert_station_data(
288  Data& data,
289  const DBInsertOptions& opts = DBInsertOptions::defaults) = 0;
290 
302  virtual void
303  insert_data(Data& data,
304  const DBInsertOptions& opts = DBInsertOptions::defaults) = 0;
305 };
306 
307 class DB : public std::enable_shared_from_this<DB>
308 {
309 public:
310  virtual ~DB();
311 
315  static std::shared_ptr<DB> connect(const DBConnectOptions& opts);
316 
321  virtual std::shared_ptr<dballe::Transaction>
322  transaction(bool readonly = false) = 0;
323 
337  virtual std::shared_ptr<CursorStation> query_stations(const Query& query);
338 
350  virtual std::shared_ptr<CursorStationData>
351  query_station_data(const Query& query);
352 
364  virtual std::shared_ptr<CursorData> query_data(const Query& query);
365 
374  virtual std::shared_ptr<CursorSummary> query_summary(const Query& query);
375 
384  virtual std::shared_ptr<CursorMessage> query_messages(const Query& query);
385 
392  void remove_all();
393 
400  void remove_station_data(const Query& query);
401 
408  void remove_data(const Query& query);
409 
418  void
419  import_message(const Message& message,
420  const DBImportOptions& opts = DBImportOptions::defaults);
421 
430  void
431  import_messages(const std::vector<std::shared_ptr<Message>>& messages,
432  const DBImportOptions& opts = DBImportOptions::defaults);
433 
445  void insert_station_data(
446  Data& vals, const DBInsertOptions& opts = DBInsertOptions::defaults);
447 
459  void insert_data(Data& vals,
460  const DBInsertOptions& opts = DBInsertOptions::defaults);
461 };
462 
463 } // namespace dballe
464 
465 #endif
virtual void rollback()=0
Roll back this transaction.
virtual std::shared_ptr< CursorMessage > query_messages(const Query &query)=0
Query the database returning the matching data as Message objects.
bool overwrite
Replace existing data.
Definition: db.h:94
std::vector< wreport::Varcode > varlist
If not empty, import only the given data values.
Definition: db.h:99
bool can_add_stations
If false, it will not create a missing station record, and only data for existing stations can be add...
Definition: db.h:135
virtual std::shared_ptr< CursorStationData > query_station_data(const Query &query)
Query the station variables in the database.
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
virtual std::shared_ptr< CursorMessage > query_messages(const Query &query)
Query the database returning the matching data as Message objects.
bool import_attributes
Import variable attributes.
Definition: db.h:76
virtual void import_message(const Message &message, const DBImportOptions &opts=DBImportOptions::defaults)=0
Import a Message into the DB-All.e database.
virtual std::shared_ptr< CursorSummary > query_summary(const Query &query)=0
Query a summary of what the result would be for a query.
bool update_station
Update station information.
Definition: db.h:85
void insert_data(Data &vals, const DBInsertOptions &opts=DBInsertOptions::defaults)
Insert data values into the database.
virtual std::shared_ptr< CursorStation > query_stations(const Query &query)
Start a query on the station variables archive.
virtual std::shared_ptr< CursorSummary > query_summary(const Query &query)
Query a summary of what the result would be for a query.
Definition: cmdline.h:18
virtual void insert_data(Data &data, const DBInsertOptions &opts=DBInsertOptions::defaults)=0
Insert data values into the database.
bool wipe
Wipe database on connection.
Definition: db.h:28
virtual std::shared_ptr< CursorStation > query_stations(const Query &query)=0
Start a query on the station variables archive.
Options controlling how values are inserted in the database.
Definition: db.h:122
virtual void rollback_nothrow() noexcept=0
Roll back this transaction.
void reset_actions()
Disable all the one-off actions set to perform on connection.
virtual void remove_station_data(const Query &query)=0
Remove data from the database.
A bulletin that has been decoded and physically interpreted.
Definition: message.h:28
void remove_station_data(const Query &query)
Remove data from the database.
static std::shared_ptr< DB > connect(const DBConnectOptions &opts)
Create a new DB.
Key/value store where keys are strings and values are wreport variables.
Definition: data.h:17
virtual void insert_station_data(Data &data, const DBInsertOptions &opts=DBInsertOptions::defaults)=0
Insert station values into the database.
virtual std::shared_ptr< dballe::Transaction > transaction(bool readonly=false)=0
Begin a transaction on this database, and return a Transaction object that can be used to commit it...
Definition: db.h:307
void remove_data(const Query &query)
Remove data from the database.
std::string url
URL to use to connect to the database.
Definition: db.h:25
virtual void import_messages(const std::vector< std::shared_ptr< Message >> &messages, const DBImportOptions &opts=DBImportOptions::defaults)
Import Messages into the DB-All.e database.
virtual void commit()=0
Commit this transaction.
virtual std::shared_ptr< CursorData > query_data(const Query &query)
Query the database.
void import_messages(const std::vector< std::shared_ptr< Message >> &messages, const DBImportOptions &opts=DBImportOptions::defaults)
Import Messages into the DB-All.e database.
virtual std::shared_ptr< CursorStationData > query_station_data(const Query &query)=0
Query the station variables in the database.
virtual std::shared_ptr< CursorData > query_data(const Query &query)=0
Query the database.
virtual void remove_all()=0
Remove all data from the database.
virtual void remove_data(const Query &query)=0
Remove data from the database.
bool can_replace
If true, then existing data can be rewritten, else data can only be added.
Definition: db.h:127
void remove_all()
Remove all data from the database.
Query used to filter DB-All.e data.
Definition: query.h:16
void import_message(const Message &message, const DBImportOptions &opts=DBImportOptions::defaults)
Import a Message into the DB-All.e database.
void insert_station_data(Data &vals, const DBInsertOptions &opts=DBInsertOptions::defaults)
Insert station values into the database.
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.