3#include <StormByte/database/prepared_stmt.hxx>
4#include <StormByte/database/rows.hxx>
5#include <StormByte/logger/log.hxx>
7#include <unordered_map>
13namespace StormByte::Database {
23 Database(std::shared_ptr<Logger::Log> logger)
noexcept:
24 m_logger(logger), m_connected(
false) {};
65 virtual
void Disconnect() noexcept;
71 inline
bool IsConnected() const noexcept {
82 template<
typename... Args>
83 inline ExpectedRows
ExecuteSTMT(
const std::string& name, Args&&... args) {
84 auto it = m_prepared_stmts.find(name);
85 if (it == m_prepared_stmts.end())
86 return Unexpected<UnknownSTMT>(name);
87 return it->second->Execute(std::forward<Args>(args)...);
95 virtual ExpectedRows
Query(
const std::string& query) = 0;
108 SilentQuery(
"BEGIN TRANSACTION;");
115 SilentQuery(
"BEGIN EXCLUSIVE TRANSACTION;");
122 SilentQuery(
"COMMIT;");
129 SilentQuery(
"ROLLBACK;");
136 std::unique_ptr<PreparedSTMT>
156 virtual
void DoPostConnect() noexcept {}
173 virtual
void DoPostDisconnect() noexcept {}
181 virtual std::unique_ptr<PreparedSTMT>
CreatePreparedSTMT(std::string&& name, std::string&& query)
noexcept = 0;
189 void PrepareSTMT(std::string&& name, std::string&& query)
noexcept;
Database(std::shared_ptr< Logger::Log > logger) noexcept
Default constructor.
Definition database.hxx:23
std::shared_ptr< Logger::Log > m_logger
Logger instance.
Definition database.hxx:133
virtual void DoPreConnect() noexcept
Pre-connect action Default is a noop.
Definition database.hxx:144
virtual void DoPreDisconnect() noexcept
Pre-disconnect action Default is a noop.
Definition database.hxx:162
void PrepareSTMT(std::string &&name, std::string &&query) noexcept
Database(Database &&other)=default
Default move constructor.
std::unordered_map< std::string, std::unique_ptr< PreparedSTMT > > m_prepared_stmts
Prepared statements.
Definition database.hxx:137
virtual void CommitTransaction()
Definition database.hxx:121
virtual void DoDisconnect() noexcept=0
Disconnects from the database.
ExpectedRows ExecuteSTMT(const std::string &name, Args &&... args)
Definition database.hxx:83
virtual bool SilentQuery(const std::string &query) noexcept=0
virtual ~Database()=default
Default destructor.
Database(const Database &other)=delete
Default copy constructor (deleted)
bool m_connected
Connection state.
Definition database.hxx:138
Database & operator=(const Database &other)=delete
Default copy assignment operator (deleted)
Database & operator=(Database &&other)=default
Default move assignment operator.
virtual void RollbackTransaction()
Definition database.hxx:128
virtual void BeginExclusiveTransaction()
Definition database.hxx:114
virtual ExpectedRows Query(const std::string &query)=0
virtual void BeginTransaction()
Definition database.hxx:107
bool Connect() noexcept
Connects to the database.
virtual std::unique_ptr< PreparedSTMT > CreatePreparedSTMT(std::string &&name, std::string &&query) noexcept=0
Creates a prepared statement.
virtual bool DoConnect() noexcept=0
Connects to the database.
Contains classes and functions for database operations.