Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
basic_usage.cpp File Reference

Basic usage example of unified_database_system. More...

#include "integrated/unified_database_system.h"
#include <iostream>
#include <iomanip>
Include dependency graph for basic_usage.cpp:

Go to the source code of this file.

Functions

void print_header (const std::string &title)
 
void print_health_check (const health_check &health)
 
void print_metrics (const database_metrics &metrics)
 
int main (int argc, char *argv[])
 

Detailed Description

Basic usage example of unified_database_system.

Definition in file basic_usage.cpp.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 86 of file basic_usage.cpp.

86 {
87 print_header("Unified Database System - Basic Usage Example");
88
89 // Step 1: Create database instance with zero-config
90 std::cout << "Step 1: Creating database instance...\n";
91
93 .enable_logging(db_log_level::info, "./logs")
95 .set_pool_size(2, 10)
96 .build();
97
98 if (db_result.is_err()) {
99 std::cerr << "Failed to create database instance: " << db_result.error().message << "\n";
100 return 1;
101 }
102 auto db = std::move(db_result.value());
103
104 std::cout << "✅ Database instance created\n";
105
106 // Step 2: Check initial health status
107 print_header("Step 2: Initial Health Check");
108 auto health = db->check_health();
109 print_health_check(health);
110
111 // Step 3: Connect to database (if connection string provided)
112 if (argc > 1) {
113 print_header("Step 3: Connecting to Database");
114
115 std::string conn_string = argv[1];
116 std::cout << "Connection string: " << conn_string << "\n";
117
118 auto connect_result = db->connect(conn_string);
119
120 if (connect_result.is_ok()) {
121 std::cout << "✅ Connected successfully\n";
122
123 // Step 4: Execute a simple query
124 print_header("Step 4: Executing Simple Query");
125
126 auto query_result = db->execute("SELECT 1 as test_column");
127
128 if (query_result.is_ok()) {
129 auto result = query_result.value();
130 std::cout << "✅ Query executed successfully\n";
131 std::cout << " Rows returned: " << result.size() << "\n";
132 std::cout << " Affected rows: " << result.affected_rows << "\n";
133
134 if (!result.empty()) {
135 std::cout << "\n Result:\n";
136 for (size_t i = 0; i < result.size(); ++i) {
137 const auto& row = result[i];
138 std::cout << " Row " << (i + 1) << ": ";
139 for (const auto& [col, val] : row) {
140 std::cout << col << "=" << val << " ";
141 }
142 std::cout << "\n";
143 }
144 }
145
146 } else {
147 std::cout << "❌ Query failed: " << query_result.error().message << "\n";
148 }
149
150 // Step 5: Check metrics
151 print_header("Step 5: Database Metrics");
152 auto metrics = db->get_metrics();
153 print_metrics(metrics);
154
155 // Step 6: Final health check
156 print_header("Step 6: Final Health Check");
157 health = db->check_health();
158 print_health_check(health);
159
160 // Step 7: Disconnect
161 print_header("Step 7: Disconnecting");
162 auto disconnect_result = db->disconnect();
163 if (disconnect_result.is_ok()) {
164 std::cout << "✅ Disconnected successfully\n";
165 }
166
167 } else {
168 std::cout << "❌ Connection failed: " << connect_result.error().message << "\n";
169 std::cout << "\nNote: This is expected if PostgreSQL is not running.\n";
170 std::cout << "The example demonstrates the API even without a real database.\n";
171 }
172
173 } else {
174 std::cout << "\nℹ️ No connection string provided.\n";
175 std::cout << " Usage: " << argv[0] << " [connection_string]\n";
176 std::cout << " Example: " << argv[0]
177 << " \"host=localhost dbname=test user=test password=test\"\n";
178 std::cout << "\n The program will continue to demonstrate the API.\n";
179 }
180
181 // Step 8: Show final metrics (even without connection)
182 print_header("Final Metrics");
183 auto metrics = db->get_metrics();
184 print_metrics(metrics);
185
186 print_header("Example Complete");
187 std::cout << "✅ All steps completed successfully!\n\n";
188
189 return 0;
190}
builder & enable_monitoring(bool enable=true)
Enable monitoring and metrics collection.
builder & set_pool_size(size_t min_size, size_t max_size)
Set connection pool size.
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.
static builder create_builder()
Create a builder for custom configuration.
void print_metrics(const database_metrics &metrics)
void print_health_check(const health_check &health)
void print_header(const std::string &title)

