31 std::cout <<
"=== Database System - Basic Usage Example ===" << std::endl;
34 std::cout <<
"\n1. Database Manager Setup:" << std::endl;
36 auto context = std::make_shared<database_context>();
37 auto db_manager = std::make_shared<database_manager>(context);
40 db_manager->set_mode(database_types::postgres);
41 std::cout <<
"Database type set to: PostgreSQL" << std::endl;
44 std::string connection_string =
"host=localhost port=5432 dbname=testdb user=testuser password=testpass";
45 std::cout <<
"Connection string configured" << std::endl;
48 std::cout <<
"Note: This example demonstrates API usage. Actual database connection requires PostgreSQL server." << std::endl;
51 std::cout <<
"\n2. Connection Management:" << std::endl;
53 std::cout <<
"Attempting to connect to database..." << std::endl;
54 auto connect_result = db_manager->connect_result(connection_string);
56 if (connect_result.is_ok()) {
57 std::cout <<
"✓ Successfully connected to database" << std::endl;
58 std::cout <<
"Connection status: Connected" << std::endl;
59 std::cout <<
"Database type: " <<
static_cast<int>(db_manager->database_type()) << std::endl;
62 std::cout <<
"\n3. Table Operations:" << std::endl;
65 std::string create_table_sql = R
"(
66 CREATE TABLE IF NOT EXISTS users (
67 id SERIAL PRIMARY KEY,
68 username VARCHAR(50) UNIQUE NOT NULL,
69 email VARCHAR(100) UNIQUE NOT NULL,
70 age INTEGER CHECK (age >= 0),
71 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
72 is_active BOOLEAN DEFAULT TRUE
76 std::cout << "Creating users table..." << std::endl;
77 auto table_result = db_manager->create_query_result(create_table_sql);
78 if (table_result.is_ok()) {
79 std::cout <<
"✓ Users table created successfully" << std::endl;
81 std::cout <<
"✗ Failed to create users table" << std::endl;
85 std::cout <<
"\n4. Data Insertion:" << std::endl;
87 std::vector<std::string> insert_queries = {
88 "INSERT INTO users (username, email, age) VALUES ('john_doe', 'john@example.com', 30)",
89 "INSERT INTO users (username, email, age) VALUES ('jane_smith', 'jane@example.com', 25)",
90 "INSERT INTO users (username, email, age) VALUES ('bob_wilson', 'bob@example.com', 35)",
91 "INSERT INTO users (username, email, age, is_active) VALUES ('alice_brown', 'alice@example.com', 28, FALSE)"
94 for (
const auto& query : insert_queries) {
95 auto insert_result = db_manager->execute_query_result(query);
96 if (insert_result.is_ok()) {
97 std::cout <<
"✓ User inserted successfully" << std::endl;
99 std::cout <<
"✗ Failed to insert user (may already exist)" << std::endl;
104 std::cout <<
"\n5. Data Selection:" << std::endl;
106 std::string select_all =
"SELECT id, username, email, age, is_active FROM users ORDER BY id";
107 auto all_users_result = db_manager->select_query_result(select_all);
109 if (all_users_result.is_ok() && !all_users_result.value().empty()) {
110 const auto& all_users = all_users_result.value();
111 std::cout <<
"✓ All users retrieved (" << all_users.size() <<
" rows):" << std::endl;
112 for (
const auto& row : all_users) {
113 std::cout <<
" User: ";
114 for (
const auto& [key, value] : row) {
115 std::cout << key <<
"=";
116 std::visit([](
const auto& v) { std::cout << v; }, value);
119 std::cout << std::endl;
122 std::cout <<
"✗ Failed to retrieve users" << std::endl;
123 if (all_users_result.is_err()) {
124 std::cout <<
" Error: " << all_users_result.error().message << std::endl;
129 std::string select_user =
"SELECT username, email, age FROM users WHERE username = 'john_doe'";
130 auto john_result = db_manager->select_query_result(select_user);
132 if (john_result.is_ok() && !john_result.value().empty()) {
133 const auto& john_data = john_result.value();
134 std::cout <<
"✓ John's data retrieved:" << std::endl;
135 for (
const auto& row : john_data) {
136 for (
const auto& [key, value] : row) {
137 std::cout <<
" " << key <<
": ";
138 std::visit([](
const auto& v) { std::cout << v; }, value);
139 std::cout << std::endl;
143 std::cout <<
"✗ John's data not found" << std::endl;
147 std::cout <<
"\n6. Data Updates:" << std::endl;
149 std::string update_query =
"UPDATE users SET age = 31 WHERE username = 'john_doe'";
150 auto update_result = db_manager->execute_query_result(update_query);
152 if (update_result.is_ok()) {
153 std::cout <<
"✓ John's age updated successfully" << std::endl;
156 auto verify_result = db_manager->select_query_result(
"SELECT username, age FROM users WHERE username = 'john_doe'");
157 if (verify_result.is_ok() && !verify_result.value().empty()) {
158 std::cout <<
"Updated data: ";
159 for (
const auto& row : verify_result.value()) {
160 for (
const auto& [key, value] : row) {
161 std::cout << key <<
"=";
162 std::visit([](
const auto& v) { std::cout << v; }, value);
165 std::cout << std::endl;
169 std::cout <<
"✗ Failed to update John's age" << std::endl;
173 std::cout <<
"\n7. Data Deletion:" << std::endl;
175 std::string delete_query =
"DELETE FROM users WHERE username LIKE 'temp_user%'";
176 auto delete_result = db_manager->execute_query_result(delete_query);
178 if (delete_result.is_ok()) {
179 std::cout <<
"✓ Temporary users deleted successfully" << std::endl;
181 std::cout <<
"✗ No temporary users to delete" << std::endl;
185 std::cout <<
"\n9. Connection Health Check:" << std::endl;
188 std::cout <<
"Connection test: Assuming healthy if connected";
189 std::cout <<
" - OK" << std::endl;
192 std::cout <<
"\n10. Cleanup:" << std::endl;
202 db_manager->disconnect_result();
203 std::cout <<
"✓ Disconnected from database" << std::endl;
204 std::cout <<
"Connection status: Disconnected" << std::endl;
207 std::cout <<
"✗ Failed to connect to database" << std::endl;
208 std::cout <<
"Please ensure:" << std::endl;
209 std::cout <<
" - PostgreSQL server is running" << std::endl;
210 std::cout <<
" - Database 'testdb' exists" << std::endl;
211 std::cout <<
" - User 'testuser' has appropriate permissions" << std::endl;
212 std::cout <<
" - Connection parameters are correct" << std::endl;
214 std::cout <<
"\nTo test with a real database, update the connection string:" << std::endl;
215 std::cout <<
" host=your_host port=5432 dbname=your_db user=your_user password=your_pass" << std::endl;
218 std::cout <<
"\n=== Basic Usage Example completed ===" << std::endl;
Dependency injection container for database system components.