libdballe 9.13
db/v7/data.h
1#ifndef DBALLE_DB_V7_DATAV7_H
2#define DBALLE_DB_V7_DATAV7_H
3
4#include <cstdio>
5#include <dballe/core/defs.h>
6#include <dballe/core/fwd.h>
7#include <dballe/db/defs.h>
8#include <dballe/db/v7/fwd.h>
9#include <dballe/fwd.h>
10#include <dballe/sql/fwd.h>
11#include <dballe/values.h>
12#include <functional>
13#include <list>
14#include <memory>
15#include <vector>
16#include <wreport/var.h>
17
18namespace dballe {
19namespace db {
20namespace v7 {
21
22template <typename Traits> class DataCommon
23{
24protected:
25 typedef typename Traits::BatchValue BatchValue;
26 static const char* table_name;
27
29
33 void read_attrs_into_values(Tracer<>& trc, int id_data, Values& values);
34
39 void read_attrs_into_values(Tracer<>& trc, int id_data, Values& values,
40 const db::AttrList& exclude);
41
45 virtual void write_attrs(Tracer<>& trc, int id_data,
46 const Values& values) = 0;
47
51 virtual void remove_all_attrs(Tracer<>& trc, int id_data) = 0;
52
53public:
54 DataCommon(v7::Transaction& tr) : tr(tr) {}
55 virtual ~DataCommon() {}
56
68 virtual void
69 read_attrs(Tracer<>& trc, int id_data,
70 std::function<void(std::unique_ptr<wreport::Var>)> dest) = 0;
71
80 void merge_attrs(Tracer<>& trc, int id_data, const Values& attrs);
81
85 void remove_attrs(Tracer<>& trc, int data_id, const db::AttrList& attrs);
86
88 virtual void update(Tracer<>& trc,
89 std::vector<typename Traits::BatchValue>& vars,
90 bool with_attrs) = 0;
91
93 virtual void remove(Tracer<>& trc, const v7::IdQueryBuilder& qb) = 0;
94
96 virtual void remove_by_id(Tracer<>& trc, int id) = 0;
97
99 virtual void dump(FILE* out) = 0;
100
101 virtual void clear_cache() = 0;
102};
103
104struct StationDataDumper
105{
106 unsigned count = 0;
107 FILE* out;
108
109 StationDataDumper(FILE* out);
110
111 void print_head();
112 void print_row(int id, int id_station, wreport::Varcode code,
113 const char* val, const std::vector<uint8_t>& attrs);
114 void print_tail();
115};
116
117struct DataDumper
118{
119 unsigned count = 0;
120 FILE* out;
121
122 DataDumper(FILE* out);
123
124 void print_head();
125 void print_row(int id, int id_station, int id_levtr, const Datetime& dt,
126 wreport::Varcode code, const char* val,
127 const std::vector<uint8_t>& attrs);
128 void print_tail();
129};
130
132{
133 typedef batch::StationDatum BatchValue;
134 static const char* table_name;
135};
136
138{
139 typedef batch::MeasuredDatum BatchValue;
140 static const char* table_name;
141};
142
143extern template class DataCommon<StationDataTraits>;
144extern template class DataCommon<DataTraits>;
145
146struct StationData : public DataCommon<StationDataTraits>
147{
148 using DataCommon<StationDataTraits>::DataCommon;
149
151 virtual void insert(Tracer<>& trc, int id_station,
152 std::vector<batch::StationDatum>& vars,
153 bool with_attrs) = 0;
154
156 virtual void
157 query(Tracer<>& trc, int id_station,
158 std::function<void(int id, wreport::Varcode code)> dest) = 0;
159
164 Tracer<>& trc, const v7::DataQueryBuilder& qb,
165 std::function<void(const dballe::DBStation& station, int id_data,
166 std::unique_ptr<wreport::Var> var)>) = 0;
167};
168
169struct Data : public DataCommon<DataTraits>
170{
171 using DataCommon<DataTraits>::DataCommon;
172
174 virtual void insert(Tracer<>& trc, int id_station, const Datetime& datetime,
175 std::vector<batch::MeasuredDatum>& vars,
176 bool with_attrs) = 0;
177
179 virtual void
180 query(Tracer<>& trc, int id_station, const Datetime& datetime,
181 std::function<void(int id, int id_levtr, wreport::Varcode code)>
182 dest) = 0;
183
187 virtual void run_data_query(
188 Tracer<>& trc, const v7::DataQueryBuilder& qb,
189 std::function<void(const dballe::DBStation& station, int id_levtr,
190 const Datetime& datetime, int id_data,
191 std::unique_ptr<wreport::Var> var)>) = 0;
192
196 virtual void run_summary_query(
197 Tracer<>& trc, const v7::SummaryQueryBuilder& qb,
198 std::function<void(const dballe::DBStation& station, int id_levtr,
199 wreport::Varcode code, const DatetimeRange& datetime,
200 size_t size)>) = 0;
201};
202
203} // namespace v7
204} // namespace db
205} // namespace dballe
206#endif
Definition db/v7/data.h:23
void read_attrs_into_values(Tracer<> &trc, int id_data, Values &values, const db::AttrList &exclude)
Load attributes from the database into a Values, except those whose Varcode is in exclude
virtual void update(Tracer<> &trc, std::vector< typename Traits::BatchValue > &vars, bool with_attrs)=0
Bulk variable update.
void merge_attrs(Tracer<> &trc, int id_data, const Values &attrs)
Merge the given attributes with the existing attributes of the given variable:
virtual void remove(Tracer<> &trc, const v7::IdQueryBuilder &qb)=0
Run the query to delete all records selected by the given QueryBuilder.
virtual void read_attrs(Tracer<> &trc, int id_data, std::function< void(std::unique_ptr< wreport::Var >)> dest)=0
Load from the database all the attributes for var.
virtual void remove_all_attrs(Tracer<> &trc, int id_data)=0
Remove all attributes from a variable.
virtual void dump(FILE *out)=0
Dump the entire contents of the table to an output stream.
virtual void write_attrs(Tracer<> &trc, int id_data, const Values &values)=0
Replace the attributes of a variable with those in Values.
void read_attrs_into_values(Tracer<> &trc, int id_data, Values &values)
Load attributes from the database into a Values.
void remove_attrs(Tracer<> &trc, int data_id, const db::AttrList &attrs)
Remove the given attributes from the given variable, if they exist.
virtual void remove_by_id(Tracer<> &trc, int id)=0
Run the query to delete the record with the given ID.
Smart pointer for trace::Step objects, which calls done() when going out of scope.
Definition db/v7/fwd.h:45
Common definitions.
Forward declarations for public dballe/sql names.
Definition types.h:940
Range of datetimes.
Definition types.h:297
Date and time.
Definition types.h:164
Collection of Value objects, indexed by wreport::Varcode.
Definition values.h:216
Definition qbuilder.h:96
Definition db/v7/data.h:138
Definition db/v7/data.h:170
virtual void query(Tracer<> &trc, int id_station, const Datetime &datetime, std::function< void(int id, int id_levtr, wreport::Varcode code)> dest)=0
Query contents of the data table.
virtual void insert(Tracer<> &trc, int id_station, const Datetime &datetime, std::vector< batch::MeasuredDatum > &vars, bool with_attrs)=0
Bulk variable insert.
virtual void run_data_query(Tracer<> &trc, const v7::DataQueryBuilder &qb, std::function< void(const dballe::DBStation &station, int id_levtr, const Datetime &datetime, int id_data, std::unique_ptr< wreport::Var > var)>)=0
Run a data query, iterating on the resulting variables.
virtual void run_summary_query(Tracer<> &trc, const v7::SummaryQueryBuilder &qb, std::function< void(const dballe::DBStation &station, int id_levtr, wreport::Varcode code, const DatetimeRange &datetime, size_t size)>)=0
Run a summary query, iterating on the resulting variables.
Definition qbuilder.h:122
Definition db/v7/data.h:132
Definition db/v7/data.h:147
virtual void insert(Tracer<> &trc, int id_station, std::vector< batch::StationDatum > &vars, bool with_attrs)=0
Bulk variable insert.
virtual void run_station_data_query(Tracer<> &trc, const v7::DataQueryBuilder &qb, std::function< void(const dballe::DBStation &station, int id_data, std::unique_ptr< wreport::Var > var)>)=0
Run a station data query, iterating on the resulting variables.
virtual void query(Tracer<> &trc, int id_station, std::function< void(int id, wreport::Varcode code)> dest)=0
Query contents of the data table.
Definition qbuilder.h:135
Definition transaction.h:16
Structures used as input to database insert functions.