28using namespace std::chrono;
31 std::cout <<
"\n" << std::string(60,
'=') <<
"\n";
32 std::cout << title <<
"\n";
33 std::cout << std::string(60,
'=') <<
"\n\n";
42 std::cout <<
"Submitting async query...\n";
44 auto start = steady_clock::now();
49 std::cout <<
"Query submitted, continuing with other work...\n";
52 std::this_thread::sleep_for(milliseconds(10));
53 std::cout <<
"Other work completed\n";
56 std::cout <<
"Waiting for query result...\n";
57 auto result = future.get();
59 auto duration = duration_cast<milliseconds>(steady_clock::now() - start);
62 std::cout <<
"β
Query succeeded\n";
63 std::cout <<
" Rows: " << result.value().size() <<
"\n";
64 std::cout <<
" Duration: " << duration.count() <<
" ms\n";
66 std::cout <<
"β Query failed: " << result.error().message <<
"\n";
76 const int num_queries = 5;
77 std::vector<std::future<kcenon::common::Result<query_result>>> futures;
79 std::cout <<
"Submitting " << num_queries <<
" concurrent queries...\n";
81 auto start = steady_clock::now();
84 for (
int i = 0; i < num_queries; ++i) {
85 std::string query =
"SELECT " + std::to_string(i) +
" as query_id";
89 std::cout <<
"All queries submitted\n";
90 std::cout <<
"Waiting for results...\n";
96 for (
size_t i = 0; i < futures.size(); ++i) {
97 auto result = futures[i].get();
101 std::cout <<
" Query " << (i + 1) <<
": β
Success\n";
104 std::cout <<
" Query " << (i + 1) <<
": β Failed - "
105 << result.error().message <<
"\n";
109 auto duration = duration_cast<milliseconds>(steady_clock::now() - start);
111 std::cout <<
"\nResults:\n";
112 std::cout <<
" Succeeded: " << succeeded <<
"\n";
113 std::cout <<
" Failed: " <<
failed <<
"\n";
114 std::cout <<
" Total Duration: " << duration.count() <<
" ms\n";
115 std::cout <<
" Avg Duration: " << (duration.count() / num_queries) <<
" ms/query\n";
124 std::cout <<
"Submitting query with 2 second timeout...\n";
129 auto status = future.wait_for(seconds(2));
131 if (status == std::future_status::ready) {
132 std::cout <<
"β
Query completed within timeout\n";
133 auto result = future.get();
134 if (result.is_ok()) {
135 std::cout <<
" Result: Success\n";
137 std::cout <<
" Result: " << result.error().message <<
"\n";
139 }
else if (status == std::future_status::timeout) {
140 std::cout <<
"β±οΈ Query timed out (still executing in background)\n";
142 std::cout <<
"βΈοΈ Query deferred\n";
155 std::future<kcenon::common::Result<query_result>> future;
158 std::vector<QueryTask> tasks;
161 tasks.push_back({
"User count",
"SELECT COUNT(*) FROM users", {}});
162 tasks.push_back({
"Active sessions",
"SELECT COUNT(*) FROM sessions WHERE active = true", {}});
163 tasks.push_back({
"Recent orders",
"SELECT COUNT(*) FROM orders WHERE created_at > NOW() - INTERVAL '1 hour'", {}});
164 tasks.push_back({
"System status",
"SELECT 1", {}});
166 std::cout <<
"Submitting batch of " << tasks.size() <<
" queries...\n";
168 auto start = steady_clock::now();
171 for (
auto& task : tasks) {
175 std::cout <<
"All queries submitted, processing results...\n\n";
178 for (
auto& task : tasks) {
179 std::cout <<
" " << std::setw(20) << std::left << task.name <<
": ";
181 auto result = task.future.get();
183 if (result.is_ok()) {
184 std::cout <<
"β
" << result.value().size() <<
" rows\n";
186 std::cout <<
"β " << result.error().message <<
"\n";
190 auto duration = duration_cast<milliseconds>(steady_clock::now() - start);
191 std::cout <<
"\nTotal Duration: " << duration.count() <<
" ms\n";
198 print_header(
"Example 5: Error Handling in Async Context");
200 std::cout <<
"Submitting intentionally invalid query...\n";
203 auto future = db.
execute_async(
"SELECT * FROM nonexistent_table");
205 std::cout <<
"Query submitted, waiting for result...\n";
207 auto result = future.get();
209 if (result.is_ok()) {
210 std::cout <<
"β
Query succeeded (unexpected)\n";
212 std::cout <<
"β Query failed (expected):\n";
213 std::cout <<
" Error Code: " << result.error().code <<
"\n";
214 std::cout <<
" Error Message: " << result.error().message <<
"\n";
218int main(
int argc,
char* argv[]) {
219 print_header(
"Unified Database System - Async Queries Example");
222 std::cout <<
"Creating database instance with async support...\n";
231 if (db_result.is_err()) {
232 std::cerr <<
"Failed to create database instance: " << db_result.error().message <<
"\n";
235 auto db = std::move(db_result.value());
237 std::cout <<
"β
Database instance created with async support\n";
241 std::string conn_string = argv[1];
242 std::cout <<
"Connecting to database...\n";
244 auto connect_result = db->connect(conn_string);
246 if (connect_result.is_ok()) {
247 std::cout <<
"β
Connected successfully\n";
258 auto metrics = db->get_metrics();
259 std::cout <<
"Total Queries: " << metrics.total_queries <<
"\n";
260 std::cout <<
"Successful: " << metrics.successful_queries <<
"\n";
261 std::cout <<
"Failed: " << metrics.failed_queries <<
"\n";
262 std::cout <<
"Avg Latency: " << std::fixed << std::setprecision(3)
263 << (metrics.average_latency.count() / 1000.0) <<
" ms\n";
267 std::cout <<
"\nβ
Disconnected\n";
270 std::cout <<
"β Connection failed: " << connect_result.error().message <<
"\n";
271 std::cout <<
"\nNote: This example requires a real database connection.\n";
272 std::cout <<
"Usage: " << argv[0] <<
" \"host=localhost dbname=test user=test password=test\"\n";
277 std::cout <<
"\nβ No connection string provided.\n";
278 std::cout <<
"Usage: " << argv[0] <<
" [connection_string]\n";
279 std::cout <<
"Example: " << argv[0]
280 <<
" \"host=localhost dbname=test user=test password=test\"\n";
285 std::cout <<
"β
All async query examples completed!\n\n";
void example_query_with_timeout(unified_database_system &db)
void example_concurrent_queries(unified_database_system &db)
void print_header(const std::string &title)
void example_error_handling(unified_database_system &db)
void example_single_async_query(unified_database_system &db)
void example_batch_operations(unified_database_system &db)
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.
builder & enable_async(size_t worker_threads=4)
Enable async operations.
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.
Main unified database system class.
std::future< kcenon::common::Result< query_result > > execute_async(const std::string &query, const std::vector< query_param > ¶ms={})
static builder create_builder()
Create a builder for custom configuration.
Zero-configuration database system with integrated adapters (Phase 6)