libdballe  8.6
db/db.h
Go to the documentation of this file.
1 #ifndef DBALLE_DB_DB_H
2 #define DBALLE_DB_DB_H
3 
4 #include <dballe/fwd.h>
5 #include <dballe/core/cursor.h>
6 #include <dballe/db.h>
7 #include <dballe/db/fwd.h>
8 #include <dballe/db/defs.h>
9 #include <dballe/msg/fwd.h>
10 #include <dballe/sql/fwd.h>
11 #include <wreport/varinfo.h>
12 #include <wreport/var.h>
13 #include <string>
14 #include <memory>
15 #include <functional>
16 
23 namespace dballe {
24 
25 namespace impl {
26 
29 {
30  DBImportOptions() = default;
31  DBImportOptions(const DBImportOptions& o) = default;
32  DBImportOptions(DBImportOptions&& o) = default;
33  DBImportOptions& operator=(const DBImportOptions&) = default;
34  DBImportOptions& operator=(DBImportOptions&&) = default;
35 };
36 
39 {
40  DBInsertOptions() = default;
41  DBInsertOptions(const DBInsertOptions& o) = default;
42  DBInsertOptions(DBInsertOptions&& o) = default;
43  DBInsertOptions& operator=(const DBInsertOptions&) = default;
44  DBInsertOptions& operator=(DBInsertOptions&&) = default;
45 };
46 
47 }
48 
49 namespace db {
50 
52 std::string format_format(Format format);
53 
55 Format format_parse(const std::string& str);
56 
57 
59 {
61  virtual void remove() = 0;
62 
68  virtual unsigned test_iterate(FILE* dump=0) = 0;
69 };
70 
72 {
74  virtual void remove() = 0;
75 
77  virtual std::shared_ptr<db::Transaction> get_transaction() const = 0;
78 
83  virtual int attr_reference_id() const = 0;
84 
88  virtual void query_attrs(std::function<void(std::unique_ptr<wreport::Var>)> dest, bool force_read=false) = 0;
89 
91  virtual void insert_attrs(const Values& attrs);
92 
94  virtual void remove_attrs(const db::AttrList& attrs);
95 
101  virtual unsigned test_iterate(FILE* dump=0) = 0;
102 };
103 
105 {
107  virtual void remove() = 0;
108 
110  virtual std::shared_ptr<db::Transaction> get_transaction() const = 0;
111 
116  virtual int attr_reference_id() const = 0;
117 
121  virtual void query_attrs(std::function<void(std::unique_ptr<wreport::Var>)> dest, bool force_read=false) = 0;
122 
124  virtual void insert_attrs(const Values& attrs);
125 
127  virtual void remove_attrs(const db::AttrList& attrs);
128 
134  virtual unsigned test_iterate(FILE* dump=0) = 0;
135 };
136 
138 {
140  virtual void remove() = 0;
141 
147  virtual unsigned test_iterate(FILE* dump=0) = 0;
148 };
149 
150 
152 {
153 public:
154  virtual ~Transaction() {}
155 
163  virtual void clear_cached_state() = 0;
164 
173  virtual void attr_query_station(int data_id, std::function<void(std::unique_ptr<wreport::Var>)> dest) = 0;
174 
183  virtual void attr_query_data(int data_id, std::function<void(std::unique_ptr<wreport::Var>)> dest) = 0;
184 
193  virtual void attr_insert_station(int data_id, const Values& attrs) = 0;
194 
203  virtual void attr_insert_data(int data_id, const Values& attrs) = 0;
204 
214  virtual void attr_remove_station(int data_id, const db::AttrList& attrs) = 0;
215 
225  virtual void attr_remove_data(int data_id, const db::AttrList& attrs) = 0;
226 
244  virtual void update_repinfo(const char* repinfo_file, int* added, int* deleted, int* updated) = 0;
245 
249  virtual void dump(FILE* out) = 0;
250 };
251 
252 class DB: public dballe::DB
253 {
254 public:
255  static db::Format get_default_format();
256  static void set_default_format(db::Format format);
257 
264  static std::shared_ptr<DB> connect_from_file(const char* pathname);
265 
269  static std::shared_ptr<DB> connect_memory();
270 
274  static std::shared_ptr<DB> create(std::unique_ptr<sql::Connection> conn);
275 
284  static bool is_url(const char* str);
285 
287  virtual db::Format format() const = 0;
288 
295  virtual void disappear() = 0;
296 
308  virtual void reset(const char* repinfo_file=0) = 0;
309 
314  virtual std::shared_ptr<dballe::db::Transaction> test_transaction(bool readonly=false) = 0;
315 
325  virtual void vacuum() = 0;
326 
335  virtual void attr_query_station(int data_id, std::function<void(std::unique_ptr<wreport::Var>)>&& dest);
336 
345  virtual void attr_query_data(int data_id, std::function<void(std::unique_ptr<wreport::Var>)>&& dest);
346 
355  void attr_insert_station(int data_id, const Values& attrs);
356 
365  void attr_insert_data(int data_id, const Values& attrs);
366 
376  void attr_remove_station(int data_id, const db::AttrList& attrs);
377 
387  void attr_remove_data(int data_id, const db::AttrList& attrs);
388 
392  void dump(FILE* out);
393 
395  virtual void print_info(FILE* out);
396 
398  static const char* default_repinfo_file();
399 
401  inline static std::unique_ptr<db::DB> downcast(std::unique_ptr<dballe::DB> db)
402  {
403  db::DB* res = dynamic_cast<db::DB*>(db.get());
404  if (!res) throw std::runtime_error("Attempted to downcast the wrong kind of DB");
405  db.release();
406  return std::unique_ptr<db::DB>(res);
407  }
408 
410  inline static std::shared_ptr<db::DB> downcast(std::shared_ptr<dballe::DB> db)
411  {
412  auto res = std::dynamic_pointer_cast<db::DB>(db);
413  if (!res) throw std::runtime_error("Attempted to downcast the wrong kind of DB");
414  return res;
415  }
416 };
417 
418 }
419 }
420 #endif
dballe::db::CursorData::insert_attrs
virtual void insert_attrs(const Values &attrs)
Insert/update attributes for the current variable.
dballe::db::CursorData::remove
virtual void remove()=0
Remove this datum.
dballe::db::DB::connect_memory
static std::shared_ptr< DB > connect_memory()
Create an in-memory database.
dballe::db::CursorStation::test_iterate
virtual unsigned test_iterate(FILE *dump=0)=0
Iterate the cursor until the end, returning the number of items.
dballe::db::DB::reset
virtual void reset(const char *repinfo_file=0)=0
Reset the database, removing all existing Db-All.e tables and re-creating them empty.
dballe::db::CursorSummary::test_iterate
virtual unsigned test_iterate(FILE *dump=0)=0
Iterate the cursor until the end, returning the number of items.
dballe::db::CursorStationData::insert_attrs
virtual void insert_attrs(const Values &attrs)
Insert/update attributes for the current variable.
dballe::db::DB::attr_insert_station
void attr_insert_station(int data_id, const Values &attrs)
Insert new attributes on a station value.
dballe::db::DB::create
static std::shared_ptr< DB > create(std::unique_ptr< sql::Connection > conn)
Create a database from an open Connection.
dballe::db::Transaction::clear_cached_state
virtual void clear_cached_state()=0
Clear state information cached during the transaction.
dballe::Transaction
Definition: db.h:149
dballe::db::DB::print_info
virtual void print_info(FILE *out)
Print informations about the database to the given output stream.
dballe::db::CursorStationData
Definition: db/db.h:71
dballe::db::CursorStationData::remove_attrs
virtual void remove_attrs(const db::AttrList &attrs)
Remove attributes for the current variable.
dballe::impl::CursorStation
Cursor iterating over stations.
Definition: core/cursor.h:12
dballe::db::DB::attr_remove_data
void attr_remove_data(int data_id, const db::AttrList &attrs)
Delete attributes from a data value.
dballe::db::CursorSummary
Definition: db/db.h:137
dballe::impl::DBImportOptions
DBImportOptions with public constructor and copy, safe to use in dballe code but not accessible from ...
Definition: db/db.h:28
dballe::db::DB::is_url
static bool is_url(const char *str)
Return TRUE if the string looks like a DB URL.
dballe::db::CursorStationData::attr_reference_id
virtual int attr_reference_id() const =0
Return an integer value that can be used to refer to the current variable for attribute access.
dballe::impl::CursorSummary
Cursor iterating over summary entries.
Definition: core/cursor.h:57
fwd.h
dballe::db::CursorStationData::get_transaction
virtual std::shared_ptr< db::Transaction > get_transaction() const =0
Get the database that created this cursor.
dballe::db::DB::test_transaction
virtual std::shared_ptr< dballe::db::Transaction > test_transaction(bool readonly=false)=0
Same as transaction(), but the resulting transaction will throw an exception if commit is called.
dballe::db::CursorStation::remove
virtual void remove()=0
Remove this station and all its data.
dballe::db::Transaction::attr_query_data
virtual void attr_query_data(int data_id, std::function< void(std::unique_ptr< wreport::Var >)> dest)=0
Query attributes on a data value.
dballe::db::CursorStationData::query_attrs
virtual void query_attrs(std::function< void(std::unique_ptr< wreport::Var >)> dest, bool force_read=false)=0
Query/return the attributes for the current value of this cursor.
dballe::db::CursorData::remove_attrs
virtual void remove_attrs(const db::AttrList &attrs)
Remove attributes for the current variable.
dballe::DBImportOptions
Options controlling how messages are imported in the database.
Definition: db.h:64
dballe::db::DB::attr_query_data
virtual void attr_query_data(int data_id, std::function< void(std::unique_ptr< wreport::Var >)> &&dest)
Query attributes on a data value.
dballe::db::DB::default_repinfo_file
static const char * default_repinfo_file()
Return the default repinfo file pathname.
dballe::db::Transaction::attr_insert_station
virtual void attr_insert_station(int data_id, const Values &attrs)=0
Insert new attributes on a station value.
dballe::db::DB
Definition: db/db.h:252
dballe::db::CursorData::get_transaction
virtual std::shared_ptr< db::Transaction > get_transaction() const =0
Get the database that created this cursor.
dballe::db::CursorStationData::remove
virtual void remove()=0
Remove this datum.
dballe::db::CursorSummary::remove
virtual void remove()=0
Remove all data summarised by this entry.
dballe::db::DB::downcast
static std::shared_ptr< db::DB > downcast(std::shared_ptr< dballe::DB > db)
Downcast a shared_ptr pointer.
Definition: db/db.h:410
dballe::db::Transaction
Definition: db/db.h:151
dballe::db::CursorData::attr_reference_id
virtual int attr_reference_id() const =0
Return an integer value that can be used to refer to the current variable for attribute access.
dballe::db::Transaction::attr_remove_station
virtual void attr_remove_station(int data_id, const db::AttrList &attrs)=0
Delete attributes from a station value.
dballe::DB
Definition: db.h:296
dballe::db::Transaction::dump
virtual void dump(FILE *out)=0
Dump the entire contents of the database to an output stream.
dballe::db::CursorData
Definition: db/db.h:104
dballe::db::CursorData::query_attrs
virtual void query_attrs(std::function< void(std::unique_ptr< wreport::Var >)> dest, bool force_read=false)=0
Query/return the attributes for the current value of this cursor.
dballe::db::CursorData::test_iterate
virtual unsigned test_iterate(FILE *dump=0)=0
Iterate the cursor until the end, returning the number of items.
dballe::Values
Collection of Value objects, indexed by wreport::Varcode.
Definition: values.h:176
dballe::DBInsertOptions
Options controlling how values are inserted in the database.
Definition: db.h:122
dballe::db::DB::dump
void dump(FILE *out)
Dump the entire contents of the database to an output stream.
dballe::db::DB::format
virtual db::Format format() const =0
Return the format of this DB.
dballe::db::Transaction::attr_query_station
virtual void attr_query_station(int data_id, std::function< void(std::unique_ptr< wreport::Var >)> dest)=0
Query attributes on a station value.
dballe::db::Transaction::update_repinfo
virtual void update_repinfo(const char *repinfo_file, int *added, int *deleted, int *updated)=0
Update the repinfo table in the database, with the data found in the given file.
dballe::db::DB::vacuum
virtual void vacuum()=0
Perform database cleanup operations.
dballe::impl::DBInsertOptions
DBInsertOptions with public constructor and copy, safe to use in dballe code but not accessible from ...
Definition: db/db.h:38
dballe::db::DB::downcast
static std::unique_ptr< db::DB > downcast(std::unique_ptr< dballe::DB > db)
Downcast a unique_ptr pointer.
Definition: db/db.h:401
dballe::impl::CursorStationData
Cursor iterating over station data values.
Definition: core/cursor.h:27
dballe::impl::CursorData
Cursor iterating over data values.
Definition: core/cursor.h:42
dballe::db::Transaction::attr_remove_data
virtual void attr_remove_data(int data_id, const db::AttrList &attrs)=0
Delete attributes from a data value.
dballe::db::DB::attr_query_station
virtual void attr_query_station(int data_id, std::function< void(std::unique_ptr< wreport::Var >)> &&dest)
Query attributes on a station value.
varinfo.h
dballe::db::CursorStation
Definition: db/db.h:58
dballe::db::DB::disappear
virtual void disappear()=0
Remove all our traces from the database, if applicable.
dballe::db::CursorStationData::test_iterate
virtual unsigned test_iterate(FILE *dump=0)=0
Iterate the cursor until the end, returning the number of items.
dballe::db::DB::attr_insert_data
void attr_insert_data(int data_id, const Values &attrs)
Insert new attributes on a data value.
dballe::db::Transaction::attr_insert_data
virtual void attr_insert_data(int data_id, const Values &attrs)=0
Insert new attributes on a data value.
dballe::db::DB::connect_from_file
static std::shared_ptr< DB > connect_from_file(const char *pathname)
Create from a SQLite file pathname.
dballe::db::DB::attr_remove_station
void attr_remove_station(int data_id, const db::AttrList &attrs)
Delete attributes from a station value.