libdballe  7.19
v6/db.h
1 #ifndef DBA_DB_V6_H
2 #define DBA_DB_V6_H
3 
4 #include <dballe/db/db.h>
5 #include <dballe/db/trace.h>
6 #include <wreport/varinfo.h>
7 #include <string>
8 #include <vector>
9 #include <memory>
10 
11 namespace dballe {
12 struct Station;
13 struct StationValues;
14 struct DataValues;
15 
16 namespace sql {
17 struct Connection;
18 struct Statement;
19 struct Sequence;
20 }
21 
22 namespace db {
23 
24 namespace v6 {
25 struct Driver;
26 struct Repinfo;
27 struct Station;
28 struct LevTr;
29 struct LevTrCache;
30 struct DataV6;
31 struct AttrV6;
32 }
33 
34 namespace v6 {
35 
39 class DB : public dballe::DB
40 {
41 public:
47  bool explain_queries = false;
48 
49 protected:
52 
69  struct v6::DataV6* m_data;
71  struct v6::AttrV6* m_attr;
74  void init_after_connect();
75 
76  DB(std::unique_ptr<dballe::sql::Connection> conn);
77 
78  /*
79  * Lookup, insert or replace data in station taking the values from
80  * rec.
81  *
82  * If rec did not contain ana_id, it will be set by this function.
83  *
84  * @param rec
85  * The record with the station information
86  * @param can_add
87  * If true we can insert new stations in the database, if false we
88  * only look up existing records and raise an exception if missing
89  * @returns
90  * The station ID
91  */
92  int obtain_station(const dballe::Station& st, bool can_add=true);
93 
94 public:
95  virtual ~DB();
96 
97  db::Format format() const { return V6; }
98 
100  v6::Driver& driver();
101 
103  v6::Repinfo& repinfo();
104 
106  v6::Station& station();
107 
109  v6::LevTr& lev_tr();
110 
112  v6::LevTrCache& lev_tr_cache();
113 
115  v6::DataV6& data();
116 
118  v6::AttrV6& attr();
119 
120  std::unique_ptr<dballe::Transaction> transaction() override;
121 
122  void disappear();
123 
135  void reset(const char* repinfo_file = 0);
136 
140  void delete_tables();
141 
159  void update_repinfo(const char* repinfo_file, int* added, int* deleted, int* updated);
160 
161  std::map<std::string, int> get_repinfo_priorities();
162 
166  int rep_cod_from_memo(const char* memo);
167 
168  void insert_station_data(dballe::Transaction& transaction, StationValues& vals, bool can_replace, bool station_can_add) override;
169  void insert_data(dballe::Transaction& transaction, DataValues& vals, bool can_replace, bool station_can_add) override;
170 
171  void remove_station_data(dballe::Transaction& transaction, const Query& query) override;
172  void remove(dballe::Transaction& transaction, const Query& query);
173  void remove_all(dballe::Transaction& transaction);
174 
184  void vacuum();
185 
186  std::unique_ptr<db::CursorStation> query_stations(const Query& query);
187  std::unique_ptr<db::CursorStationData> query_station_data(const Query& query) override;
188  std::unique_ptr<db::CursorData> query_data(const Query& query);
189  std::unique_ptr<db::CursorSummary> query_summary(const Query& query);
190 
191  void attr_query_station(int data_id, std::function<void(std::unique_ptr<wreport::Var>)>&& dest) override;
192  void attr_query_data(int data_id, std::function<void(std::unique_ptr<wreport::Var>)>&& dest) override;
193  void attr_insert_station(dballe::Transaction& transaction, int data_id, const Values& attrs) override;
194  void attr_insert_data(dballe::Transaction& transaction, int data_id, const Values& attrs) override;
195  void attr_remove_station(dballe::Transaction& transaction, int data_id, const db::AttrList& qcs) override;
196  void attr_remove_data(dballe::Transaction& transaction, int data_id, const db::AttrList& qcs) override;
197  bool is_station_variable(int data_id, wreport::Varcode varcode) override;
198 
199  void import_msg(dballe::Transaction& transaction, const Message& msg, const char* repmemo, int flags) override;
200  bool export_msgs(dballe::Transaction& transaction, const Query& query, std::function<bool(std::unique_ptr<Message>&&)> dest) override;
201 
205  void dump(FILE* out);
206 
207  friend class dballe::DB;
208 };
209 
210 }
211 }
212 }
213 #endif
struct v6::DataV6 * m_data
Variable data.
Definition: v6/db.h:69
A RAII transaction interface.
Definition: transaction.h:15
Information about a station.
Definition: values.h:20
struct v6::LevTrCache * m_lev_tr_cache
Level/timerange cache.
Definition: v6/db.h:67
Definition: db/trace.h:39
Trace trace
Database query tracing.
Definition: v6/db.h:45
v6::Driver * m_driver
SQL driver backend.
Definition: v6/db.h:51
A set of measured values.
Definition: values.h:303
A bulletin that has been decoded and physically interpreted.
Definition: message.h:28
db::Format format() const
Return the format of this DB.
Definition: v6/db.h:97
Copyright (C) 2008–2010 ARPA-SIM urpsim@smr.arpa.emr.it
Definition: cmdline.h:17
Definition: v6/driver.h:52
struct v6::AttrV6 * m_attr
Variable attributes.
Definition: v6/db.h:71
dballe::sql::Connection * conn
Database connection.
Definition: v6/db.h:43
Definition: v6/levtr.h:62
Functions used to connect to DB-All.e and insert, query and delete data.
Definition: sql.h:59
uint16_t Varcode
struct v6::Repinfo * m_repinfo
Accessors for the various parts of the database.
Definition: v6/db.h:61
Precompiled queries to manipulate the lev_tr table.
Definition: v6/levtr.h:22
Definition: db.h:156
Query used to filter DB-All.e data.
Definition: query.h:14
struct v6::Station * m_station
Station information.
Definition: v6/db.h:63
A set of station values.
Definition: values.h:273
DB-ALLe database connection, database format V6.
Definition: v6/db.h:39
Fast cached access to the repinfo table.
Definition: v6/repinfo.h:76
Precompiled queries to manipulate the attr table.
Definition: attrv6.h:26
Definition: v6/station.h:18
Collection of Value objects, indexed by wreport::Varcode.
Definition: values.h:202
Precompiled query to manipulate the data table.
Definition: datav6.h:31
struct v6::LevTr * m_lev_tr
Level/timerange information.
Definition: v6/db.h:65