Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
database::database_manager Class Reference

Manages database connections and operations. More...

#include <database_manager.h>

Collaboration diagram for database::database_manager:
Collaboration graph

Public Member Functions

 database_manager (std::shared_ptr< database_context > context)
 
virtual ~database_manager ()
 Destructor.
 
bool set_mode (const database_types &database_type)
 Sets the database mode (type) for the manager.
 
database_types database_type (void)
 Retrieves the current database type used by the manager.
 
query_builder create_query_builder ()
 Creates a query builder for the current database type.
 
query_builder create_query_builder (database_types db_type)
 Creates a query builder for a specific database type.
 
kcenon::common::VoidResult connect_result (const std::string &connect_string)
 Result-based wrapper for connect().
 
kcenon::common::VoidResult disconnect_result ()
 Result-based wrapper for disconnect().
 
kcenon::common::VoidResult create_query_result (const std::string &query_string)
 Result-based wrapper for create_query().
 
kcenon::common::Result< core::database_resultselect_query_result (const std::string &query_string)
 Execute a SELECT query and return results.
 
kcenon::common::VoidResult execute_query_result (const std::string &query_string)
 Result-based wrapper for execute_query().
 
kcenon::common::VoidResult begin_transaction ()
 Begin a database transaction.
 
kcenon::common::VoidResult commit_transaction ()
 Commit the current transaction.
 
kcenon::common::VoidResult rollback_transaction ()
 Rollback the current transaction.
 
bool in_transaction () const
 Check if currently in a transaction.
 
std::string last_error () const
 Get last error message from the backend.
 
std::map< std::string, std::string > connection_info () const
 Get connection information for monitoring.
 

Private Attributes

bool connected_
 Indicates whether a database connection is active.
 
std::unique_ptr< core::database_backenddatabase_
 The underlying database backend.
 
std::shared_ptr< database_contextcontext_
 Dependency injection context.
 
std::string connect_string_
 Cached connection string for initialization.
 

Detailed Description

Manages database connections and operations.

The database_manager class provides a high-level interface for controlling database connections and executing queries. It wraps a database_backend instance and exposes methods such as connect, disconnect, create_query, execute_query, etc.

Note
As of Issue #287, this class uses database_backend internally instead of the deprecated database_base interface. The public API remains backward compatible, but also provides new Result-based methods.
As of Sprint 2, this class uses dependency injection pattern. Access via constructor with database_context parameter.

Definition at line 37 of file database_manager.h.

Constructor & Destructor Documentation

◆ database_manager()

database::database_manager::database_manager ( std::shared_ptr< database_context > context)
explicit
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 20 of file database_manager.cpp.

21 : connected_(false)
22 , database_(nullptr)
23 , context_(std::move(context))
24 {
25 // DI constructor - recommended for new code
26 if (!context_)
27 {
28 // Fallback to default context if nullptr passed
29 context_ = std::make_shared<database_context>();
30 }
31 }
std::unique_ptr< core::database_backend > database_
The underlying database backend.
std::shared_ptr< database_context > context_
Dependency injection context.
bool connected_
Indicates whether a database connection is active.

References context_.

◆ ~database_manager()

database::database_manager::~database_manager ( )
virtual

Destructor.

Cleans up resources and disconnects from the database if an active connection exists.

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 33 of file database_manager.cpp.

33{}

Member Function Documentation

◆ begin_transaction()

kcenon::common::VoidResult database::database_manager::begin_transaction ( )

Begin a database transaction.

Returns
VoidResult indicating success or failure.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 156 of file database_manager.cpp.

157 {
158 if (!database_)
159 {
160 return kcenon::common::VoidResult(
161 kcenon::common::error_info{-1, "No database backend", "database_manager"});
162 }
163 return database_->begin_transaction();
164 }

References database_.

◆ commit_transaction()

kcenon::common::VoidResult database::database_manager::commit_transaction ( )

Commit the current transaction.

Returns
VoidResult indicating success or failure.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 166 of file database_manager.cpp.

