Joedb 10.0.0
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Database.cpp
Go to the documentation of this file.
3
4namespace joedb
5{
6 ////////////////////////////////////////////////////////////////////////////
7 void Database::insert_into(Table_Id table_id, Record_Id record_id)
8 ////////////////////////////////////////////////////////////////////////////
9 {
10 if
11 (
12 to_underlying(record_id) < 0 ||
13 (max_record_id >= Record_Id{0} && record_id > max_record_id)
14 )
15 {
16 throw Exception("insert_into: too big");
17 }
18
19 get_table(table_id).insert_record(record_id);
20 }
21
22 ////////////////////////////////////////////////////////////////////////////
24 ////////////////////////////////////////////////////////////////////////////
25 (
26 Table_Id table_id,
27 Record_Id record_id,
28 size_t size
29 )
30 {
31 if (max_record_id >= Record_Id{0})
32 JOEDB_RELEASE_ASSERT(record_id < max_record_id && size < size_t(max_record_id));
33 get_table(table_id).insert_vector(record_id, size);
34 }
35
36 ////////////////////////////////////////////////////////////////////////////
38 ////////////////////////////////////////////////////////////////////////////
39 (
40 Table_Id table_id,
41 Record_Id record_id
42 )
43 {
44 get_table(table_id).delete_record(record_id);
45 }
46
47 ////////////////////////////////////////////////////////////////////////////
49 ////////////////////////////////////////////////////////////////////////////
50 (
51 Table_Id table_id,
52 Record_Id record_id,
53 size_t size
54 )
55 {
56 get_table(table_id).delete_vector(record_id, size);
57 }
58
59 ////////////////////////////////////////////////////////////////////////////
60 #define TYPE_MACRO(type, return_type, type_id, R, W)\
61 void Database::update_##type_id\
62 (\
63 Table_Id table_id,\
64 Record_Id record_id,\
65 Field_Id field_id,\
66 return_type value\
67 )\
68 {\
69 get_table(table_id).update_##type_id(record_id, field_id, value);\
70 }\
71 void Database::update_vector_##type_id\
72 (\
73 Table_Id table_id,\
74 Record_Id record_id,\
75 Field_Id field_id,\
76 size_t size,\
77 const type *value\
78 )\
79 {\
80 get_table(table_id).update_vector_##type_id(record_id, field_id, size, value);\
81 }\
82 \
83 type *Database::get_own_##type_id##_storage\
84 (\
85 Table_Id table_id,\
86 Record_Id record_id,\
87 Field_Id field_id,\
88 size_t &capacity\
89 )\
90 {\
91 Table &table = get_table(table_id);\
92 capacity = table.get_storage_capacity();\
93 return table.get_own_##type_id##_storage(record_id, field_id);\
94 }
95 #include "joedb/TYPE_MACRO.h"
96
97 ////////////////////////////////////////////////////////////////////////////
98 Database::~Database() = default;
99 ////////////////////////////////////////////////////////////////////////////
100}
const Table & get_table(Table_Id table_id) const
void insert_vector(Table_Id table_id, Record_Id record_id, size_t size) override
Definition Database.cpp:25
void delete_from(Table_Id table_id, Record_Id record_id) override
Definition Database.cpp:39
void delete_vector(Table_Id table_id, Record_Id record_id, size_t size) override
Definition Database.cpp:50
void insert_into(Table_Id table_id, Record_Id record_id) override
Definition Database.cpp:7
void insert_record(Record_Id record_id)
Definition Table.cpp:43
#define JOEDB_RELEASE_ASSERT(x)
always-tested assertion (release and debug mode)
Definition assert.h:24
Definition Blob.h:7
constexpr index_t to_underlying(Record_Id id)
Definition index_types.h:59