- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
namespace arangodb {
class DatabaseFeature;
struct IDatabaseGuard {
virtual ~IDatabaseGuard() = default;
[[nodiscard]] virtual TRI_vocbase_t& database() const noexcept = 0;
};
struct VocbaseReleaser {
void operator()(TRI_vocbase_t* vocbase) const noexcept;
};
using VocbasePtr = std::unique_ptr<TRI_vocbase_t, VocbaseReleaser>;
/// @brief Scope guard for a database, ensures that it is not
/// dropped while still using it.
class DatabaseGuard final : public IDatabaseGuard {
public:
/// @brief create guard on existing db
explicit DatabaseGuard(TRI_vocbase_t& vocbase);
/// @brief create guard from existing VocbasePtr
explicit DatabaseGuard(VocbasePtr vocbase);
/// @brief create the guard, using a database id
DatabaseGuard(DatabaseFeature& feature, TRI_voc_tick_t id);
/// @brief create the guard, using a database name
DatabaseGuard(DatabaseFeature& feature, std::string_view name);
/// @brief return the database pointer
TRI_vocbase_t& database() const noexcept final { return *_vocbase; }
TRI_vocbase_t const* operator->() const noexcept { return _vocbase.get(); }
TRI_vocbase_t* operator->() noexcept { return _vocbase.get(); }
private:
VocbasePtr _vocbase;
};
} // namespace arangodb
Комментарии (0) RSS
Добавить комментарий