Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
postgresql_backend.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
20#pragma once
21
24
25#include <memory>
26#include <string>
27#include <vector>
28#include <atomic>
29
30namespace database
31{
32namespace backends
33{
34
72 : public core::backend_base<postgresql_backend, database_types::postgres>
73{
74public:
78 static constexpr const char* backend_name() { return "postgresql_backend"; }
79
84
88 ~postgresql_backend() override = default;
89
90 // database_backend interface implementation
91
92 kcenon::common::Result<core::database_result> select_query(const std::string& query_string) override;
93
94 kcenon::common::VoidResult execute_query(const std::string& query_string) override;
95
96 [[nodiscard]] kcenon::common::Result<core::database_result> select_prepared(
97 const std::string& query,
98 const std::vector<core::database_value>& params) override;
99
100 [[nodiscard]] kcenon::common::VoidResult execute_prepared(
101 const std::string& query,
102 const std::vector<core::database_value>& params) override;
103
104 kcenon::common::VoidResult begin_transaction() override;
105
106 kcenon::common::VoidResult commit_transaction() override;
107
108 kcenon::common::VoidResult rollback_transaction() override;
109
110 bool in_transaction() const override;
111
112 std::string last_error() const override;
113
114 std::map<std::string, std::string> connection_info() const override;
115
124 kcenon::common::Result<uint64_t> execute_batch(const std::vector<std::string>& queries);
125
126protected:
128
134 kcenon::common::VoidResult do_initialize(const core::connection_config& config);
135
140 kcenon::common::VoidResult do_shutdown();
141
142private:
150 std::string build_connection_string(const core::connection_config& config) const;
151
157 std::string build_safe_connection_string(const core::connection_config& config) const;
158
164 std::string sanitize_error(const std::string& error_message) const;
165
171 unsigned int execute_modification_query(const std::string& query_string);
172
173 void* connection_{nullptr};
174 std::atomic<bool> in_transaction_{false};
175 mutable std::string last_error_;
177};
178
179} // namespace backends
180} // namespace database
CRTP template base class for database backends.
Registry for database backend plugins.
PostgreSQL implementation of database_backend interface.
static constexpr const char * backend_name()
Backend name for error messages.
unsigned int execute_modification_query(const std::string &query_string)
Execute a modification query (INSERT, UPDATE, DELETE)
kcenon::common::VoidResult begin_transaction() override
Begin a transaction.
~postgresql_backend() override=default
Destructor - ensures proper cleanup.
std::string sanitize_error(const std::string &error_message) const
Remove password from an error message that may contain the connection string.
kcenon::common::Result< uint64_t > execute_batch(const std::vector< std::string > &queries)
Execute multiple queries in a single transaction (batch mode).
kcenon::common::VoidResult execute_query(const std::string &query_string) override
Execute a general SQL query (DDL, DML)
std::map< std::string, std::string > connection_info() const override
Get backend-specific connection information.
std::string build_connection_string(const core::connection_config &config) const
Convert connection_config to PostgreSQL connection string.
kcenon::common::VoidResult commit_transaction() override
Commit the current transaction.
kcenon::common::VoidResult do_initialize(const core::connection_config &config)
Database-specific initialization logic.
kcenon::common::VoidResult rollback_transaction() override
Rollback the current transaction.
kcenon::common::VoidResult execute_prepared(const std::string &query, const std::vector< core::database_value > &params) override
Execute a parameterized DML/DDL query (prepared statement)
kcenon::common::VoidResult do_shutdown()
Database-specific shutdown logic.
std::string last_error() const override
Get last error message from backend.
std::string build_safe_connection_string(const core::connection_config &config) const
Build a connection string with password masked for safe logging.
bool in_transaction() const override
Check if backend is currently in a transaction.
std::atomic< bool > in_transaction_
Transaction state.
core::connection_config connection_config_
Cached connection config.
kcenon::common::Result< core::database_result > select_prepared(const std::string &query, const std::vector< core::database_value > &params) override
Execute a parameterized SELECT query (prepared statement)
void * connection_
PostgreSQL connection (PGconn* or pqxx::connection*)
kcenon::common::Result< core::database_result > select_query(const std::string &query_string) override
Execute a SELECT query.
std::string last_error_
Last error message.
CRTP template base class for database backends.
database_types
Represents various database backends or modes.
@ postgres
Indicates a PostgreSQL database.
Configuration for database connection.