Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
unified_database_system.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
71#pragma once
72
73#include "core/configuration.h"
74
75#include <memory>
76#include <string>
77#include <vector>
78#include <map>
79#include <future>
80#include <chrono>
81#include <functional>
82#include <optional>
83
84// Use unified Result<T> implementation
85#include "../core/result.h"
86
87// Include query builder
88#include "../query_builder.h"
89
90namespace database::integrated {
91
92// Forward declarations
93class database_coordinator;
94class transaction;
95
99using row_data = std::map<std::string, std::string>;
100
105 std::vector<row_data> rows;
106 size_t affected_rows{0};
107 std::chrono::microseconds execution_time{0};
108
109 bool empty() const { return rows.empty(); }
110 size_t size() const { return rows.size(); }
111
112 // Convenience accessors
113 const row_data& operator[](size_t index) const { return rows.at(index); }
114 row_data& operator[](size_t index) { return rows.at(index); }
115
116 auto begin() { return rows.begin(); }
117 auto end() { return rows.end(); }
118 auto begin() const { return rows.begin(); }
119 auto end() const { return rows.end(); }
120};
121
126 // Query statistics
127 size_t total_queries{0};
129 size_t failed_queries{0};
130 size_t slow_queries{0};
131
132 // Latency statistics
133 std::chrono::microseconds average_latency{0};
134 std::chrono::microseconds min_latency{0};
135 std::chrono::microseconds max_latency{0};
136 std::chrono::microseconds p95_latency{0};
137 std::chrono::microseconds p99_latency{0};
138
139 // Connection pool statistics
140 size_t pool_size{0};
144
145 // Throughput
147 std::chrono::steady_clock::time_point measurement_start;
148
149 // Transaction statistics
153};
154
158enum class health_status {
159 healthy, // All systems operational
160 degraded, // Some issues, but operational
161 critical, // Major issues, limited functionality
162 failed // System not operational
163};
164
170 bool is_connected{false};
171 bool logger_healthy{false};
172 bool monitor_healthy{false};
175
177 std::vector<std::string> issues;
178 std::chrono::steady_clock::time_point last_check;
179};
180
200 std::optional<std::string> value;
201
202 // Implicit conversions for convenience with null safety
203 query_param(const std::string& v) : value(v) {}
204 query_param(std::string&& v) : value(std::move(v)) {}
205 query_param(const char* v) : value(v ? std::optional<std::string>(v) : std::nullopt) {}
206 query_param(std::nullptr_t) : value(std::nullopt) {}
207 query_param(int v) : value(std::to_string(v)) {}
208 query_param(long v) : value(std::to_string(v)) {}
209 query_param(long long v) : value(std::to_string(v)) {}
210 query_param(unsigned int v) : value(std::to_string(v)) {}
211 query_param(unsigned long v) : value(std::to_string(v)) {}
212 query_param(unsigned long long v) : value(std::to_string(v)) {}
213 query_param(double v) : value(std::to_string(v)) {}
214 query_param(float v) : value(std::to_string(v)) {}
215 query_param(bool v) : value(v ? "true" : "false") {}
216
221 bool is_null() const noexcept { return !value.has_value(); }
222
228 const std::string& get_value() const noexcept {
229 static const std::string empty_string;
230 return value.has_value() ? *value : empty_string;
231 }
232
237 std::string to_sql_string() const {
238 return value.has_value() ? *value : "NULL";
239 }
240};
241
246public:
247 virtual ~transaction() = default;
248
255 virtual kcenon::common::Result<query_result> execute(
256 const std::string& query,
257 const std::vector<query_param>& params = {}) = 0;
258
263 virtual kcenon::common::VoidResult commit() = 0;
264
269 virtual kcenon::common::VoidResult rollback() = 0;
270
275 virtual bool is_active() const = 0;
276};
277
289public:
293 class builder {
294 public:
295 builder();
296
301
305 builder& set_connection_string(const std::string& conn_str);
306
312 builder& set_pool_size(size_t min_size, size_t max_size);
313
319 builder& enable_logging(db_log_level level, const std::string& log_dir = "./logs");
320
325 builder& enable_monitoring(bool enable = true);
326
331 builder& enable_async(size_t worker_threads = 4);
332
337 builder& set_slow_query_threshold(std::chrono::milliseconds threshold);
338
343 kcenon::common::Result<std::unique_ptr<unified_database_system>> build();
344
345 private:
348 };
349
353 static builder create_builder();
354
355 // Constructors and destructor
356
368
373 explicit unified_database_system(const unified_db_config& config);
374
379
380 // Disable copy, enable move
385
386 // Connection management
387
397 kcenon::common::VoidResult connect(const std::string& connection_string);
398
405 kcenon::common::VoidResult connect(backend_type backend, const std::string& connection_string);
406
412
417 bool is_connected() const;
418
419 // Query execution (synchronous)
420
431 const std::string& query,
432 const std::vector<query_param>& params = {});
433
446 kcenon::common::Result<query_result> select(
447 const std::string& query,
448 const std::vector<query_param>& params = {});
449
462 kcenon::common::Result<size_t> insert(
463 const std::string& query,
464 const std::vector<query_param>& params = {});
465
478 kcenon::common::Result<size_t> update(
479 const std::string& query,
480 const std::vector<query_param>& params = {});
481
494 kcenon::common::Result<size_t> remove(
495 const std::string& query,
496 const std::vector<query_param>& params = {});
497
498 // Query execution (asynchronous)
499
511 std::future<kcenon::common::Result<query_result>> execute_async(
512 const std::string& query,
513 const std::vector<query_param>& params = {});
514
522 std::future<kcenon::common::Result<query_result>> execute_async_priority(
523 const std::string& query,
524 int priority,
525 const std::vector<query_param>& params = {});
526
527 // Transaction management
528
541 kcenon::common::Result<std::unique_ptr<transaction>> begin_transaction();
542
550 kcenon::common::VoidResult execute_transaction(
551 const std::vector<std::string>& queries);
552
565 template<typename Func>
566 kcenon::common::Result<typename std::invoke_result_t<Func, transaction&>> in_transaction(Func&& func);
567
568 // Query builder integration
569
585
586 // Monitoring and health
587
593
599
603 void reset_metrics();
604
605 // Configuration access
606
611 const unified_db_config& get_config() const;
612
618
623 struct pool_stats {
629 };
630 pool_stats get_pool_stats() const;
631
632private:
633 // PIMPL idiom for ABI stability
634 class impl;
635 std::unique_ptr<impl> pimpl_;
636};
637
642
647inline std::unique_ptr<unified_database_system> create_database() {
648 return std::make_unique<unified_database_system>();
649}
650
657inline kcenon::common::Result<std::unique_ptr<unified_database_system>> create_database(
658 backend_type backend,
659 const std::string& connection_string) {
660
662 .set_backend(backend)
663 .set_connection_string(connection_string)
664 .build();
665}
666
667} // namespace database::integrated
Transaction interface for ACID operations.
virtual kcenon::common::Result< query_result > execute(const std::string &query, const std::vector< query_param > &params={})=0
Execute a query within the transaction.
virtual kcenon::common::VoidResult commit()=0
Commit the transaction.
virtual kcenon::common::VoidResult rollback()=0
Rollback the transaction.
virtual bool is_active() const =0
Check if transaction is active.
builder & enable_monitoring(bool enable=true)
Enable monitoring and metrics collection.
builder & set_connection_string(const std::string &conn_str)
Set the connection string.
builder & set_pool_size(size_t min_size, size_t max_size)
Set connection pool size.
builder & enable_async(size_t worker_threads=4)
Enable async operations.
builder & set_slow_query_threshold(std::chrono::milliseconds threshold)
Set slow query threshold.
kcenon::common::Result< std::unique_ptr< unified_database_system > > build()
Build and return the configured database system.
builder & enable_logging(db_log_level level, const std::string &log_dir="./logs")
Enable logging.
builder & set_backend(backend_type type)
Set the database backend type.
const unified_db_config & get_config() const
Get current configuration.
unified_database_system(const unified_database_system &)=delete
~unified_database_system()
Destructor - automatically disconnects and cleans up.
kcenon::common::Result< std::unique_ptr< transaction > > begin_transaction()
kcenon::common::Result< typename std::invoke_result_t< Func, transaction & > > in_transaction(Func &&func)
std::future< kcenon::common::Result< query_result > > execute_async(const std::string &query, const std::vector< query_param > &params={})
backend_type get_backend_type() const
Get database backend type.
database_metrics get_metrics() const
Get current performance metrics.
kcenon::common::Result< size_t > update(const std::string &query, const std::vector< query_param > &params={})
Execute an UPDATE query.
kcenon::common::Result< query_result > execute(const std::string &query, const std::vector< query_param > &params={})
health_check check_health() const
Perform health check.
kcenon::common::VoidResult execute_transaction(const std::vector< std::string > &queries)
Execute multiple queries in a transaction.
kcenon::common::VoidResult connect(const std::string &connection_string)
Connect to database.
static builder create_builder()
Create a builder for custom configuration.
kcenon::common::Result< size_t > insert(const std::string &query, const std::vector< query_param > &params={})
Execute an INSERT query.
kcenon::common::Result< query_result > select(const std::string &query, const std::vector< query_param > &params={})
Execute a SELECT query.
kcenon::common::Result< size_t > remove(const std::string &query, const std::vector< query_param > &params={})
Execute a DELETE query.
unified_database_system()
Default constructor (zero-config)
kcenon::common::VoidResult disconnect()
Disconnect from database.
std::future< kcenon::common::Result< query_result > > execute_async_priority(const std::string &query, int priority, const std::vector< query_param > &params={})
Execute a SQL query asynchronously with priority.
unified_database_system & operator=(const unified_database_system &)=delete
unified_database_system(unified_database_system &&) noexcept
bool is_connected() const
Check if connected to database.
Universal query builder that adapts to different database types.
Unified configuration for integrated database system.
db_log_level
Database logging level enumeration.
@ critical
Critical failures requiring immediate attention.
std::unique_ptr< unified_database_system > create_database()
Create a database with zero configuration.
std::map< std::string, std::string > row_data
Database row representation.
health_status
Database health status.
backend_type
Database backend type enumeration.
kcenon::common::Result< T > Result
Primary Result type - use this for all database operations.
Definition result.h:30
kcenon::common::VoidResult VoidResult
Primary VoidResult type - use this for void operations.
Definition result.h:33
constexpr const char * to_string(database_types type) noexcept
Converts database_types enum to string representation.
Result<T> type for database_system error handling.
std::chrono::steady_clock::time_point measurement_start
std::chrono::steady_clock::time_point last_check
std::string to_sql_string() const
Get the value for SQL generation.
bool is_null() const noexcept
Check if this parameter represents a NULL value.
const std::string & get_value() const noexcept
Get the string value (returns empty string for null)
const row_data & operator[](size_t index) const