libdballe 9.13
transaction.h
1#ifndef DBALLE_DB_V7_TRANSACTION_H
2#define DBALLE_DB_V7_TRANSACTION_H
3
4#include <dballe/db/db.h>
5#include <dballe/db/v7/batch.h>
6#include <dballe/db/v7/data.h>
7#include <dballe/db/v7/fwd.h>
8#include <dballe/sql/fwd.h>
9#include <memory>
10
11namespace dballe {
12namespace db {
13namespace v7 {
14
15struct Transaction : public dballe::db::Transaction
16{
17protected:
23 v7::LevTr* m_levtr = nullptr;
27 v7::Data* m_data = nullptr;
28
30 std::vector<std::weak_ptr<dballe::Cursor>> tracked_cursors;
31
32 void add_msg_to_batch(Tracer<>& trc, const Message& message,
33 const dballe::DBImportOptions& opts);
34 void track_cursor(std::weak_ptr<dballe::Cursor> cursor);
35
36public:
37 typedef v7::DB DB;
38
39 std::shared_ptr<v7::DB> db;
41 std::shared_ptr<dballe::sql::Transaction> sql_transaction;
43 bool fired = false;
48
49 Transaction(std::shared_ptr<v7::DB> db,
50 std::unique_ptr<dballe::sql::Transaction> sql_transaction);
51 Transaction(const Transaction&) = delete;
52 Transaction(Transaction&&) = delete;
53 Transaction& operator=(const Transaction&) = delete;
54 Transaction& operator=(Transaction&&) = delete;
55 ~Transaction();
56
67
68 void commit() override;
69 void rollback() override;
70 void rollback_nothrow() noexcept override;
71 void clear_cached_state() override;
72
73 std::shared_ptr<dballe::CursorStation>
74 query_stations(const Query& query) override;
75 std::shared_ptr<dballe::CursorStationData>
76 query_station_data(const Query& query) override;
77 std::shared_ptr<dballe::CursorData> query_data(const Query& query) override;
78 std::shared_ptr<dballe::CursorSummary>
79 query_summary(const Query& query) override;
80 std::shared_ptr<dballe::CursorMessage>
81 query_messages(const Query& query) override;
83 int data_id,
84 std::function<void(std::unique_ptr<wreport::Var>)> dest) override;
86 int data_id,
87 std::function<void(std::unique_ptr<wreport::Var>)> dest) override;
88
89 void insert_station_data(dballe::Data& vals,
90 const dballe::DBInsertOptions& opts =
91 dballe::DBInsertOptions::defaults) override;
92 void insert_data(dballe::Data& vals,
93 const dballe::DBInsertOptions& opts =
94 dballe::DBInsertOptions::defaults) override;
95 void remove_station_data(const Query& query) override;
96 void remove_data(const Query& query) override;
97 void remove_station_data_by_id(int id);
98 void remove_data_by_id(int id);
99 void remove_all() override;
100
101 void attr_insert_station(int data_id, const Values& attrs) override;
102 void attr_insert_data(int data_id, const Values& attrs) override;
103 void attr_remove_station(int data_id, const db::AttrList& attrs) override;
104 void attr_remove_data(int data_id, const db::AttrList& attrs) override;
105 void import_message(const Message& message,
106 const dballe::DBImportOptions& opts) override;
107 void import_messages(const std::vector<std::shared_ptr<Message>>& msgs,
108 const dballe::DBImportOptions& opts) override;
109 void update_repinfo(const char* repinfo_file, int* added, int* deleted,
110 int* updated) override;
111
112 static Transaction& downcast(dballe::db::Transaction& transaction);
113
114 void dump(FILE* out) override;
115};
116
117struct TestTransaction : public Transaction
118{
119 using Transaction::Transaction;
120
121 void commit() override;
122};
123
124} // namespace v7
125} // namespace db
126} // namespace dballe
127#endif
Cursor iterating over messages.
Definition cursor.h:119
Options controlling how messages are imported in the database.
Definition db.h:65
Options controlling how values are inserted in the database.
Definition db.h:123
A bulletin that has been decoded and physically interpreted.
Definition message.h:29
Query used to filter DB-All.e data.
Definition query.h:17
Definition db/db.h:156
Definition batch.h:19
DB-ALLe database connection for database format V7.
Definition db/v7/db.h:21
Smart pointer for trace::Step objects, which calls done() when going out of scope.
Definition db/v7/fwd.h:45
Functions used to connect to DB-All.e and insert, query and delete data.
Forward declarations for public dballe/sql names.
Collection of Value objects, indexed by wreport::Varcode.
Definition values.h:216
Definition db/db.h:108
Definition db/db.h:73
Definition db/db.h:60
Definition db/db.h:143
Definition db/v7/data.h:170
Precompiled queries to manipulate the lev_tr table.
Definition levtr.h:21
Fast cached access to the repinfo table.
Definition repinfo.h:73
Definition db/v7/data.h:147
Definition station.h:25
Definition transaction.h:118
void commit() override
Commit this transaction.
void remove_all() override
Remove all data from the database.
v7::LevTr & levtr()
Access the levtr table.
std::shared_ptr< dballe::CursorStationData > query_station_data(const Query &query) override
Query the station variables in the database.
void remove_data(const Query &query) override
Remove data from the database.
void attr_query_data(int data_id, std::function< void(std::unique_ptr< wreport::Var >)> dest) override
Query attributes on a data value.
void import_messages(const std::vector< std::shared_ptr< Message > > &msgs, const dballe::DBImportOptions &opts) override
Import Messages into the DB-All.e database.
void insert_station_data(dballe::Data &vals, const dballe::DBInsertOptions &opts=dballe::DBInsertOptions::defaults) override
Insert station values into the database.
std::shared_ptr< dballe::CursorData > query_data(const Query &query) override
Query the database.
void clear_cached_state() override
Clear state information cached during the transaction.
v7::StationData * m_station_data
Station data.
Definition transaction.h:25
void attr_query_station(int data_id, std::function< void(std::unique_ptr< wreport::Var >)> dest) override
Query attributes on a station value.
v7::Repinfo & repinfo()
Access the repinfo table.
std::shared_ptr< dballe::CursorSummary > query_summary(const Query &query) override
Query a summary of what the result would be for a query.
void attr_insert_data(int data_id, const Values &attrs) override
Insert new attributes on a data value.
void dump(FILE *out) override
Dump the entire contents of the database to an output stream.
void remove_station_data(const Query &query) override
Remove data from the database.
void update_repinfo(const char *repinfo_file, int *added, int *deleted, int *updated) override
Update the repinfo table in the database, with the data found in the given file.
v7::Tracer< v7::trace::Transaction > trc
Tracing system.
Definition transaction.h:47
v7::Station & station()
Access the station table.
v7::Data * m_data
Variable data.
Definition transaction.h:27
std::vector< std::weak_ptr< dballe::Cursor > > tracked_cursors
Track active cursors to invalidate them on commit/rollback.
Definition transaction.h:30
void rollback() override
Roll back this transaction.
v7::StationData & station_data()
Access the station_data table.
void import_message(const Message &message, const dballe::DBImportOptions &opts) override
Import a Message into the DB-All.e database.
void attr_remove_data(int data_id, const db::AttrList &attrs) override
Delete attributes from a data value.
void rollback_nothrow() noexcept override
Roll back this transaction.
void attr_insert_station(int data_id, const Values &attrs) override
Insert new attributes on a station value.
v7::Data & data()
Access the data table.
void commit() override
Commit this transaction.
void attr_remove_station(int data_id, const db::AttrList &attrs) override
Delete attributes from a station value.
v7::Station * m_station
Station information.
Definition transaction.h:21
bool fired
True if commit or rollback have already been called on this transaction.
Definition transaction.h:43
void insert_data(dballe::Data &vals, const dballe::DBInsertOptions &opts=dballe::DBInsertOptions::defaults) override
Insert data values into the database.
std::shared_ptr< dballe::CursorMessage > query_messages(const Query &query) override
Query the database returning the matching data as Message objects.
std::shared_ptr< dballe::CursorStation > query_stations(const Query &query) override
Start a query on the station variables archive.
v7::Repinfo * m_repinfo
Report information.
Definition transaction.h:19
std::shared_ptr< dballe::sql::Transaction > sql_transaction
SQL-side transaction.
Definition transaction.h:41
v7::LevTr * m_levtr
Level/timerange information.
Definition transaction.h:23
v7::Batch batch
Batch importer.
Definition transaction.h:45