12#ifndef settings_Database_declared
13#define settings_Database_declared
45 extern const char * schema_string;
46 inline constexpr size_t schema_string_size = 80;
48 class container_of_settings;
52 struct data_of_settings
55 std::vector<char> field_value_of_dark_mode;
56 std::vector<std::string> field_value_of_host;
57 std::vector<std::string> field_value_of_user;
61 size_t size()
const {
return freedom_keeper.
size();}
63 void resize(
size_t new_size)
65 field_value_of_dark_mode.resize(new_size);
66 field_value_of_host.resize(new_size);
67 field_value_of_user.resize(new_size);
68 freedom_keeper.
resize(new_size);
82 template<
typename E = joedb::Exception>
85 throw E(
"settings: " + message);
124 bool field_value_of_dark_mode
128 storage_of_settings.field_value_of_dark_mode[size_t(record_id) - 1] = field_value_of_dark_mode;
138 for (
size_t i = 0; i < size; i++)
142 std::copy_n(value, size, target);
148 const std::string& field_value_of_host
159 const std::string *value
162 for (
size_t i = 0; i < size; i++)
166 std::copy_n(value, size, target);
172 const std::string& field_value_of_user
183 const std::string *value
186 for (
size_t i = 0; i < size; i++)
190 std::copy_n(value, size, target);
196 if (table_id == Table_Id(1))
204 if (table_id == Table_Id(1))
224 size_t(record_id) <= 0 ||
230 if (table_id == Table_Id(1))
243 const std::string& value
247 if (table_id == Table_Id(1))
249 if (field_id == Field_Id(2))
254 if (field_id == Field_Id(3))
272 if (table_id == Table_Id(1))
274 if (field_id == Field_Id(1))
289 const std::string *value
293 if (table_id == Table_Id(1))
295 if (field_id == Field_Id(2))
300 if (field_id == Field_Id(3))
319 if (table_id == Table_Id(1))
321 if (field_id == Field_Id(1))
339 if (table_id == Table_Id(1))
342 if (field_id == Field_Id(2))
346 if (field_id == Field_Id(3))
364 if (table_id == Table_Id(1))
367 if (field_id == Field_Id(1))
396 schema_file_size < pos ||
397 schema_file_size > detail::schema_string_size ||
401 detail::schema_string + pos,
402 schema_file_size - pos
426 const std::string &name
436 const std::string &name,
454 const std::string &name
461 void custom(
const std::string &name)
override
487 throw_exception<joedb::Out_Of_Date>(
"Schema is out of date. Can't upgrade a read-only database.");
508 template<
class Comparator>
509 std::vector<id_of_settings>
sorted_settings(Comparator comparator)
const;
554 iterator(
const detail::data_of_settings &data): fk(&data.freedom_keeper), index(0) {}
587 template<
class Comparator>
590 std::vector<id_of_settings> result;
592 result.emplace_back(x);
593 std::sort(result.begin(), result.end(), comparator);
ptrdiff_t get_previous(ptrdiff_t index) const override
void resize(ptrdiff_t new_size) override
ptrdiff_t size() const override
ptrdiff_t get_next(ptrdiff_t index) const override
void replay_log(Writable &writable)
int64_t get_checkpoint() const
void rename_field(Table_Id table_id, Field_Id field_id, const std::string &name) final
void create_table(const std::string &name) final
void drop_field(Table_Id table_id, Field_Id field_id) final
void custom(const std::string &name) final
void rename_table(Table_Id table_id, const std::string &name) final
void add_field(Table_Id table_id, const std::string &name, Type type) final
void drop_table(Table_Id table_id) final
Store all the tables of the database.
bool is_valid_record_id_for_settings(Record_Id record_id) const
void rename_field(Table_Id table_id, Field_Id field_id, const std::string &name) final
void internal_update_vector_settings__dark_mode(Record_Id record_id, size_t size, const char *value)
void delete_from(Table_Id table_id, Record_Id record_id) final
bool is_valid(id_of_settings id) const
static constexpr id_of_settings the_settings()
void internal_update_settings__dark_mode(Record_Id record_id, bool field_value_of_dark_mode)
void internal_insert_settings(Record_Id record_id)
friend class id_of_settings
void create_table(const std::string &name) override
std::vector< id_of_settings > sorted_settings(Comparator comparator) const
void insert_into(Table_Id table_id, Record_Id record_id) final
void update_string(Table_Id table_id, Record_Id record_id, Field_Id field_id, const std::string &value) final
void update_boolean(Table_Id table_id, Record_Id record_id, Field_Id field_id, bool value) final
const std::string & get_user(id_of_settings record=id_of_settings{1}) const
void drop_field(Table_Id table_id, Field_Id field_id) final
joedb::Writable_Journal schema_journal
friend class container_of_settings
void internal_vector_insert_settings(Record_Id record_id, size_t size)
void update_vector_string(Table_Id table_id, Record_Id record_id, Field_Id field_id, size_t size, const std::string *value) final
void internal_delete_settings(Record_Id record_id)
static id_of_settings null_settings()
bool requires_schema_upgrade() const
int64_t get_schema_checkpoint() const
void custom(const std::string &name) override
void add_field(Table_Id table_id, const std::string &name, joedb::Type type) override
id_of_settings next(id_of_settings id) const
void update_vector_boolean(Table_Id table_id, Record_Id record_id, Field_Id field_id, size_t size, const char *value) final
void internal_update_vector_settings__user(Record_Id record_id, size_t size, const std::string *value)
void insert_vector(Table_Id table_id, Record_Id record_id, size_t size) final
char * get_own_boolean_storage(Table_Id table_id, Record_Id record_id, Field_Id field_id, size_t &capacity) final
static void throw_exception(const std::string &message)
void drop_table(Table_Id table_id) final
void timestamp(int64_t timestamp) override
const std::string & get_host(id_of_settings record=id_of_settings{1}) const
bool get_dark_mode(id_of_settings record=id_of_settings{1}) const
joedb::Memory_File schema_file
id_of_settings previous(id_of_settings id) const
Table_Id current_table_id
void internal_update_settings__host(Record_Id record_id, const std::string &field_value_of_host)
void set_max_record_id(size_t record_id)
void internal_update_vector_settings__host(Record_Id record_id, size_t size, const std::string *value)
detail::data_of_settings storage_of_settings
void internal_update_settings__user(Record_Id record_id, const std::string &field_value_of_user)
std::string * get_own_string_storage(Table_Id table_id, Record_Id record_id, Field_Id field_id, size_t &capacity) final
void initialize_with_readonly_journal(joedb::Readonly_Journal &journal)
void comment(const std::string &comment) override
container_of_settings get_settings_table() const
void rename_table(Table_Id table_id, const std::string &name) final
Implement the joedb::Readable interface for a compiled database.
std::forward_iterator_tag iterator_category
bool operator==(const iterator &i) const
id_of_settings value_type
id_of_settings operator*() const
std::ptrdiff_t difference_type
bool operator!=(const iterator &i) const
returned by Database::get_settings_table
bool is_valid_at(size_t i)
id_of_settings last() const
static id_of_settings get_at(size_t i)
id_of_settings get_end() const
id_of_settings first() const
Strongly-typed wrapper around an integer representing a row of the settings table.
#define JOEDB_DEBUG_ASSERT(x)
constexpr const char * get_version()
Automatically generated by joedbc.