0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2025-01-14 00:34:18 +01:00

ircd::db: Move database::descriptor out to db::descriptor.

This commit is contained in:
Jason Volk 2018-09-19 15:38:37 -07:00
parent d13ed5854b
commit 53651ad808
9 changed files with 70 additions and 67 deletions

View file

@ -18,7 +18,7 @@ namespace ircd::db
// Information about a column // Information about a column
uint32_t id(const column &); uint32_t id(const column &);
const std::string &name(const column &); const std::string &name(const column &);
const database::descriptor &describe(const column &); const descriptor &describe(const column &);
size_t file_count(const column &); size_t file_count(const column &);
size_t bytes(const column &); size_t bytes(const column &);
@ -107,7 +107,7 @@ struct ircd::db::column
public: public:
explicit operator const database &() const; explicit operator const database &() const;
explicit operator const database::column &() const; explicit operator const database::column &() const;
explicit operator const database::descriptor &() const; explicit operator const descriptor &() const;
explicit operator database &(); explicit operator database &();
explicit operator database::column &(); explicit operator database::column &();

View file

@ -20,7 +20,7 @@
/// points to an internally managed database::column. /// points to an internally managed database::column.
namespace ircd::db namespace ircd::db
{ {
const database::descriptor &describe(const database::column &); const descriptor &describe(const database::column &);
const std::string &name(const database::column &); const std::string &name(const database::column &);
uint32_t id(const database::column &); uint32_t id(const database::column &);
@ -34,7 +34,7 @@ struct ircd::db::database::column final
database *d; database *d;
std::type_index key_type; std::type_index key_type;
std::type_index mapped_type; std::type_index mapped_type;
database::descriptor descriptor; db::descriptor descriptor;
comparator cmp; comparator cmp;
prefix_transform prefix; prefix_transform prefix;
compaction_filter cfilter; compaction_filter cfilter;
@ -50,7 +50,7 @@ struct ircd::db::database::column final
operator rocksdb::ColumnFamilyHandle *(); operator rocksdb::ColumnFamilyHandle *();
operator database &(); operator database &();
explicit column(database *const &d, const database::descriptor &); explicit column(database *const &d, const db::descriptor &);
column() = delete; column() = delete;
column(column &&) = delete; column(column &&) = delete;
column(const column &) = delete; column(const column &) = delete;

View file

@ -67,7 +67,6 @@ struct ircd::db::database
:std::enable_shared_from_this<database> :std::enable_shared_from_this<database>
,instance_list<database> ,instance_list<database>
{ {
struct descriptor;
struct options; struct options;
struct events; struct events;
struct stats; struct stats;
@ -81,8 +80,6 @@ struct ircd::db::database
struct env; struct env;
struct cache; struct cache;
using description = std::vector<descriptor>;
std::string name; std::string name;
uint64_t checkpoint; uint64_t checkpoint;
std::string optstr; std::string optstr;

View file

@ -64,9 +64,9 @@ enum class ircd::db::pos
#include "compactor.h" #include "compactor.h"
#include "prefix.h" #include "prefix.h"
#include "merge.h" #include "merge.h"
#include "descriptor.h"
#include "database/rocksdb.h" #include "database/rocksdb.h"
#include "database/database.h" #include "database/database.h"
#include "database/descriptor.h"
#include "database/options.h" #include "database/options.h"
#include "database/snapshot.h" #include "database/snapshot.h"
#include "cache.h" #include "cache.h"

View file

@ -11,9 +11,15 @@
#pragma once #pragma once
#define HAVE_IRCD_DB_DATABASE_DESCRIPTOR_H #define HAVE_IRCD_DB_DATABASE_DESCRIPTOR_H
namespace ircd::db
{
struct descriptor;
using description = std::vector<descriptor>;
}
/// Descriptor of a column when opening database. Database must be opened with /// Descriptor of a column when opening database. Database must be opened with
/// a consistent set of descriptors describing what will be found upon opening. /// a consistent set of descriptors describing what will be found upon opening.
struct ircd::db::database::descriptor struct ircd::db::descriptor
{ {
using typing = std::pair<std::type_index, std::type_index>; using typing = std::pair<std::type_index, std::type_index>;

View file

@ -90,7 +90,7 @@ struct ircd::m::dbs::write_opts
namespace ircd::m::dbs::desc namespace ircd::m::dbs::desc
{ {
// Full description // Full description
extern const database::description events; extern const db::description events;
// //
// Direct columns // Direct columns
@ -99,82 +99,82 @@ namespace ircd::m::dbs::desc
extern conf::item<size_t> events__auth_events__block__size; extern conf::item<size_t> events__auth_events__block__size;
extern conf::item<size_t> events__auth_events__cache__size; extern conf::item<size_t> events__auth_events__cache__size;
extern conf::item<size_t> events__auth_events__cache_comp__size; extern conf::item<size_t> events__auth_events__cache_comp__size;
extern const database::descriptor events_auth_events; extern const db::descriptor events_auth_events;
extern conf::item<size_t> events__content__block__size; extern conf::item<size_t> events__content__block__size;
extern conf::item<size_t> events__content__cache__size; extern conf::item<size_t> events__content__cache__size;
extern conf::item<size_t> events__content__cache_comp__size; extern conf::item<size_t> events__content__cache_comp__size;
extern const database::descriptor events_content; extern const db::descriptor events_content;
extern conf::item<size_t> events__depth__block__size; extern conf::item<size_t> events__depth__block__size;
extern conf::item<size_t> events__depth__cache__size; extern conf::item<size_t> events__depth__cache__size;
extern conf::item<size_t> events__depth__cache_comp__size; extern conf::item<size_t> events__depth__cache_comp__size;
extern const database::descriptor events_depth; extern const db::descriptor events_depth;
extern conf::item<size_t> events__event_id__block__size; extern conf::item<size_t> events__event_id__block__size;
extern conf::item<size_t> events__event_id__cache__size; extern conf::item<size_t> events__event_id__cache__size;
extern conf::item<size_t> events__event_id__cache_comp__size; extern conf::item<size_t> events__event_id__cache_comp__size;
extern const database::descriptor events_event_id; extern const db::descriptor events_event_id;
extern conf::item<size_t> events__hashes__block__size; extern conf::item<size_t> events__hashes__block__size;
extern conf::item<size_t> events__hashes__cache__size; extern conf::item<size_t> events__hashes__cache__size;
extern conf::item<size_t> events__hashes__cache_comp__size; extern conf::item<size_t> events__hashes__cache_comp__size;
extern const database::descriptor events_hashes; extern const db::descriptor events_hashes;
extern conf::item<size_t> events__membership__block__size; extern conf::item<size_t> events__membership__block__size;
extern conf::item<size_t> events__membership__cache__size; extern conf::item<size_t> events__membership__cache__size;
extern conf::item<size_t> events__membership__cache_comp__size; extern conf::item<size_t> events__membership__cache_comp__size;
extern const database::descriptor events_membership; extern const db::descriptor events_membership;
extern conf::item<size_t> events__origin__block__size; extern conf::item<size_t> events__origin__block__size;
extern conf::item<size_t> events__origin__cache__size; extern conf::item<size_t> events__origin__cache__size;
extern conf::item<size_t> events__origin__cache_comp__size; extern conf::item<size_t> events__origin__cache_comp__size;
extern const database::descriptor events_origin; extern const db::descriptor events_origin;
extern conf::item<size_t> events__origin_server_ts__block__size; extern conf::item<size_t> events__origin_server_ts__block__size;
extern conf::item<size_t> events__origin_server_ts__cache__size; extern conf::item<size_t> events__origin_server_ts__cache__size;
extern conf::item<size_t> events__origin_server_ts__cache_comp__size; extern conf::item<size_t> events__origin_server_ts__cache_comp__size;
extern const database::descriptor events_origin_server_ts; extern const db::descriptor events_origin_server_ts;
extern conf::item<size_t> events__prev_events__block__size; extern conf::item<size_t> events__prev_events__block__size;
extern conf::item<size_t> events__prev_events__cache__size; extern conf::item<size_t> events__prev_events__cache__size;
extern conf::item<size_t> events__prev_events__cache_comp__size; extern conf::item<size_t> events__prev_events__cache_comp__size;
extern const database::descriptor events_prev_events; extern const db::descriptor events_prev_events;
extern conf::item<size_t> events__prev_state__block__size; extern conf::item<size_t> events__prev_state__block__size;
extern conf::item<size_t> events__prev_state__cache__size; extern conf::item<size_t> events__prev_state__cache__size;
extern conf::item<size_t> events__prev_state__cache_comp__size; extern conf::item<size_t> events__prev_state__cache_comp__size;
extern const database::descriptor events_prev_state; extern const db::descriptor events_prev_state;
extern conf::item<size_t> events__redacts__block__size; extern conf::item<size_t> events__redacts__block__size;
extern conf::item<size_t> events__redacts__cache__size; extern conf::item<size_t> events__redacts__cache__size;
extern conf::item<size_t> events__redacts__cache_comp__size; extern conf::item<size_t> events__redacts__cache_comp__size;
extern const database::descriptor events_redacts; extern const db::descriptor events_redacts;
extern conf::item<size_t> events__room_id__block__size; extern conf::item<size_t> events__room_id__block__size;
extern conf::item<size_t> events__room_id__cache__size; extern conf::item<size_t> events__room_id__cache__size;
extern conf::item<size_t> events__room_id__cache_comp__size; extern conf::item<size_t> events__room_id__cache_comp__size;
extern const database::descriptor events_room_id; extern const db::descriptor events_room_id;
extern conf::item<size_t> events__sender__block__size; extern conf::item<size_t> events__sender__block__size;
extern conf::item<size_t> events__sender__cache__size; extern conf::item<size_t> events__sender__cache__size;
extern conf::item<size_t> events__sender__cache_comp__size; extern conf::item<size_t> events__sender__cache_comp__size;
extern const database::descriptor events_sender; extern const db::descriptor events_sender;
extern conf::item<size_t> events__signatures__block__size; extern conf::item<size_t> events__signatures__block__size;
extern conf::item<size_t> events__signatures__cache__size; extern conf::item<size_t> events__signatures__cache__size;
extern conf::item<size_t> events__signatures__cache_comp__size; extern conf::item<size_t> events__signatures__cache_comp__size;
extern const database::descriptor events_signatures; extern const db::descriptor events_signatures;
extern conf::item<size_t> events__state_key__block__size; extern conf::item<size_t> events__state_key__block__size;
extern conf::item<size_t> events__state_key__cache__size; extern conf::item<size_t> events__state_key__cache__size;
extern conf::item<size_t> events__state_key__cache_comp__size; extern conf::item<size_t> events__state_key__cache_comp__size;
extern const database::descriptor events_state_key; extern const db::descriptor events_state_key;
extern conf::item<size_t> events__type__block__size; extern conf::item<size_t> events__type__block__size;
extern conf::item<size_t> events__type__cache__size; extern conf::item<size_t> events__type__cache__size;
extern conf::item<size_t> events__type__cache_comp__size; extern conf::item<size_t> events__type__cache_comp__size;
extern const database::descriptor events_type; extern const db::descriptor events_type;
// //
// Metadata columns // Metadata columns
@ -184,19 +184,19 @@ namespace ircd::m::dbs::desc
extern conf::item<size_t> events__event_idx__block__size; extern conf::item<size_t> events__event_idx__block__size;
extern conf::item<size_t> events__event_idx__cache__size; extern conf::item<size_t> events__event_idx__cache__size;
extern conf::item<size_t> events__event_idx__cache_comp__size; extern conf::item<size_t> events__event_idx__cache_comp__size;
extern const database::descriptor events__event_idx; extern const db::descriptor events__event_idx;
// events blacklist // events blacklist
extern conf::item<size_t> events__event_bad__block__size; extern conf::item<size_t> events__event_bad__block__size;
extern conf::item<size_t> events__event_bad__cache__size; extern conf::item<size_t> events__event_bad__cache__size;
extern conf::item<size_t> events__event_bad__cache_comp__size; extern conf::item<size_t> events__event_bad__cache_comp__size;
extern const database::descriptor events__event_bad; extern const db::descriptor events__event_bad;
// room head mapping sequence // room head mapping sequence
extern conf::item<size_t> events__room_head__block__size; extern conf::item<size_t> events__room_head__block__size;
extern conf::item<size_t> events__room_head__cache__size; extern conf::item<size_t> events__room_head__cache__size;
extern const db::prefix_transform events__room_head__pfx; extern const db::prefix_transform events__room_head__pfx;
extern const database::descriptor events__room_head; extern const db::descriptor events__room_head;
// room events sequence // room events sequence
extern conf::item<size_t> events__room_events__block__size; extern conf::item<size_t> events__room_events__block__size;
@ -204,27 +204,27 @@ namespace ircd::m::dbs::desc
extern conf::item<size_t> events__room_events__cache_comp__size; extern conf::item<size_t> events__room_events__cache_comp__size;
extern const db::prefix_transform events__room_events__pfx; extern const db::prefix_transform events__room_events__pfx;
extern const db::comparator events__room_events__cmp; extern const db::comparator events__room_events__cmp;
extern const database::descriptor events__room_events; extern const db::descriptor events__room_events;
// room present joined members sequence // room present joined members sequence
extern conf::item<size_t> events__room_joined__block__size; extern conf::item<size_t> events__room_joined__block__size;
extern conf::item<size_t> events__room_joined__cache__size; extern conf::item<size_t> events__room_joined__cache__size;
extern conf::item<size_t> events__room_joined__cache_comp__size; extern conf::item<size_t> events__room_joined__cache_comp__size;
extern const db::prefix_transform events__room_joined__pfx; extern const db::prefix_transform events__room_joined__pfx;
extern const database::descriptor events__room_joined; extern const db::descriptor events__room_joined;
// room present state mapping sequence // room present state mapping sequence
extern conf::item<size_t> events__room_state__block__size; extern conf::item<size_t> events__room_state__block__size;
extern conf::item<size_t> events__room_state__cache__size; extern conf::item<size_t> events__room_state__cache__size;
extern conf::item<size_t> events__room_state__cache_comp__size; extern conf::item<size_t> events__room_state__cache_comp__size;
extern const db::prefix_transform events__room_state__pfx; extern const db::prefix_transform events__room_state__pfx;
extern const database::descriptor events__room_state; extern const db::descriptor events__room_state;
// state btree node key-value store // state btree node key-value store
extern conf::item<size_t> events__state_node__block__size; extern conf::item<size_t> events__state_node__block__size;
extern conf::item<size_t> events__state_node__cache__size; extern conf::item<size_t> events__state_node__cache__size;
extern conf::item<size_t> events__state_node__cache_comp__size; extern conf::item<size_t> events__state_node__cache_comp__size;
extern const database::descriptor events__state_node; extern const db::descriptor events__state_node;
} }
// Internal interface; not for public. // Internal interface; not for public.

View file

@ -593,7 +593,7 @@ ircd::db::name(const database &d)
namespace ircd::db namespace ircd::db
{ {
extern const database::description default_description; extern const description default_description;
} }
// Instance list linkage // Instance list linkage
@ -1369,7 +1369,7 @@ ircd::db::name(const database::column &c)
return c.name; return c.name;
} }
const ircd::db::database::descriptor & const ircd::db::descriptor &
ircd::db::describe(const database::column &c) ircd::db::describe(const database::column &c)
{ {
return c.descriptor; return c.descriptor;
@ -1380,7 +1380,7 @@ ircd::db::describe(const database::column &c)
// //
ircd::db::database::column::column(database *const &d, ircd::db::database::column::column(database *const &d,
const database::descriptor &descriptor) const db::descriptor &descriptor)
:rocksdb::ColumnFamilyDescriptor :rocksdb::ColumnFamilyDescriptor
( (
descriptor.name, database::options{descriptor.options} descriptor.name, database::options{descriptor.options}
@ -7316,7 +7316,7 @@ ircd::db::name(const column &column)
return name(c); return name(c);
} }
const ircd::db::database::descriptor & const ircd::db::descriptor &
ircd::db::describe(const column &column) ircd::db::describe(const column &column)
{ {
const database::column &c(column); const database::column &c(column);
@ -7679,7 +7679,7 @@ const
} }
ircd::db::column::operator ircd::db::column::operator
const database::descriptor &() const descriptor &()
const const
{ {
return c->descriptor; return c->descriptor;

View file

@ -606,7 +606,7 @@ ircd::m::dbs::desc::events__event_idx__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__event_idx ircd::m::dbs::desc::events__event_idx
{ {
// name // name
@ -676,7 +676,7 @@ ircd::m::dbs::desc::events__event_bad__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__event_bad ircd::m::dbs::desc::events__event_bad
{ {
// name // name
@ -810,7 +810,7 @@ ircd::m::dbs::room_head_key(const string_view &amalgam)
/// At that time the prev_events of that event will be iterated and DELETE /// At that time the prev_events of that event will be iterated and DELETE
/// ops will be appended in the transaction. /// ops will be appended in the transaction.
/// ///
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__room_head ircd::m::dbs::desc::events__room_head
{ {
// name // name
@ -1070,7 +1070,7 @@ ircd::m::dbs::room_events_key(const string_view &amalgam)
/// for the time being, we pay the cost of an extra query to events_depth and /// for the time being, we pay the cost of an extra query to events_depth and
/// find that missing piece to make the exact query with all three key parts. /// find that missing piece to make the exact query with all three key parts.
/// ///
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__room_events ircd::m::dbs::desc::events__room_events
{ {
// name // name
@ -1217,7 +1217,7 @@ ircd::m::dbs::room_joined_key(const string_view &amalgam)
}; };
} }
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__room_joined ircd::m::dbs::desc::events__room_joined
{ {
// name // name
@ -1365,7 +1365,7 @@ ircd::m::dbs::room_state_key(const string_view &amalgam)
}; };
} }
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__room_state ircd::m::dbs::desc::events__room_state
{ {
// name // name
@ -1447,7 +1447,7 @@ ircd::m::dbs::desc::events__state_node__cache_comp__size
/// of the value, which serves as the ID of the node when referenced in /// of the value, which serves as the ID of the node when referenced in
/// the tree. see: m/state.h for details. /// the tree. see: m/state.h for details.
/// ///
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__state_node ircd::m::dbs::desc::events__state_node
{ {
// name // name
@ -1531,7 +1531,7 @@ ircd::m::dbs::desc::events__event_id__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_event_id ircd::m::dbs::desc::events_event_id
{ {
// name // name
@ -1619,7 +1619,7 @@ ircd::m::dbs::desc::events__type__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_type ircd::m::dbs::desc::events_type
{ {
// name // name
@ -1708,7 +1708,7 @@ ircd::m::dbs::desc::events__content__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_content ircd::m::dbs::desc::events_content
{ {
// name // name
@ -1797,7 +1797,7 @@ ircd::m::dbs::desc::events__redacts__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_redacts ircd::m::dbs::desc::events_redacts
{ {
// name // name
@ -1880,7 +1880,7 @@ ircd::m::dbs::desc::events__room_id__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_room_id ircd::m::dbs::desc::events_room_id
{ {
// name // name
@ -1968,7 +1968,7 @@ ircd::m::dbs::desc::events__sender__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_sender ircd::m::dbs::desc::events_sender
{ {
// name // name
@ -2056,7 +2056,7 @@ ircd::m::dbs::desc::events__state_key__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_state_key ircd::m::dbs::desc::events_state_key
{ {
// name // name
@ -2146,7 +2146,7 @@ ircd::m::dbs::desc::events__origin__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_origin ircd::m::dbs::desc::events_origin
{ {
// name // name
@ -2231,7 +2231,7 @@ ircd::m::dbs::desc::events__origin_server_ts__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_origin_server_ts ircd::m::dbs::desc::events_origin_server_ts
{ {
// name // name
@ -2320,7 +2320,7 @@ ircd::m::dbs::desc::events__signatures__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_signatures ircd::m::dbs::desc::events_signatures
{ {
// name // name
@ -2403,7 +2403,7 @@ ircd::m::dbs::desc::events__auth_events__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_auth_events ircd::m::dbs::desc::events_auth_events
{ {
// name // name
@ -2485,7 +2485,7 @@ ircd::m::dbs::desc::events__depth__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_depth ircd::m::dbs::desc::events_depth
{ {
// name // name
@ -2567,7 +2567,7 @@ ircd::m::dbs::desc::events__hashes__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_hashes ircd::m::dbs::desc::events_hashes
{ {
// name // name
@ -2649,7 +2649,7 @@ ircd::m::dbs::desc::events__membership__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_membership ircd::m::dbs::desc::events_membership
{ {
// name // name
@ -2731,7 +2731,7 @@ ircd::m::dbs::desc::events__prev_events__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_prev_events ircd::m::dbs::desc::events_prev_events
{ {
// name // name
@ -2813,7 +2813,7 @@ ircd::m::dbs::desc::events__prev_state__cache_comp__size
} }
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events_prev_state ircd::m::dbs::desc::events_prev_state
{ {
// name // name
@ -2858,10 +2858,10 @@ ircd::m::dbs::desc::events_prev_state
namespace ircd::m::dbs::desc namespace ircd::m::dbs::desc
{ {
extern const ircd::database::descriptor events__default; extern const ircd::db::descriptor events__default;
}; };
const ircd::database::descriptor const ircd::db::descriptor
ircd::m::dbs::desc::events__default ircd::m::dbs::desc::events__default
{ {
// name // name
@ -2899,7 +2899,7 @@ ircd::m::dbs::desc::events__default
false, false,
}; };
const ircd::database::description const ircd::db::description
ircd::m::dbs::desc::events ircd::m::dbs::desc::events
{ {
// Requirement of RocksDB/LevelDB // Requirement of RocksDB/LevelDB

View file

@ -16,8 +16,8 @@ extern conf::item<bool> media_blocks_cache_enable;
extern conf::item<bool> media_blocks_cache_comp_enable; extern conf::item<bool> media_blocks_cache_comp_enable;
extern conf::item<size_t> media_blocks_cache_size; extern conf::item<size_t> media_blocks_cache_size;
extern conf::item<size_t> media_blocks_cache_comp_size; extern conf::item<size_t> media_blocks_cache_comp_size;
extern const db::database::descriptor media_blocks_descriptor; extern const db::descriptor media_blocks_descriptor;
extern const db::database::description media_description; extern const db::description media_description;
extern std::shared_ptr<db::database> media; extern std::shared_ptr<db::database> media;
extern db::column blocks; extern db::column blocks;