libdballe 9.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
9namespace dballe {
10
18{
19public:
25 std::string url;
26
28 bool wipe = false;
29
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
49protected:
50 DBConnectOptions() = default;
51 DBConnectOptions(const DBConnectOptions&) = default;
53 DBConnectOptions& operator=(const DBConnectOptions&) = default;
54 DBConnectOptions& operator=(DBConnectOptions&&) = default;
55};
56
57
65{
66public:
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;
107protected:
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{
124public:
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
140protected:
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
149class Transaction : public std::enable_shared_from_this<Transaction>
150{
151public:
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> query_stations(const Query& query) = 0;
177
189 virtual std::shared_ptr<CursorStationData> query_station_data(const Query& query) = 0;
190
202 virtual std::shared_ptr<CursorData> query_data(const Query& query) = 0;
203
212 virtual std::shared_ptr<CursorSummary> query_summary(const Query& query) = 0;
213
222 virtual std::shared_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
296class DB: public std::enable_shared_from_this<DB>
297{
298public:
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::shared_ptr<CursorStation> query_stations(const Query& query);
326
338 virtual std::shared_ptr<CursorStationData> query_station_data(const Query& query);
339
351 virtual std::shared_ptr<CursorData> query_data(const Query& query);
352
361 virtual std::shared_ptr<CursorSummary> query_summary(const Query& query);
362
371 virtual std::shared_ptr<CursorMessage> query_messages(const Query& query);
372
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
Cursor iterating over data values.
Definition: cursor.h:78
Cursor iterating over messages.
Definition: cursor.h:118
Cursor iterating over station data values.
Definition: cursor.h:67
Cursor iterating over stations.
Definition: cursor.h:57
Cursor iterating over summary entries.
Definition: cursor.h:98
Options controlling how to connect to a database.
Definition: db.h:18
void reset_actions()
Disable all the one-off actions set to perform on connection.
std::string url
URL to use to connect to the database.
Definition: db.h:25
static std::unique_ptr< DBConnectOptions > test_create(const char *backend=nullptr)
Create a DBConnectOptions for running unit tests.
static std::unique_ptr< DBConnectOptions > create(const std::string &url)
Create a DBConnectOptions parsing the given URL.
bool wipe
Wipe database on connection.
Definition: db.h:28
Options controlling how messages are imported in the database.
Definition: db.h:65
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
std::string report
Report name to use to import data.
Definition: db.h:73
bool update_station
Update station information.
Definition: db.h:85
bool import_attributes
Import variable attributes.
Definition: db.h:76
Options controlling how values are inserted in the database.
Definition: db.h:123
bool can_replace
If true, then existing data can be rewritten, else data can only be added.
Definition: db.h:126
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:134
Definition: db.h:297
void import_message(const Message &message, const DBImportOptions &opts=DBImportOptions::defaults)
Import a Message into the DB-All.e database.
virtual std::shared_ptr< CursorStation > query_stations(const Query &query)
Start a query on the station variables archive.
static std::shared_ptr< DB > connect(const DBConnectOptions &opts)
Create a new DB.
void remove_station_data(const Query &query)
Remove data from the database.
virtual std::shared_ptr< CursorMessage > query_messages(const Query &query)
Query the database returning the matching data as Message objects.
virtual std::shared_ptr< CursorSummary > query_summary(const Query &query)
Query a summary of what the result would be for a query.
void remove_data(const Query &query)
Remove data from 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.
void remove_all()
Remove all data from the database.
void insert_station_data(Data &vals, const DBInsertOptions &opts=DBInsertOptions::defaults)
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.
void insert_data(Data &vals, const DBInsertOptions &opts=DBInsertOptions::defaults)
Insert data values into the database.
virtual std::shared_ptr< CursorStationData > query_station_data(const Query &query)
Query the station variables in the database.
virtual std::shared_ptr< CursorData > query_data(const Query &query)
Query the database.
Key/value store where keys are strings and values are wreport variables.
Definition: data.h:18
A bulletin that has been decoded and physically interpreted.
Definition: message.h:29
Query used to filter DB-All.e data.
Definition: query.h:15
Definition: db.h:150
virtual void insert_data(Data &data, const DBInsertOptions &opts=DBInsertOptions::defaults)=0
Insert data values into the database.
virtual std::shared_ptr< CursorStationData > query_station_data(const Query &query)=0
Query the station variables in the database.
virtual void remove_data(const Query &query)=0
Remove data from the database.
virtual std::shared_ptr< CursorMessage > query_messages(const Query &query)=0
Query the database returning the matching data as Message objects.
virtual void insert_station_data(Data &data, const DBInsertOptions &opts=DBInsertOptions::defaults)=0
Insert station values into the database.
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 std::shared_ptr< CursorSummary > query_summary(const Query &query)=0
Query a summary of what the result would be for a query.
virtual void commit()=0
Commit this transaction.
virtual void remove_station_data(const Query &query)=0
Remove data from the database.
virtual void rollback_nothrow() noexcept=0
Roll back this transaction.
virtual void import_message(const Message &message, const DBImportOptions &opts=DBImportOptions::defaults)=0
Import a Message into the DB-All.e database.
virtual void remove_all()=0
Remove all data from the database.
virtual std::shared_ptr< CursorStation > query_stations(const Query &query)=0
Start a query on the station variables archive.
virtual std::shared_ptr< CursorData > query_data(const Query &query)=0
Query the database.
virtual void rollback()=0
Roll back this transaction.