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/visibility.h>
4
5#include <map>
6#include <memory>
7#include <string>
8
13namespace StormByte::Database {
18 template<class Query, class PreparedSTMT> class STORMBYTE_DATABASE_PUBLIC Database {
19 public:
23 Database() = default;
24
28 Database(const Database&) = delete;
29
33 Database(Database&&) = default;
34
38 Database& operator=(const Database&) = delete;
39
44
48 virtual ~Database() = default;
49
53 virtual void Connect() = 0;
54
58 virtual void Disconnect() = 0;
59
65 std::unique_ptr<Query> PrepareQuery(const std::string& query) {
66 return InternalQuery(query);
67 }
68
73 void SilentQuery(const std::string& query) {
74 InternalQuery(query)->Step();
75 }
76
83 void PrepareSTMT(const std::string& name, const std::string& query) {
84 m_prepared_stmts.insert({name, InternalPrepare(name, query)});
85 }
86
91 void PrepareAll(const std::map<std::string, std::string>& queries) {
92 for (const auto& [name, query]: queries) {
93 PrepareSTMT(name, query);
94 }
95 }
96
102 PreparedSTMT& GetPreparedSTMT(const std::string& name) const {
103 return *m_prepared_stmts.at(name);
104 }
105
109 virtual void BeginTransaction() {
110 SilentQuery("BEGIN TRANSACTION;");
111 }
112
117 SilentQuery("BEGIN EXCLUSIVE TRANSACTION;");
118 }
119
123 virtual void CommitTransaction() {
124 SilentQuery("COMMIT;");
125 }
126
130 virtual void RollbackTransaction() {
131 SilentQuery("ROLLBACK;");
132 }
133
138 virtual const std::string LastError() const = 0;
139
140 protected:
141 std::map<std::string, std::unique_ptr<PreparedSTMT>> m_prepared_stmts;
142
149 virtual std::unique_ptr<PreparedSTMT> InternalPrepare(const std::string& name, const std::string& query) = 0;
150
156 virtual std::unique_ptr<Query> InternalQuery(const std::string& query) = 0;
157 };
158}
PreparedSTMT & GetPreparedSTMT(const std::string &name) const
Definition database.hxx:102
void PrepareSTMT(const std::string &name, const std::string &query)
Definition database.hxx:83
Database & operator=(const Database &)=delete
virtual void BeginTransaction()
Definition database.hxx:109
virtual void BeginExclusiveTransaction()
Definition database.hxx:116
virtual std::unique_ptr< PreparedSTMT > InternalPrepare(const std::string &name, const std::string &query)=0
Database(const Database &)=delete
virtual const std::string LastError() const =0
std::unique_ptr< Query > PrepareQuery(const std::string &query)
Definition database.hxx:65
std::map< std::string, std::unique_ptr< PreparedSTMT > > m_prepared_stmts
Prepared statements.
Definition database.hxx:141
Database(Database &&)=default
virtual std::unique_ptr< Query > InternalQuery(const std::string &query)=0
void SilentQuery(const std::string &query)
Definition database.hxx:73
Database & operator=(Database &&)=default
virtual void CommitTransaction()
Definition database.hxx:123
virtual ~Database()=default
virtual void RollbackTransaction()
Definition database.hxx:130
void PrepareAll(const std::map< std::string, std::string > &queries)
Definition database.hxx:91
Prepared statement for databases.
Definition preparedSTMT.hxx:15
Contains classes and functions for database operations.