33{
34 std::cout << "=== query_builder_usage example ===" << std::endl;
35
36
37
38
39 std::cout << "\n--- SELECT ---" << std::endl;
40 {
42
43 auto query = builder.select({"id", "name", "email"})
44 .from("users")
45 .where("age", ">=", int64_t{18})
46 .where("is_active", "=", true)
47 .order_by("name", sort_order::asc)
48 .limit(20)
49 .offset(0)
50 .build();
51
52 std::cout << "SELECT query:\n " << query << std::endl;
53 }
54
55
56
57
58 std::cout << "\n--- INSERT ---" << std::endl;
59 {
61
62 std::map<std::string, core::database_value> row;
63 row["name"] = std::string("Alice");
64 row["email"] = std::string("alice@example.com");
65 row["age"] = int64_t{30};
66 row["is_active"] = true;
67
68 auto query = builder.insert_into("users").values(row).build();
69
70 std::cout << "INSERT query:\n " << query << std::endl;
71 }
72
73
74
75
76 std::cout << "\n--- Batch INSERT ---" << std::endl;
77 {
79
80 std::vector<std::map<std::string, core::database_value>> rows;
81
82 std::map<std::string, core::database_value> row1;
83 row1["name"] = std::string("Bob");
84 row1["email"] = std::string("bob@example.com");
85 row1["age"] = int64_t{25};
86 rows.push_back(row1);
87
88 std::map<std::string, core::database_value> row2;
89 row2["name"] = std::string("Carol");
90 row2["email"] = std::string("carol@example.com");
91 row2["age"] = int64_t{28};
92 rows.push_back(row2);
93
94 auto query = builder.insert_into("users").values(rows).build();
95
96 std::cout << "Batch INSERT query:\n " << query << std::endl;
97 }
98
99
100
101
102 std::cout << "\n--- UPDATE ---" << std::endl;
103 {
105
106 auto query = builder.update("users")
107 .set("email", std::string("newalice@example.com"))
108 .set("age", int64_t{31})
109 .where("name", "=", std::string("Alice"))
110 .build();
111
112 std::cout << "UPDATE query:\n " << query << std::endl;
113 }
114
115
116
117
118 std::cout << "\n--- DELETE ---" << std::endl;
119 {
121
122 auto query = builder.delete_from("users")
123 .where("is_active", "=", false)
124 .build();
125
126 std::cout << "DELETE query:\n " << query << std::endl;
127 }
128
129
130
131
132 std::cout << "\n--- JOIN ---" << std::endl;
133 {
135
136 auto query = builder.select({"u.name", "o.total"})
137 .from("users u")
138 .join("orders o", "u.id = o.user_id", join_type::inner)
139 .where("o.total", ">", 100.0)
140 .order_by("o.total", sort_order::desc)
141 .build();
142
143 std::cout << "JOIN query:\n " << query << std::endl;
144 }
145
146
147
148
149 std::cout << "\n--- GROUP BY ---" << std::endl;
150 {
152
153 auto query = builder.select({"department", "COUNT(*) AS cnt"})
154 .from("employees")
155 .group_by("department")
156 .having("COUNT(*) > 5")
157 .order_by("cnt", sort_order::desc)
158 .build();
159
160 std::cout << "GROUP BY query:\n " << query << std::endl;
161 }
162
163
164
165
166 std::cout << "\n--- Compound conditions ---" << std::endl;
167 {
169
170
173
174
175 auto combined = age_check && active_check;
176
177 auto query = builder.select({"*"}).from("users").where(combined).build();
178
179 std::cout << "Compound condition query:\n " << query << std::endl;
180 }
181
182
183
184
185 std::cout << "\n--- Dialect switch ---" << std::endl;
186 {
188
189 auto pg_query = builder.select({"id", "name"})
190 .from("users")
191 .where("id", "=", int64_t{1})
192 .build();
193 std::cout << "PostgreSQL: " << pg_query << std::endl;
194
195
196 builder.reset();
197 builder.for_database(database_types::sqlite);
198
199 auto sqlite_query = builder.select({"id", "name"})
200 .from("users")
201 .where("id", "=", int64_t{1})
202 .build();
203 std::cout << "SQLite: " << sqlite_query << std::endl;
204 }
205
206 std::cout << "\n=== query_builder_usage example completed ===" << std::endl;
207 return 0;
208}
Universal query builder that adapts to different database types.
Represents a WHERE condition in a query.