StormByte C++ Library: Database module 0.0.9999
StormByte-Database is a StormByte library module for handling database connections
Loading...
Searching...
No Matches
database.hxx
1#pragma once
2
3#include <StormByte/database/prepared_stmt.hxx>
4#include <StormByte/database/rows.hxx>
5#include <StormByte/logger/log.hxx>
6
7#include <unordered_map>
8
13namespace StormByte::Database {
18 class STORMBYTE_DATABASE_PUBLIC Database {
19 public:
23 Database(std::shared_ptr<Logger::Log> logger) noexcept:
24 m_logger(logger), m_connected(false) {};
25
30 Database(const Database& other) = delete;
31
36 Database(Database&& other) = default;
37
43 Database& operator=(const Database& other) = delete;
44
50 Database& operator=(Database&& other) = default;
51
55 virtual ~Database() = default;
56
60 bool Connect() noexcept;
61
65 virtual void Disconnect() noexcept;
66
71 inline bool IsConnected() const noexcept {
72 return m_connected;
73 }
74
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)...);
88 }
89
95 virtual ExpectedRows Query(const std::string& query) = 0;
96
102 virtual bool SilentQuery(const std::string& query) noexcept = 0;
103
107 inline virtual void BeginTransaction() {
108 SilentQuery("BEGIN TRANSACTION;");
109 }
110
114 inline virtual void BeginExclusiveTransaction() {
115 SilentQuery("BEGIN EXCLUSIVE TRANSACTION;");
116 }
117
121 inline virtual void CommitTransaction() {
122 SilentQuery("COMMIT;");
123 }
124
128 inline virtual void RollbackTransaction() {
129 SilentQuery("ROLLBACK;");
130 }
131
132 protected:
133 std::shared_ptr<Logger::Log> m_logger;
134 std::unordered_map<
135 std::string,
136 std::unique_ptr<PreparedSTMT>
139
144 virtual void DoPreConnect() noexcept {}
145
150 virtual bool DoConnect() noexcept = 0;
151
156 virtual void DoPostConnect() noexcept {}
157
162 virtual void DoPreDisconnect() noexcept {}
163
167 virtual void DoDisconnect() noexcept = 0;
168
173 virtual void DoPostDisconnect() noexcept {}
174
181 virtual std::unique_ptr<PreparedSTMT> CreatePreparedSTMT(std::string&& name, std::string&& query) noexcept = 0;
182
189 void PrepareSTMT(std::string&& name, std::string&& query) noexcept;
190 };
191}
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.