libdballe  7.21
v7/db.h
1 #ifndef DBA_DB_V7_H
2 #define DBA_DB_V7_H
3 
4 #include <dballe/db/db.h>
5 #include <dballe/db/trace.h>
6 #include <dballe/db/v7/state.h>
7 #include <dballe/db/v7/data.h>
8 #include <wreport/varinfo.h>
9 #include <string>
10 #include <vector>
11 #include <memory>
12 
13 namespace dballe {
14 struct Station;
15 struct StationValues;
16 struct DataValues;
17 
18 namespace sql {
19 struct Connection;
20 struct Statement;
21 struct Sequence;
22 }
23 
24 namespace db {
25 
26 namespace v7 {
27 struct State;
28 struct Driver;
29 struct Repinfo;
30 struct Station;
31 struct LevTr;
32 }
33 
34 namespace v7 {
35 
39 class DB : public dballe::DB
40 {
41 public:
47  bool explain_queries = false;
48 
49 protected:
52 
61  v7::Repinfo* m_repinfo = nullptr;
63  v7::Station* m_station = nullptr;
65  v7::LevTr* m_levtr = nullptr;
67  v7::StationData* m_station_data = nullptr;
69  v7::Data* m_data = nullptr;
72  void init_after_connect();
73 
74  DB(std::unique_ptr<dballe::sql::Connection> conn);
75 
76  /*
77  * Lookup, insert or replace data in station taking the values from
78  * rec.
79  *
80  * If rec did not contain ana_id, it will be set by this function.
81  *
82  * @param rec
83  * The record with the station information
84  * @param can_add
85  * If true we can insert new stations in the database, if false we
86  * only look up existing records and raise an exception if missing
87  * @returns
88  * The station ID
89  */
90  v7::stations_t::iterator obtain_station(v7::State& state, const dballe::Station& st, bool can_add=true);
91 
92 public:
93  virtual ~DB();
94 
95  db::Format format() const { return V7; }
96 
98  v7::Driver& driver();
99 
101  v7::Repinfo& repinfo();
102 
104  v7::Station& station();
105 
107  v7::LevTr& levtr();
108 
110  v7::StationData& station_data();
111 
113  v7::Data& data();
114 
115  std::unique_ptr<dballe::Transaction> transaction() override;
116 
117  void disappear();
118 
130  void reset(const char* repinfo_file = 0);
131 
135  void delete_tables();
136 
154  void update_repinfo(const char* repinfo_file, int* added, int* deleted, int* updated);
155 
156  std::map<std::string, int> get_repinfo_priorities();
157 
161  int rep_cod_from_memo(const char* memo);
162 
163  void insert_station_data(dballe::Transaction& transaction, StationValues& vals, bool can_replace, bool station_can_add) override;
164  void insert_data(dballe::Transaction& transaction, DataValues& vals, bool can_replace, bool station_can_add) override;
165 
166  void remove_station_data(dballe::Transaction& transaction, const Query& query) override;
167  void remove(dballe::Transaction& transaction, const Query& query);
168  void remove_all(dballe::Transaction& transaction);
169 
179  void vacuum();
180 
181  std::unique_ptr<db::CursorStation> query_stations(const Query& query);
182  std::unique_ptr<db::CursorStationData> query_station_data(const Query& query) override;
183  std::unique_ptr<db::CursorData> query_data(const Query& query);
184  std::unique_ptr<db::CursorSummary> query_summary(const Query& query);
185 
186  void attr_query_station(int data_id, std::function<void(std::unique_ptr<wreport::Var>)>&& dest) override;
187  void attr_query_data(int data_id, std::function<void(std::unique_ptr<wreport::Var>)>&& dest) override;
188  void attr_insert_station(dballe::Transaction& transaction, int data_id, const Values& attrs) override;
189  void attr_insert_data(dballe::Transaction& transaction, int data_id, const Values& attrs) override;
190  void attr_remove_station(dballe::Transaction& transaction, int data_id, const db::AttrList& attrs) override;
191  void attr_remove_data(dballe::Transaction& transaction, int data_id, const db::AttrList& attrs) override;
192  bool is_station_variable(int data_id, wreport::Varcode varcode) override;
193 
194  void import_msg(dballe::Transaction& transaction, const Message& msg, const char* repmemo, int flags) override;
195  bool export_msgs(dballe::Transaction& transaction, const Query& query, std::function<bool(std::unique_ptr<Message>&&)> dest) override;
196 
200  void dump(FILE* out);
201 
202  friend class dballe::DB;
203 };
204 
205 }
206 }
207 }
208 #endif
A RAII transaction interface.
Definition: transaction.h:15
Information about a station.
Definition: values.h:20
Cache intermediate results during a database transaction, to avoid hitting the database multiple time...
Definition: state.h:140
Definition: db/trace.h:39
A set of measured values.
Definition: values.h:303
A bulletin that has been decoded and physically interpreted.
Definition: message.h:28
Fast cached access to the repinfo table.
Definition: v7/repinfo.h:76
Copyright (C) 2008–2010 ARPA-SIM urpsim@smr.arpa.emr.it
Definition: cmdline.h:17
Definition: v7/station.h:19
Functions used to connect to DB-All.e and insert, query and delete data.
db::Format format() const
Return the format of this DB.
Definition: v7/db.h:95
Definition: sql.h:59
Trace trace
Database query tracing.
Definition: v7/db.h:45
uint16_t Varcode
dballe::sql::Connection * conn
Database connection.
Definition: v7/db.h:43
Precompiled queries to manipulate the lev_tr table.
Definition: v7/levtr.h:24
Definition: db.h:156
Query used to filter DB-All.e data.
Definition: query.h:14
DB-ALLe database connection for database format V7.
Definition: v7/db.h:39
A set of station values.
Definition: values.h:273
v7::Driver * m_driver
SQL driver backend.
Definition: v7/db.h:51
Collection of Value objects, indexed by wreport::Varcode.
Definition: values.h:202
Definition: v7/driver.h:26