References database::integrated::unified_database_system::builder::build(), database::integrated::unified_database_system::create_builder(), database::integrated::unified_database_system::builder::enable_logging(), database::integrated::unified_database_system::builder::enable_monitoring(), print_header(), print_health_check(), print_metrics(), database::integrated::unified_database_system::builder::set_pool_size(), and database::integrated::query_result::size().

Here is the call graph for this function:

◆ print_header()

void print_header ( const std::string & title)

Definition at line 29 of file basic_usage.cpp.

29 {
30 std::cout << "\n" << std::string(60, '=') << "\n";
31 std::cout << title << "\n";
32 std::cout << std::string(60, '=') << "\n\n";
33}

Referenced by main().

Here is the caller graph for this function:

◆ print_health_check()

void print_health_check ( const health_check & health)
Examples
integrated/basic_usage.cpp, and integrated/monitoring.cpp.

Definition at line 35 of file basic_usage.cpp.

35 {
36 std::cout << "Health Status:\n";
37 std::cout << " Overall: ";
38
39 switch (health.status) {
40 case health_status::healthy:
41 std::cout << "✅ Healthy\n";
42 break;
43 case health_status::degraded:
44 std::cout << "⚠️ Degraded\n";
45 break;
46 case health_status::failed:
47 std::cout << "❌ Failed\n";
48 break;
49 case health_status::critical:
50 std::cout << "🔥 Critical\n";
51 break;
52 default:
53 std::cout << "❓ Unknown\n";
54 }
55
56 std::cout << " Connected: " << (health.is_connected ? "Yes" : "No") << "\n";
57 std::cout << " Logger: " << (health.logger_healthy ? "✓" : "✗") << "\n";
58 std::cout << " Monitor: " << (health.monitor_healthy ? "✓" : "✗") << "\n";
59 std::cout << " Thread Pool: " << (health.thread_pool_healthy ? "✓" : "✗") << "\n";
60 std::cout << " Pool Utilization: "
61 << std::fixed << std::setprecision(1)
62 << (health.connection_pool_utilization * 100) << "%\n";
63
64 if (!health.issues.empty()) {
65 std::cout << "\n Issues:\n";
66 for (const auto& issue : health.issues) {
67 std::cout << " - " << issue << "\n";
68 }
69 }
70}

References database::integrated::health_check::connection_pool_utilization, database::integrated::health_check::is_connected, database::integrated::health_check::issues, database::integrated::health_check::logger_healthy, database::integrated::health_check::monitor_healthy, database::integrated::health_check::status, and database::integrated::health_check::thread_pool_healthy.

Referenced by main().

Here is the caller graph for this function:

◆ print_metrics()

void print_metrics ( const database_metrics & metrics)
Examples
integrated/basic_usage.cpp, and integrated/monitoring.cpp.

Definition at line 72 of file basic_usage.cpp.

72 {
73 std::cout << "Database Metrics:\n";
74 std::cout << " Total Queries: " << metrics.total_queries << "\n";
75 std::cout << " Successful: " << metrics.successful_queries << "\n";
76 std::cout << " Failed: " << metrics.failed_queries << "\n";
77 std::cout << " Queries/sec: " << std::fixed << std::setprecision(2)
78 << metrics.queries_per_second << "\n";
79 std::cout << " Avg Latency: " << std::fixed << std::setprecision(3)
80 << (metrics.average_latency.count() / 1000.0) << " ms\n";
81 std::cout << " Pool Size: " << metrics.pool_size << "\n";
82 std::cout << " Active Connections: " << metrics.active_connections << "\n";
83 std::cout << " Idle Connections: " << metrics.idle_connections << "\n";
84}

References database::integrated::database_metrics::active_connections, database::integrated::database_metrics::average_latency, database::integrated::database_metrics::failed_queries, database::integrated::database_metrics::idle_connections, database::integrated::database_metrics::pool_size, database::integrated::database_metrics::queries_per_second, database::integrated::database_metrics::successful_queries, and database::integrated::database_metrics::total_queries.

Referenced by main().

Here is the caller graph for this function: