libdballe  7.21
attrv6.h
1 #ifndef DBALLE_DB_V6_ATTRV6_H
2 #define DBALLE_DB_V6_ATTRV6_H
3 
4 #include <dballe/db/v6/datav6.h>
5 #include <dballe/sql/fwd.h>
6 #include <wreport/var.h>
7 #include <functional>
8 #include <vector>
9 #include <memory>
10 #include <cstdio>
11 
12 namespace dballe {
13 struct Record;
14 
15 namespace db {
16 namespace v6 {
17 struct AttributeList;
18 
19 namespace bulk {
20 struct InsertAttrsV6;
21 }
22 
26 struct AttrV6
27 {
28 public:
29  enum UpdateMode {
30  UPDATE,
31  IGNORE,
32  ERROR,
33  };
34 
35  virtual ~AttrV6();
36 
38  void insert_attributes(dballe::sql::Transaction& t, int id_data, const wreport::Var& var, UpdateMode update_mode=UPDATE);
39 
41  virtual void insert(dballe::sql::Transaction& t, v6::bulk::InsertAttrsV6& vars, UpdateMode update_mode=UPDATE) = 0;
42 
52  virtual void read(int id_data, std::function<void(std::unique_ptr<wreport::Var>)> dest) = 0;
53 
57  virtual void dump(FILE* out) = 0;
58 };
59 
60 namespace bulk {
61 
66 struct AttrV6 : public Item
67 {
68  int id_data;
69  const wreport::Var* attr;
70 
71  AttrV6(const wreport::Var* attr, int id_data=-1)
72  : id_data(id_data), attr(attr)
73  {
74  }
75  bool operator<(const AttrV6& v) const
76  {
77  if (int d = id_data - v.id_data) return d < 0;
78  return attr->code() < v.attr->code();
79  }
80 
81  void dump(FILE* out) const;
82 };
83 
84 struct InsertAttrsV6 : public std::vector<AttrV6>
85 {
86  void add(const wreport::Var* attr, int id_data)
87  {
88  emplace_back(attr, id_data);
89  }
90 
91  // Add all attributes of the given variable
92  void add_all(const wreport::Var& var, int id_data);
93 
94  void dump(FILE* out) const;
95 };
96 
102 {
103  InsertAttrsV6& attrs;
104  InsertAttrsV6::iterator iter;
105  bool do_insert = false;
106  bool do_update = false;
107 
109 
110  bool annotate(int id_data, wreport::Varcode code, const char* value);
111  void annotate_end();
112 
113  void dump(FILE* out) const;
114 };
115 
116 }
117 
118 
119 }
120 }
121 }
122 
123 #endif
124 
Workflow information about an attribute variable listed for bulk insert/update.
Definition: attrv6.h:66
Attribute table management used by the db module.
Forward declarations for public dballe/sql names.
Copyright (C) 2008–2010 ARPA-SIM urpsim@smr.arpa.emr.it
Definition: cmdline.h:17
Varcode code() const
uint16_t Varcode
A RAII transaction interface.
Definition: sql.h:133
Helper class for annotating AttrV6 variables with the current status of the database.
Definition: attrv6.h:101
Precompiled queries to manipulate the attr table.
Definition: attrv6.h:26
Definition: datav6.h:55