MantisBase v0.3.4
Loading...
Searching...
No Matches
database.h
Go to the documentation of this file.
1
6#ifndef DATABASE_H
7#define DATABASE_H
8
9#include <memory>
10#include <soci/soci.h>
11#include <nlohmann/json.hpp>
12#include <mantisbase/core/private-impl/soci_custom_types.hpp>
13
14#ifdef MANTIS_SCRIPTING_ENABLED
15#include <dukglue/dukglue.h>
16#endif
17
18#include "../mantisbase.h"
19#include "../utils/utils.h"
20#include "logger/logger.h"
21
22namespace mb {
23 using json = nlohmann::json;
24
39 class Database {
40 public:
44 Database();
45
49 ~Database();
50
58 bool connect(const std::string &conn_str);
59 const std::string& connectionStr() const;
60
61
65 void disconnect();
66
71 bool createSysTables() const;
72
81 [[nodiscard]] std::shared_ptr<soci::session> session() const;
82
87 [[nodiscard]] soci::connection_pool &connectionPool() const;
88
93 [[nodiscard]] bool isConnected() const;
94
95#ifdef MANTIS_SCRIPTING_ENABLED
96 static void registerDuktapeMethods();
97#endif
98
99 private:
116#ifdef MANTIS_SCRIPTING_ENABLED
117 duk_ret_t query(duk_context *ctx);
118#endif
119
123 void writeCheckpoint() const;
124
125 std::string m_connStr;
126 std::unique_ptr<soci::connection_pool> m_connPool;
127 const MantisBase &mbApp;
128 };
129
134 class MantisLoggerImpl : public soci::logger_impl {
135 public:
140 void start_query(std::string const &query) override {
141 logger_impl::start_query(query);
142 LogOrigin::dbTrace(fmt::format("$ sql << {}", query));
143 }
144
145 private:
150 logger_impl *do_clone() const override {
151 return new MantisLoggerImpl();
152 }
153 };
154} // mb
155
156#endif //DATABASE_H
Database connection and session management.
Definition database.h:39
~Database()
Destructor (disconnects from database).
Definition database.cpp:20
const std::string & connectionStr() const
Definition database.cpp:112
void disconnect()
Close all database connections and destroy connection pool.
Definition database.cpp:114
bool createSysTables() const
Create system tables (mb_tables, mb_admins, etc.).
Definition database.cpp:154
bool connect(const std::string &conn_str)
Connect to database and initialize connection pool.
Definition database.cpp:24
bool isConnected() const
Check if database is connected.
Definition database.cpp:212
std::shared_ptr< soci::session > session() const
Get a database session from the connection pool.
Definition database.cpp:204
soci::connection_pool & connectionPool() const
Get access to the underlying connection pool.
Definition database.cpp:208
Database()
Construct database instance.
Definition database.cpp:17
MantisBase entry point.
Definition mantisbase.h:40
Logger implementation for soci, allowing us to override the default logging behaviour with our own cu...
Definition database.h:134
void start_query(std::string const &query) override
Called before query is executed by soci, we can log the query here.
Definition database.h:140
router.h
Definition auth.h:15
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18