|
Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
|
Abstract base class for database backends. More...
#include <database_backend.h>


Public Member Functions | |
| virtual | ~database_backend ()=default |
| virtual database_types | type () const =0 |
| Get the database type of this backend. | |
| virtual kcenon::common::VoidResult | initialize (const connection_config &config)=0 |
| Initialize the database backend. | |
| virtual kcenon::common::VoidResult | shutdown ()=0 |
| Shutdown the database backend gracefully. | |
| virtual bool | is_initialized () const =0 |
| Check if backend is initialized and ready. | |
| virtual kcenon::common::Result< database_result > | select_query (const std::string &query_string)=0 |
| Execute a SELECT query. | |
| virtual kcenon::common::VoidResult | execute_query (const std::string &query_string)=0 |
| Execute a general SQL query (DDL, DML) | |
| virtual kcenon::common::Result< database_result > | select_prepared (const std::string &query, const std::vector< database_value > ¶ms) |
| Execute a parameterized SELECT query (prepared statement) | |
| virtual kcenon::common::VoidResult | execute_prepared (const std::string &query, const std::vector< database_value > ¶ms) |
| Execute a parameterized DML/DDL query (prepared statement) | |
| virtual kcenon::common::VoidResult | begin_transaction ()=0 |
| Begin a transaction. | |
| virtual kcenon::common::VoidResult | commit_transaction ()=0 |
| Commit the current transaction. | |
| virtual kcenon::common::VoidResult | rollback_transaction ()=0 |
| Rollback the current transaction. | |
| virtual bool | in_transaction () const =0 |
| Check if backend is currently in a transaction. | |
| virtual std::string | last_error () const =0 |
| Get last error message from backend. | |
| virtual std::map< std::string, std::string > | connection_info () const =0 |
| Get backend-specific connection information. | |
Static Protected Member Functions | |
| static std::string | expand_params (const std::string &query, const std::vector< database_value > ¶ms) |
| Expand positional parameters into a SQL string (fallback) | |
Static Private Member Functions | |
| static std::string | value_to_sql (const database_value &val) |
Abstract base class for database backends.
All database backends (PostgreSQL, SQLite, MongoDB, Redis) must implement this interface. This enables runtime polymorphism and eliminates conditional compilation.
Design Pattern:
Thread Safety:
Example Usage:
Definition at line 98 of file database_backend.h.
|
virtualdefault |
|
pure virtual |
Begin a transaction.
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Commit the current transaction.
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Get backend-specific connection information.
Example keys: "server_version", "connection_id", "protocol_version"
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
inlinenodiscardvirtual |
Execute a parameterized DML/DDL query (prepared statement)
| query | SQL with positional placeholders ($1, $2, ... or ?, ?, ...) |
| params | Parameter values to bind |
Reimplemented in database::backends::postgresql_backend, and database::backends::sqlite_backend.
Definition at line 187 of file database_backend.h.
References execute_query(), and expand_params().

|
pure virtual |
Execute a general SQL query (DDL, DML)
| query_string | SQL statement |
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
Referenced by execute_prepared().

|
inlinestaticprotected |
Expand positional parameters into a SQL string (fallback)
Substitutes $1, $2, ... or ?, ?, ... placeholders with stringified parameter values. Used by the default select_prepared/execute_prepared implementations. Backends with native prepared statements should override the virtual methods instead of relying on this.
Definition at line 245 of file database_backend.h.
References value_to_sql().
Referenced by execute_prepared(), and select_prepared().


|
pure virtual |
Check if backend is currently in a transaction.
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Initialize the database backend.
| config | Connection configuration |
This method should:
Implemented in database::core::backend_base< Derived, Type >, database::core::backend_base< mongodb_backend, database_types::mongodb >, database::core::backend_base< postgresql_backend, database_types::postgres >, database::core::backend_base< redis_backend, database_types::redis >, database::core::backend_base< sqlite_backend, database_types::sqlite >, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Check if backend is initialized and ready.
Implemented in database::core::backend_base< Derived, Type >, database::core::backend_base< mongodb_backend, database_types::mongodb >, database::core::backend_base< postgresql_backend, database_types::postgres >, database::core::backend_base< redis_backend, database_types::redis >, database::core::backend_base< sqlite_backend, database_types::sqlite >, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Get last error message from backend.
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Rollback the current transaction.
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
inlinenodiscardvirtual |
Execute a parameterized SELECT query (prepared statement)
Parameters are bound at the wire-protocol level, providing stronger SQL injection protection than string escaping. Backends that support native prepared statements (PostgreSQL, SQLite) should override this.
| query | SQL with positional placeholders ($1, $2, ... or ?, ?, ...) |
| params | Parameter values to bind |
Reimplemented in database::backends::postgresql_backend, and database::backends::sqlite_backend.
Definition at line 169 of file database_backend.h.
References expand_params(), and select_query().

|
pure virtual |
Execute a SELECT query.
| query_string | SQL SELECT statement |
Implemented in database::backends::mongodb_backend, database::backends::postgresql_backend, database::backends::redis_backend, database::backends::sqlite_backend, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
Referenced by database::query_builder::execute(), and select_prepared().

|
pure virtual |
Shutdown the database backend gracefully.
This method should:
Implemented in database::core::backend_base< Derived, Type >, database::core::backend_base< mongodb_backend, database_types::mongodb >, database::core::backend_base< postgresql_backend, database_types::postgres >, database::core::backend_base< redis_backend, database_types::redis >, database::core::backend_base< sqlite_backend, database_types::sqlite >, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
pure virtual |
Get the database type of this backend.
Implemented in database::core::backend_base< Derived, Type >, database::core::backend_base< mongodb_backend, database_types::mongodb >, database::core::backend_base< postgresql_backend, database_types::postgres >, database::core::backend_base< redis_backend, database_types::redis >, database::core::backend_base< sqlite_backend, database_types::sqlite >, database::postgres_manager, database::testing::mock_backend, and database::testing::mock_database.
|
inlinestaticprivate |
Definition at line 273 of file database_backend.h.
Referenced by expand_params().
