trader  v0.1a
A framework to build trading applications
krakendatabase.h
1 
2 #pragma once
3 
4 
5 namespace trader {
6 
7  namespace KrakenDatabase {
8 
9  class Asset_Info : public Poco::RefCountedObject {
10  public:
11 
12  struct Record {
13 
14  //
15  Poco::Int32 asset_Name;
16 
17  bool isSetAsset_Name() {
18  return (asset_Name != std::numeric_limits<Poco::Int32>::max());
19  }
20 
21  //
22  std::string asset_Class;
23 
24  bool isSetAsset_Class() {
25  return (asset_Class != "Empty");
26  }
27 
28  // Cost
29  std::string alternate_Name;
30 
31  bool isSetAlternate_Name() {
32  return (alternate_Name != "Empty");
33  }
34 
35  //
36  double decimals;
37 
38  bool isSetDecimals() {
39  return (decimals != std::numeric_limits<double>::max());
40  }
41 
42  //
43  double display_Decimals;
44 
45  bool isSetDisplay_Decimals() {
46  return (display_Decimals != std::numeric_limits<double>::max());
47  }
48 
49  Record()
50  : asset_Name(std::numeric_limits<Poco::Int32>::max())
51  , asset_Class("Empty")
52  , alternate_Name("Empty")
53  , decimals(std::numeric_limits<double>::max())
54  , display_Decimals(std::numeric_limits<double>::max())
55  {
56  }
57 
58  };
59 
60 
61  struct RecordWithId {
62 
63  //
64  Poco::Int32 asset_Name;
65 
66  bool isSetAsset_Name() {
67  return (asset_Name != std::numeric_limits<Poco::Int32>::max());
68  }
69 
70  //
71  std::string asset_Class;
72 
73  bool isSetAsset_Class() {
74  return (asset_Class != "Empty");
75  }
76 
77  // Cost
78  std::string alternate_Name;
79 
80  bool isSetAlternate_Name() {
81  return (alternate_Name != "Empty");
82  }
83 
84  //
85  double decimals;
86 
87  bool isSetDecimals() {
88  return (decimals != std::numeric_limits<double>::max());
89  }
90 
91  //
92  double display_Decimals;
93 
94  bool isSetDisplay_Decimals() {
95  return (display_Decimals != std::numeric_limits<double>::max());
96  }
97 
98  //Record ID in database
99  Poco::Int32 id;
100 
101  RecordWithId()
102  : asset_Name(std::numeric_limits<Poco::Int32>::max())
103  , asset_Class("Empty")
104  , alternate_Name("Empty")
105  , decimals(std::numeric_limits<double>::max())
106  , display_Decimals(std::numeric_limits<double>::max())
107  , id(std::numeric_limits<Poco::Int32>::max())
108  {
109  }
110 
111  };
112 
113 
114  Asset_Info(Poco::Data::Session* _db, std::string _suffix = "");
115 
116  ~Asset_Info();
117 
118  void init();
119 
120  void clear();
121 
122  void insert(Asset_Info::Record& record);
123 
124  void insertOnce(Asset_Info::Record& record);
125 
126  void insertMultiple(std::vector<Asset_Info::Record>& records);
127 
128  void insertMultiple(std::vector<Asset_Info::RecordWithId>& records);
129 
130  void insertMultipleUnique(std::vector<Asset_Info::Record>& records);
131 
132  void deleteMultiple(std::vector<Asset_Info::RecordWithId>& records);
133 
134  void insertAndDeleteUnchanged(Asset_Info::Record& record);
135 
136  void insertUnique(Asset_Info::Record& record);
137 
138  void getLatest(Asset_Info::RecordWithId& rec);
139 
140  std::size_t getAll(std::vector<Asset_Info::RecordWithId>& records, std::string condition);
141 
142  Poco::Data::Session* db;
143 
144  std::string tableName;
145 
146  }; //Asset_Info
147 
148  class Tables : public Poco::RefCountedObject {
149  public:
150 
151  Tables(Poco::Data::Session* _db);
152 
153  ~Tables();
154 
155  void init();
156 
157  void clear();
158 
159  Poco::Data::Session* db;
160 
161  Poco::AutoPtr<Asset_Info> asset_InfoTable;
162 
163  }; //Tables
164 
165  } //KrakenDatabase
166 } //trader
167 
168 template <>
169 class Poco::Data::TypeHandler<trader::KrakenDatabase::Asset_Info::Record>
170 {
171  public:
172  static std::size_t size()
173  {
174  return 5;
175  }
176 
177  static void bind(std::size_t pos, const trader::KrakenDatabase::Asset_Info::Record& record, Poco::Data::AbstractBinder::Ptr pBinder, Poco::Data::AbstractBinder::Direction dir)
178  {
179  Poco::Data::TypeHandler<Poco::Int32>::bind(pos++, record.asset_Name , pBinder, dir);
180  Poco::Data::TypeHandler<std::string>::bind(pos++, record.asset_Class , pBinder, dir);
181  Poco::Data::TypeHandler<std::string>::bind(pos++, record.alternate_Name , pBinder, dir);
182  Poco::Data::TypeHandler<double>::bind(pos++, record.decimals , pBinder, dir);
183  Poco::Data::TypeHandler<double>::bind(pos++, record.display_Decimals , pBinder, dir);
184  }
185 
186  static void extract(std::size_t pos, trader::KrakenDatabase::Asset_Info::Record& record, trader::KrakenDatabase::Asset_Info::Record& deflt, Poco::Data::AbstractExtractor::Ptr pExtr)
187  {
188  Poco::Data::TypeHandler<Poco::Int32>::extract(pos++, record.asset_Name, deflt.asset_Name, pExtr);
189  Poco::Data::TypeHandler<std::string>::extract(pos++, record.asset_Class, deflt.asset_Class, pExtr);
190  Poco::Data::TypeHandler<std::string>::extract(pos++, record.alternate_Name, deflt.alternate_Name, pExtr);
191  Poco::Data::TypeHandler<double>::extract(pos++, record.decimals, deflt.decimals, pExtr);
192  Poco::Data::TypeHandler<double>::extract(pos++, record.display_Decimals, deflt.display_Decimals, pExtr);
193  }
194 
195  static void prepare(std::size_t pos, trader::KrakenDatabase::Asset_Info::Record& record, Poco::Data::AbstractPreparator::Ptr pPrep)
196  {
197  Poco::Data::TypeHandler<Poco::Int32>::prepare(pos++, record.asset_Name, pPrep);
198  Poco::Data::TypeHandler<std::string>::prepare(pos++, record.asset_Class, pPrep);
199  Poco::Data::TypeHandler<std::string>::prepare(pos++, record.alternate_Name, pPrep);
200  Poco::Data::TypeHandler<double>::prepare(pos++, record.decimals, pPrep);
201  Poco::Data::TypeHandler<double>::prepare(pos++, record.display_Decimals, pPrep);
202  }
203 }
204 ;
205 
206 template <>
207 class Poco::Data::TypeHandler<trader::KrakenDatabase::Asset_Info::RecordWithId>
208 {
209  public:
210  static std::size_t size()
211  {
212  return 6;
213  }
214 
215  static void bind(std::size_t pos, const trader::KrakenDatabase::Asset_Info::RecordWithId& record, Poco::Data::AbstractBinder::Ptr pBinder, Poco::Data::AbstractBinder::Direction dir)
216  {
217  Poco::Data::TypeHandler<Poco::Int32>::bind(pos++, record.asset_Name , pBinder, dir);
218  Poco::Data::TypeHandler<std::string>::bind(pos++, record.asset_Class , pBinder, dir);
219  Poco::Data::TypeHandler<std::string>::bind(pos++, record.alternate_Name , pBinder, dir);
220  Poco::Data::TypeHandler<double>::bind(pos++, record.decimals , pBinder, dir);
221  Poco::Data::TypeHandler<double>::bind(pos++, record.display_Decimals , pBinder, dir);
222  Poco::Data::TypeHandler<Poco::Int32>::bind(pos++, record.id, pBinder, dir);
223  }
224 
225  static void extract(std::size_t pos, trader::KrakenDatabase::Asset_Info::RecordWithId& record, trader::KrakenDatabase::Asset_Info::RecordWithId& deflt, Poco::Data::AbstractExtractor::Ptr pExtr)
226  {
227  Poco::Data::TypeHandler<Poco::Int32>::extract(pos++, record.asset_Name, deflt.asset_Name, pExtr);
228  Poco::Data::TypeHandler<std::string>::extract(pos++, record.asset_Class, deflt.asset_Class, pExtr);
229  Poco::Data::TypeHandler<std::string>::extract(pos++, record.alternate_Name, deflt.alternate_Name, pExtr);
230  Poco::Data::TypeHandler<double>::extract(pos++, record.decimals, deflt.decimals, pExtr);
231  Poco::Data::TypeHandler<double>::extract(pos++, record.display_Decimals, deflt.display_Decimals, pExtr);
232  Poco::Data::TypeHandler<Poco::Int32>::extract(pos++, record.id, deflt.id, pExtr);
233  }
234 
235  static void prepare(std::size_t pos, trader::KrakenDatabase::Asset_Info::RecordWithId& record, Poco::Data::AbstractPreparator::Ptr pPrep)
236  {
237  Poco::Data::TypeHandler<Poco::Int32>::prepare(pos++, record.asset_Name, pPrep);
238  Poco::Data::TypeHandler<std::string>::prepare(pos++, record.asset_Class, pPrep);
239  Poco::Data::TypeHandler<std::string>::prepare(pos++, record.alternate_Name, pPrep);
240  Poco::Data::TypeHandler<double>::prepare(pos++, record.decimals, pPrep);
241  Poco::Data::TypeHandler<double>::prepare(pos++, record.display_Decimals, pPrep);
242  Poco::Data::TypeHandler<Poco::Int32>::prepare(pos++, record.id, pPrep);
243  }
244 }
245 ;
Definition: krakendatabase.h:9
Definition: app.h:7
Definition: krakendatabase.h:148
Definition: krakendatabase.h:12