Joedb 10.0.1
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Database.h
Go to the documentation of this file.
1/////////////////////////////////////////////////////////////////////////////
2//
3// This code was automatically generated by the joedb compiler
4// https://www.joedb.org/
5//
6// Path to compiler: /home/rcoulom/repos/joedb/compcmake/gcc_debug/joedbc
7// Version: 10.0.1
8// joedbc compilation time: Jun 13 2025 15:26:57
9// Generation of this file: 2025-06-13 13:27:16 GMT
10//
11/////////////////////////////////////////////////////////////////////////////
12#ifndef tutorial_Database_declared
13#define tutorial_Database_declared
14
17#include "joedb/error/assert.h"
18#include "joedb/get_version.h"
19#include "ids.h"
20
21#include <string>
22#include <cstring>
23#include <vector>
24#include <algorithm>
25#include <string_view>
26
27#include "joedb/ui/type_io.h"
28#include <sstream>
29#include <map>
30
31static_assert(std::string_view(joedb::get_version()) == "10.0.1");
32
33namespace tutorial
34{
35 /// @namespace tutorial
36 ///
37 /// Automatically generated by joedbc
38
39 using joedb::Record_Id;
40 using joedb::Table_Id;
41 using joedb::Field_Id;
42
43 class container_of_city;
44 class container_of_person;
45
46 namespace detail
47 {
48 struct data_of_city
49 {
50 std::vector<std::string> field_value_of_name;
51 std::vector<std::map<std::string, id_of_city>::iterator> iterator_over_city_by_name;
52
53 joedb::Freedom_Keeper freedom_keeper;
54
55 size_t size() const {return freedom_keeper.size();}
56
57 void resize(size_t new_size)
58 {
59 field_value_of_name.resize(new_size);
60 iterator_over_city_by_name.resize(new_size);
61 freedom_keeper.resize(new_size);
62 }
63 };
64
65 struct data_of_person
66 {
67 std::vector<std::string> field_value_of_first_name;
68 std::vector<std::string> field_value_of_last_name;
69 std::vector<id_of_city> field_value_of_home;
70 std::vector<std::multimap<std::tuple<std::string, std::string>, id_of_person>::iterator> iterator_over_person_by_name;
71
72 joedb::Freedom_Keeper freedom_keeper;
73
74 size_t size() const {return freedom_keeper.size();}
75
76 void resize(size_t new_size)
77 {
78 field_value_of_first_name.resize(new_size);
79 field_value_of_last_name.resize(new_size);
80 field_value_of_home.resize(new_size);
81 iterator_over_person_by_name.resize(new_size);
82 freedom_keeper.resize(new_size);
83 }
84 };
85 }
86
87 class range_of_person_by_name;
88
89 /// Store all the tables of the database
91 {
92 friend class Readable;
93 friend class id_of_city;
94 friend class container_of_city;
95 friend class id_of_person;
96 friend class container_of_person;
98
99 public:
100 template<typename E = joedb::Exception>
101 static void throw_exception(const std::string &message)
102 {
103 throw E("tutorial: " + message);
104 }
105
106 bool is_valid(id_of_city id) const {return is_valid_record_id_for_city(id.get_record_id());}
107 bool is_valid(id_of_person id) const {return is_valid_record_id_for_person(id.get_record_id());}
108
109 protected:
110 detail::data_of_city storage_of_city;
111 bool is_valid_record_id_for_city(Record_Id record_id) const {return storage_of_city.freedom_keeper.is_used(record_id);}
112 detail::data_of_person storage_of_person;
113 bool is_valid_record_id_for_person(Record_Id record_id) const {return storage_of_person.freedom_keeper.is_used(record_id);}
114
115 std::map<std::string, id_of_city> index_of_city_by_name;
117 {
118 auto &iterator = storage_of_city.iterator_over_city_by_name[to_underlying(record_id)];
119 if (iterator != index_of_city_by_name.end())
120 {
121 index_of_city_by_name.erase(iterator);
122 iterator = index_of_city_by_name.end();
123 }
124 }
126 {
127 auto result = index_of_city_by_name.insert
128 (
129 std::map<std::string, id_of_city>::value_type
130 (
131 (storage_of_city.field_value_of_name[to_underlying(record_id)]),
132 id_of_city(record_id)
133 )
134 );
135 if (!result.second)
136 {
137 std::ostringstream out;
138 out << "city_by_name unique index failure: (";
139 joedb::write_string(out, storage_of_city.field_value_of_name[to_underlying(record_id)]);
140 out << ") at id = " << record_id << ' ';
141 out << "was already at id = " << result.first->second.get_id();
142 throw_exception(out.str());
143 }
144 storage_of_city.iterator_over_city_by_name[to_underlying(record_id)] = result.first;
145 }
146 std::multimap<std::tuple<std::string, std::string>, id_of_person> index_of_person_by_name;
148 {
149 auto &iterator = storage_of_person.iterator_over_person_by_name[to_underlying(record_id)];
150 if (iterator != index_of_person_by_name.end())
151 {
152 index_of_person_by_name.erase(iterator);
153 iterator = index_of_person_by_name.end();
154 }
155 }
157 {
158 auto result = index_of_person_by_name.insert
159 (
160 std::multimap<std::tuple<std::string, std::string>, id_of_person>::value_type
161 (
162 std::tuple<std::string, std::string>(storage_of_person.field_value_of_last_name[to_underlying(record_id)], storage_of_person.field_value_of_first_name[to_underlying(record_id)]),
163 id_of_person(record_id)
164 )
165 );
166 storage_of_person.iterator_over_person_by_name[to_underlying(record_id)] = result;
167 }
168
170 {
173 storage_of_city.field_value_of_name[to_underlying(record_id)].clear();
174 storage_of_city.freedom_keeper.free(record_id);
175 }
177 {
180 storage_of_person.field_value_of_first_name[to_underlying(record_id)].clear();
181 storage_of_person.field_value_of_last_name[to_underlying(record_id)].clear();
182 storage_of_person.field_value_of_home[to_underlying(record_id)] = id_of_city(joedb::Record_Id::null);
183 storage_of_person.freedom_keeper.free(record_id);
184 }
185
187 {
188 storage_of_city.iterator_over_city_by_name[to_underlying(record_id)] = index_of_city_by_name.end();
189 storage_of_city.freedom_keeper.use(record_id);
190 }
191
192 void internal_vector_insert_city(Record_Id record_id, size_t size)
193 {
194 JOEDB_RELEASE_ASSERT(storage_of_city.freedom_keeper.is_free_vector(record_id, size));
195 storage_of_city.freedom_keeper.use_vector(record_id, size);
196 std::fill_n
197 (
198 &storage_of_city.iterator_over_city_by_name[to_underlying(record_id)],
199 size,
201 );
202 }
204 {
205 storage_of_person.iterator_over_person_by_name[to_underlying(record_id)] = index_of_person_by_name.end();
206 storage_of_person.freedom_keeper.use(record_id);
207 }
208
209 void internal_vector_insert_person(Record_Id record_id, size_t size)
210 {
211 JOEDB_RELEASE_ASSERT(storage_of_person.freedom_keeper.is_free_vector(record_id, size));
212 storage_of_person.freedom_keeper.use_vector(record_id, size);
213 std::fill_n
214 (
215 &storage_of_person.iterator_over_person_by_name[to_underlying(record_id)],
216 size,
218 );
219 }
220
222 (
223 Record_Id record_id,
224 const std::string& field_value_of_name
225 )
226 {
228 storage_of_city.field_value_of_name[to_underlying(record_id)] = field_value_of_name;
230 add_index_of_city_by_name(record_id);
231 }
232
234 (
235 Record_Id record_id,
236 size_t size,
237 const std::string *value
238 )
239 {
240 JOEDB_RELEASE_ASSERT(storage_of_city.freedom_keeper.is_used_vector(record_id, size));
241 std::string *target = &storage_of_city.field_value_of_name.data()[to_underlying(record_id)];
242 if (target != value)
243 std::copy_n(value, size, target);
244 for (size_t i = 0; i < size; i++)
245 remove_index_of_city_by_name(record_id + i);
246 for (size_t i = 0; i < size; i++)
247 add_index_of_city_by_name(record_id + i);
248 }
249
251 (
252 Record_Id record_id,
253 const std::string& field_value_of_first_name
254 )
255 {
257 storage_of_person.field_value_of_first_name[to_underlying(record_id)] = field_value_of_first_name;
260 }
261
263 (
264 Record_Id record_id,
265 size_t size,
266 const std::string *value
267 )
268 {
269 JOEDB_RELEASE_ASSERT(storage_of_person.freedom_keeper.is_used_vector(record_id, size));
270 std::string *target = &storage_of_person.field_value_of_first_name.data()[to_underlying(record_id)];
271 if (target != value)
272 std::copy_n(value, size, target);
273 for (size_t i = 0; i < size; i++)
274 remove_index_of_person_by_name(record_id + i);
275 for (size_t i = 0; i < size; i++)
276 add_index_of_person_by_name(record_id + i);
277 }
278
280 (
281 Record_Id record_id,
282 const std::string& field_value_of_last_name
283 )
284 {
286 storage_of_person.field_value_of_last_name[to_underlying(record_id)] = field_value_of_last_name;
289 }
290
292 (
293 Record_Id record_id,
294 size_t size,
295 const std::string *value
296 )
297 {
298 JOEDB_RELEASE_ASSERT(storage_of_person.freedom_keeper.is_used_vector(record_id, size));
299 std::string *target = &storage_of_person.field_value_of_last_name.data()[to_underlying(record_id)];
300 if (target != value)
301 std::copy_n(value, size, target);
302 for (size_t i = 0; i < size; i++)
303 remove_index_of_person_by_name(record_id + i);
304 for (size_t i = 0; i < size; i++)
305 add_index_of_person_by_name(record_id + i);
306 }
307
309 (
310 Record_Id record_id,
311 id_of_city field_value_of_home
312 )
313 {
315 storage_of_person.field_value_of_home[to_underlying(record_id)] = field_value_of_home;
316 }
317
319 (
320 Record_Id record_id,
321 size_t size,
322 const id_of_city *value
323 )
324 {
325 JOEDB_RELEASE_ASSERT(storage_of_person.freedom_keeper.is_used_vector(record_id, size));
326 id_of_city *target = &storage_of_person.field_value_of_home.data()[to_underlying(record_id)];
327 if (target != value)
328 std::copy_n(value, size, target);
329 }
330
331 public:
333
335 {
336 return id_of_city
337 (
338 Record_Id(storage_of_city.freedom_keeper.get_next(id.get_record_id()))
339 );
340 }
341
343 {
344 return id_of_city
345 (
346 Record_Id(storage_of_city.freedom_keeper.get_previous(id.get_record_id()))
347 );
348 }
349
350 template<class Comparator>
351 std::vector<id_of_city> sorted_city(Comparator comparator) const;
352
354 {
355 return id_of_city();
356 }
357
358 const std::string& get_name(id_of_city record) const
359 {
361 return (const std::string&)(storage_of_city.field_value_of_name[record.get_id()]);
362 }
363
365
367 {
368 return id_of_person
369 (
370 Record_Id(storage_of_person.freedom_keeper.get_next(id.get_record_id()))
371 );
372 }
373
375 {
376 return id_of_person
377 (
378 Record_Id(storage_of_person.freedom_keeper.get_previous(id.get_record_id()))
379 );
380 }
381
382 template<class Comparator>
383 std::vector<id_of_person> sorted_person(Comparator comparator) const;
384
386 {
387 return id_of_person();
388 }
389
390 const std::string& get_first_name(id_of_person record) const
391 {
393 return (const std::string&)(storage_of_person.field_value_of_first_name[record.get_id()]);
394 }
395
396 const std::string& get_last_name(id_of_person record) const
397 {
399 return (const std::string&)(storage_of_person.field_value_of_last_name[record.get_id()]);
400 }
401
403 {
405 return (id_of_city)(storage_of_person.field_value_of_home[record.get_id()]);
406 }
407
408 const std::map<std::string, id_of_city> &get_index_of_city_by_name()
409 {
411 }
412
413 const std::multimap<std::tuple<std::string, std::string>, id_of_person> &get_index_of_person_by_name()
414 {
416 }
417
419 {
421 auto iterator = storage_of_city.iterator_over_city_by_name[id.get_id()];
422 ++iterator;
423 if (iterator != index_of_city_by_name.end())
424 return iterator->second;
425 else
426 return id_of_city();
427 }
429 {
431 auto iterator = storage_of_city.iterator_over_city_by_name[id.get_id()];
432 if (iterator != index_of_city_by_name.begin())
433 return (--iterator)->second;
434 else
435 return id_of_city();
436 }
437 id_of_city find_city_by_name(const std::string& field_value_of_name) const
438 {
439 const auto i = index_of_city_by_name.find((field_value_of_name));
440 if (i == index_of_city_by_name.end())
441 return id_of_city();
442 else
443 return i->second;
444 }
445 range_of_person_by_name find_person_by_name(const std::string& field_value_of_last_name, const std::string& field_value_of_first_name) const;
446 };
447 /// returned by @ref Database::get_city_table
449 {
450 friend class Database;
451
452 private:
453 const Database &db;
454 container_of_city(const Database &db): db(db) {}
455
456 public:
458 {
459 friend class container_of_city;
460 private:
461 const joedb::Freedom_Keeper *fk;
462 Record_Id index;
463 iterator(const detail::data_of_city &data): fk(&data.freedom_keeper), index(joedb::Freedom_Keeper_Constants::used_list) {}
464 public:
465 typedef std::forward_iterator_tag iterator_category;
467 typedef std::ptrdiff_t difference_type;
470
471 bool operator==(const iterator &i) const {return index == i.index;}
472 bool operator!=(const iterator &i) const {return index != i.index;}
473 iterator &operator++() {index = fk->get_next(index); return *this;}
474 iterator operator++(int) {auto copy = *this; index = fk->get_next(index); return copy;}
475 iterator &operator--() {index = fk->get_previous(index); return *this;}
476 iterator operator--(int) {auto copy = *this; index = fk->get_previous(index); return copy;}
477 id_of_city operator*() const {return id_of_city(Record_Id(index));}
478 };
479
480 iterator begin() const {return ++iterator(db.storage_of_city);}
481 iterator end() const {return iterator(db.storage_of_city);}
482 bool is_empty() const {return db.storage_of_city.freedom_keeper.get_used_count() == Record_Id{0};}
483 joedb::index_t get_size() const {return to_underlying(db.storage_of_city.freedom_keeper.get_used_count());}
484 static id_of_city get_at(size_t i) {return id_of_city(Record_Id(i));}
485 bool is_valid_at(size_t i) {return db.storage_of_city.freedom_keeper.is_used(Record_Id(i));}
486 id_of_city first() const {return *begin();}
487 id_of_city last() const {return *--end();}
488 id_of_city get_end() const {return *end();}
489 };
490
492 {
493 return container_of_city(*this);
494 }
495
496 template<class Comparator>
497 std::vector<id_of_city> Database::sorted_city(Comparator comparator) const
498 {
499 std::vector<id_of_city> result;
500 for (auto x: get_city_table())
501 result.emplace_back(x);
502 std::sort(result.begin(), result.end(), comparator);
503 return result;
504 }
505 /// returned by @ref Database::get_person_table
507 {
508 friend class Database;
509
510 private:
511 const Database &db;
512 container_of_person(const Database &db): db(db) {}
513
514 public:
516 {
518 private:
519 const joedb::Freedom_Keeper *fk;
520 Record_Id index;
521 iterator(const detail::data_of_person &data): fk(&data.freedom_keeper), index(joedb::Freedom_Keeper_Constants::used_list) {}
522 public:
523 typedef std::forward_iterator_tag iterator_category;
525 typedef std::ptrdiff_t difference_type;
528
529 bool operator==(const iterator &i) const {return index == i.index;}
530 bool operator!=(const iterator &i) const {return index != i.index;}
531 iterator &operator++() {index = fk->get_next(index); return *this;}
532 iterator operator++(int) {auto copy = *this; index = fk->get_next(index); return copy;}
533 iterator &operator--() {index = fk->get_previous(index); return *this;}
534 iterator operator--(int) {auto copy = *this; index = fk->get_previous(index); return copy;}
536 };
537
538 iterator begin() const {return ++iterator(db.storage_of_person);}
540 bool is_empty() const {return db.storage_of_person.freedom_keeper.get_used_count() == Record_Id{0};}
541 joedb::index_t get_size() const {return to_underlying(db.storage_of_person.freedom_keeper.get_used_count());}
542 static id_of_person get_at(size_t i) {return id_of_person(Record_Id(i));}
543 bool is_valid_at(size_t i) {return db.storage_of_person.freedom_keeper.is_used(Record_Id(i));}
544 id_of_person first() const {return *begin();}
545 id_of_person last() const {return *--end();}
546 id_of_person get_end() const {return *end();}
547 };
548
550 {
551 return container_of_person(*this);
552 }
553
554 template<class Comparator>
555 std::vector<id_of_person> Database::sorted_person(Comparator comparator) const
556 {
557 std::vector<id_of_person> result;
558 for (auto x: get_person_table())
559 result.emplace_back(x);
560 std::sort(result.begin(), result.end(), comparator);
561 return result;
562 }
563 /// returned by @ref Database::find_person_by_name
565 {
566 friend class Database;
567 private:
568 std::pair<std::multimap<std::tuple<std::string, std::string>, id_of_person>::const_iterator, std::multimap<std::tuple<std::string, std::string>, id_of_person>::const_iterator> range;
569 range_of_person_by_name(const Database &db, const std::string& last_name, const std::string& first_name)
570 {
571 range = db.index_of_person_by_name.equal_range(std::tuple<std::string, std::string>(last_name, first_name));
572 }
573 public:
575 {
577 private:
578 std::multimap<std::tuple<std::string, std::string>, id_of_person>::const_iterator map_iterator;
579 iterator(std::multimap<std::tuple<std::string, std::string>, id_of_person>::const_iterator map_iterator): map_iterator(map_iterator) {}
580 public:
581 bool operator !=(const iterator &i) const
582 {
583 return map_iterator != i.map_iterator;
584 }
585 iterator &operator++() {map_iterator++; return *this;}
586 id_of_person operator*() const {return map_iterator->second;}
587 };
588 iterator begin() const {return range.first;}
589 iterator end() const {return range.second;}
590 bool empty() const {return range.first == range.second;}
591 size_t size() const {return size_t(std::distance(range.first, range.second));}
592 };
593
594 inline range_of_person_by_name Database::find_person_by_name(const std::string& field_value_of_last_name, const std::string& field_value_of_first_name) const
595 {
596 return range_of_person_by_name(*this, field_value_of_last_name, field_value_of_first_name);
597 }
598}
599
600#endif
void resize(Record_Id new_size)
Record_Id get_previous(Record_Id index) const
Record_Id get_next(Record_Id index) const
static const Record_Id null
Definition index_types.h:44
Store all the tables of the database.
Definition Database.h:91
void internal_update_vector_person__first_name(Record_Id record_id, size_t size, const std::string *value)
Definition Database.h:263
id_of_person previous(id_of_person id) const
Definition Database.h:374
bool is_valid(id_of_city id) const
Definition Database.h:106
const std::string & get_last_name(id_of_person record) const
Definition Database.h:396
void internal_update_vector_city__name(Record_Id record_id, size_t size, const std::string *value)
Definition Database.h:234
container_of_person get_person_table() const
Definition Database.h:549
friend class container_of_city
Definition Database.h:94
void internal_insert_person(Record_Id record_id)
Definition Database.h:203
const std::string & get_first_name(id_of_person record) const
Definition Database.h:390
friend class id_of_city
Definition Database.h:93
const std::map< std::string, id_of_city > & get_index_of_city_by_name()
Definition Database.h:408
friend class container_of_person
Definition Database.h:96
void internal_update_vector_person__home(Record_Id record_id, size_t size, const id_of_city *value)
Definition Database.h:319
void add_index_of_person_by_name(Record_Id record_id)
Definition Database.h:156
void remove_index_of_person_by_name(Record_Id record_id)
Definition Database.h:147
friend class id_of_person
Definition Database.h:95
range_of_person_by_name find_person_by_name(const std::string &field_value_of_last_name, const std::string &field_value_of_first_name) const
Definition Database.h:594
std::map< std::string, id_of_city > index_of_city_by_name
Definition Database.h:115
detail::data_of_city storage_of_city
Definition Database.h:110
void add_index_of_city_by_name(Record_Id record_id)
Definition Database.h:125
id_of_city find_city_by_name(const std::string &field_value_of_name) const
Definition Database.h:437
friend class range_of_person_by_name
Definition Database.h:97
detail::data_of_person storage_of_person
Definition Database.h:112
void internal_update_vector_person__last_name(Record_Id record_id, size_t size, const std::string *value)
Definition Database.h:292
id_of_city get_home(id_of_person record) const
Definition Database.h:402
const std::string & get_name(id_of_city record) const
Definition Database.h:358
void internal_update_person__home(Record_Id record_id, id_of_city field_value_of_home)
Definition Database.h:309
bool is_valid_record_id_for_city(Record_Id record_id) const
Definition Database.h:111
static void throw_exception(const std::string &message)
Definition Database.h:101
std::vector< id_of_city > sorted_city(Comparator comparator) const
Definition Database.h:497
bool is_valid_record_id_for_person(Record_Id record_id) const
Definition Database.h:113
static id_of_person null_person()
Definition Database.h:385
void internal_update_person__first_name(Record_Id record_id, const std::string &field_value_of_first_name)
Definition Database.h:251
void internal_update_person__last_name(Record_Id record_id, const std::string &field_value_of_last_name)
Definition Database.h:280
void internal_insert_city(Record_Id record_id)
Definition Database.h:186
container_of_city get_city_table() const
Definition Database.h:491
void internal_update_city__name(Record_Id record_id, const std::string &field_value_of_name)
Definition Database.h:222
bool is_valid(id_of_person id) const
Definition Database.h:107
void internal_delete_person(Record_Id record_id)
Definition Database.h:176
id_of_city next(id_of_city id) const
Definition Database.h:334
std::vector< id_of_person > sorted_person(Comparator comparator) const
Definition Database.h:555
void internal_delete_city(Record_Id record_id)
Definition Database.h:169
void remove_index_of_city_by_name(Record_Id record_id)
Definition Database.h:116
void internal_vector_insert_city(Record_Id record_id, size_t size)
Definition Database.h:192
id_of_city previous(id_of_city id) const
Definition Database.h:342
id_of_person next(id_of_person id) const
Definition Database.h:366
static id_of_city null_city()
Definition Database.h:353
id_of_city next_city_by_name(id_of_city id)
Definition Database.h:418
void internal_vector_insert_person(Record_Id record_id, size_t size)
Definition Database.h:209
id_of_city previous_city_by_name(id_of_city id)
Definition Database.h:428
std::multimap< std::tuple< std::string, std::string >, id_of_person > index_of_person_by_name
Definition Database.h:146
const std::multimap< std::tuple< std::string, std::string >, id_of_person > & get_index_of_person_by_name()
Definition Database.h:413
Implement the joedb::Readable interface for a compiled database.
Definition Readable.h:27
bool operator==(const iterator &i) const
Definition Database.h:471
bool operator!=(const iterator &i) const
Definition Database.h:472
std::forward_iterator_tag iterator_category
Definition Database.h:465
returned by Database::get_city_table
Definition Database.h:449
bool is_valid_at(size_t i)
Definition Database.h:485
iterator begin() const
Definition Database.h:480
iterator end() const
Definition Database.h:481
joedb::index_t get_size() const
Definition Database.h:483
id_of_city get_end() const
Definition Database.h:488
id_of_city first() const
Definition Database.h:486
id_of_city last() const
Definition Database.h:487
static id_of_city get_at(size_t i)
Definition Database.h:484
bool operator==(const iterator &i) const
Definition Database.h:529
std::forward_iterator_tag iterator_category
Definition Database.h:523
bool operator!=(const iterator &i) const
Definition Database.h:530
returned by Database::get_person_table
Definition Database.h:507
id_of_person first() const
Definition Database.h:544
id_of_person last() const
Definition Database.h:545
id_of_person get_end() const
Definition Database.h:546
joedb::index_t get_size() const
Definition Database.h:541
static id_of_person get_at(size_t i)
Definition Database.h:542
Strongly-typed wrapper around an integer representing a row of the city table.
Definition ids.h:25
constexpr auto get_id() const
Definition ids.h:35
constexpr Record_Id get_record_id() const
Definition ids.h:36
Strongly-typed wrapper around an integer representing a row of the person table.
Definition ids.h:48
constexpr Record_Id get_record_id() const
Definition ids.h:59
constexpr auto get_id() const
Definition ids.h:58
bool operator!=(const iterator &i) const
Definition Database.h:581
returned by Database::find_person_by_name
Definition Database.h:565
#define JOEDB_RELEASE_ASSERT(x)
always-tested assertion (release and debug mode)
Definition assert.h:24
ptrdiff_t index_t
Definition index_types.h:18
constexpr const char * get_version()
Definition get_version.h:7
void write_string(std::ostream &out, const std::string &s, bool json)
Definition Blob.h:7
Automatically generated by joedbc.
Definition Client.h:19