167 {
168 if (!database_)
169 {
170 return kcenon::common::VoidResult(
171 kcenon::common::error_info{-1, "No database backend", "database_manager"});
172 }
173 return database_->commit_transaction();
174 }

References database_.

◆ connect_result()

kcenon::common::VoidResult database::database_manager::connect_result ( const std::string & connect_string)

Result-based wrapper for connect().

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 87 of file database_manager.cpp.

88 {
89 if (!database_)
90 {
91 return kcenon::common::VoidResult(
92 kcenon::common::error_info{-1, "No database backend configured", "database_manager"});
93 }
94
95 // Store connection string for potential reconnection
96 connect_string_ = connect_string;
97
98 // Use database_backend's initialize method with connection_config
99 auto config = core::connection_config::from_string(connect_string);
100 auto result = database_->initialize(config);
101
102 if (result.is_ok())
103 {
104 connected_ = true;
105 }
106 return result;
107 }
std::string connect_string_
Cached connection string for initialization.
static connection_config from_string(const std::string &connect_string)
Construct connection_config from legacy connection string.

References connect_string_, connected_, database_, and database::core::connection_config::from_string().

Here is the call graph for this function:

◆ connection_info()

std::map< std::string, std::string > database::database_manager::connection_info ( ) const

Get connection information for monitoring.

Returns
Map of connection properties.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 204 of file database_manager.cpp.

205 {
206 if (!database_)
207 {
208 return {};
209 }
210 return database_->connection_info();
211 }

References database_.

◆ create_query_builder() [1/2]

query_builder database::database_manager::create_query_builder ( )

Creates a query builder for the current database type.

Returns
A query builder configured for the current database
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 215 of file database_manager.cpp.

216 {
217 return query_builder(database_type());
218 }
database_types database_type(void)
Retrieves the current database type used by the manager.

References database_type().

Here is the call graph for this function:

◆ create_query_builder() [2/2]

query_builder database::database_manager::create_query_builder ( database_types db_type)

Creates a query builder for a specific database type.

Parameters
db_typeThe database type to create a builder for
Returns
A query builder configured for the specified database

Definition at line 220 of file database_manager.cpp.

221 {
222 return query_builder(db_type);
223 }

◆ create_query_result()

kcenon::common::VoidResult database::database_manager::create_query_result ( const std::string & query_string)

Result-based wrapper for create_query().

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 125 of file database_manager.cpp.

126 {
127 if (!database_)
128 {
129 return kcenon::common::VoidResult(
130 kcenon::common::error_info{-1, "No database backend", "database_manager"});
131 }
132 // database_backend uses execute_query for DDL/prepared statements
133 return database_->execute_query(query_string);
134 }

References database_.

◆ database_type()

database_types database::database_manager::database_type ( void )

Retrieves the current database type used by the manager.

Returns
An enum value of database_types representing the current database mode.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 77 of file database_manager.cpp.

78 {
79 if (!database_)
80 {
82 }
83
84 return database_->type();
85 }
@ none
No specific database type is set.

References database_, and database::none.

Referenced by create_query_builder(), and set_mode().

Here is the caller graph for this function:

◆ disconnect_result()

kcenon::common::VoidResult database::database_manager::disconnect_result ( )

Result-based wrapper for disconnect().

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 109 of file database_manager.cpp.

110 {
111 if (!database_)
112 {
113 return kcenon::common::VoidResult(
114 kcenon::common::error_info{-1, "No database backend", "database_manager"});
115 }
116
117 auto result = database_->shutdown();
118 if (result.is_ok())
119 {
120 connected_ = false;
121 }
122 return result;
123 }

References connected_, and database_.

◆ execute_query_result()

kcenon::common::VoidResult database::database_manager::execute_query_result ( const std::string & query_string)

Result-based wrapper for execute_query().

Parameters
query_stringThe SQL statement.
Returns
VoidResult indicating success or failure.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 146 of file database_manager.cpp.

