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