147 {
148 if (!database_)
149 {
150 return kcenon::common::VoidResult(
151 kcenon::common::error_info{-1, "No database backend", "database_manager"});
152 }
153 return database_->execute_query(query_string);
154 }

References database_.

◆ in_transaction()

bool database::database_manager::in_transaction ( ) const

Check if currently in a transaction.

Returns
true if a transaction is active.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 186 of file database_manager.cpp.

187 {
188 if (!database_)
189 {
190 return false;
191 }
192 return database_->in_transaction();
193 }

References database_.

◆ last_error()

std::string database::database_manager::last_error ( ) const

Get last error message from the backend.

Returns
Error message string.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 195 of file database_manager.cpp.

196 {
197 if (!database_)
198 {
199 return "No database backend";
200 }
201 return database_->last_error();
202 }

References database_.

◆ rollback_transaction()

kcenon::common::VoidResult database::database_manager::rollback_transaction ( )

Rollback the current transaction.

Returns
VoidResult indicating success or failure.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 176 of file database_manager.cpp.

177 {
178 if (!database_)
179 {
180 return kcenon::common::VoidResult(
181 kcenon::common::error_info{-1, "No database backend", "database_manager"});
182 }
183 return database_->rollback_transaction();
184 }

References database_.

◆ select_query_result()

kcenon::common::Result< core::database_result > database::database_manager::select_query_result ( const std::string & query_string)

Execute a SELECT query and return results.

Parameters
query_stringThe SQL SELECT statement.
Returns
Query results, or error.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 136 of file database_manager.cpp.

137 {
138 if (!database_)
139 {
140 return kcenon::common::Result<core::database_result>(
141 kcenon::common::error_info{-1, "No database backend", "database_manager"});
142 }
143 return database_->select_query(query_string);
144 }

References database_.

◆ set_mode()

bool database::database_manager::set_mode ( const database_types & database_type)

Sets the database mode (type) for the manager.

Parameters
database_typeAn enum value of database_types that specifies the target database type (e.g., PostgreSQL, SQLite).
Returns
true on success (e.g., if a corresponding database implementation is available), false otherwise.
Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 35 of file database_manager.cpp.

36 {
37 if (connected_)
38 {
39 return false;
40 }
41
42 database_.reset();
43
44 // Create the appropriate backend directly
45 // This ensures backends are linked even when static library registration
46 // might not work due to initialization order
47 switch (database_type)
48 {
51 break;
54 break;
55#ifdef USE_MONGODB
58 break;
59#endif
60#ifdef USE_REDIS
63 break;
64#endif
65 default:
66 return false;
67 }
68
69 if (database_ == nullptr)
70 {
71 return false;
72 }
73
74 return true;
75 }
@ mongodb
Indicates a MongoDB database (future implementation).
@ sqlite
Indicates a SQLite database.
@ redis
Indicates a Redis database (future implementation).
@ postgres
Indicates a PostgreSQL database.

References connected_, database::core::backend_base< mongodb_backend, database_types::mongodb >::create(), database::core::backend_base< postgresql_backend, database_types::postgres >::create(), database::core::backend_base< redis_backend, database_types::redis >::create(), database::core::backend_base< sqlite_backend, database_types::sqlite >::create(), database_, database_type(), database::mongodb, database::postgres, database::redis, and database::sqlite.

Here is the call graph for this function:

Member Data Documentation

◆ connect_string_

std::string database::database_manager::connect_string_
private

Cached connection string for initialization.

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 176 of file database_manager.h.

Referenced by connect_result().

◆ connected_

bool database::database_manager::connected_
private

Indicates whether a database connection is active.

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 172 of file database_manager.h.

Referenced by connect_result(), disconnect_result(), and set_mode().

◆ context_

std::shared_ptr<database_context> database::database_manager::context_
private

Dependency injection context.

Examples
/home/runner/work/database_system/database_system/database/database_manager.h.

Definition at line 175 of file database_manager.h.

Referenced by database_manager().

◆ database_


The documentation for this class was generated from the following files: