Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
database::tests Namespace Reference

Classes

class  SQLQueryBuilderTest
 
class  UniversalQueryBuilderTest
 

Functions

 TEST_F (SQLQueryBuilderTest, SimpleSelect)
 
 TEST_F (SQLQueryBuilderTest, SelectAll)
 
 TEST_F (SQLQueryBuilderTest, InnerJoin)
 
 TEST_F (SQLQueryBuilderTest, LeftJoin)
 
 TEST_F (SQLQueryBuilderTest, RightJoin)
 
 TEST_F (SQLQueryBuilderTest, FullOuterJoin)
 
 TEST_F (SQLQueryBuilderTest, CrossJoin)
 
 TEST_F (SQLQueryBuilderTest, MultipleJoins)
 
 TEST_F (SQLQueryBuilderTest, SimpleWhere)
 
 TEST_F (SQLQueryBuilderTest, WhereWithString)
 
 TEST_F (SQLQueryBuilderTest, WhereWithInt)
 
 TEST_F (SQLQueryBuilderTest, WhereWithDouble)
 
 TEST_F (SQLQueryBuilderTest, MultipleWhereConditions)
 
 TEST_F (SQLQueryBuilderTest, NestedConditionsWithAnd)
 
 TEST_F (SQLQueryBuilderTest, NestedConditionsWithOr)
 
 TEST_F (SQLQueryBuilderTest, GroupBy)
 
 TEST_F (SQLQueryBuilderTest, GroupByMultipleColumns)
 
 TEST_F (SQLQueryBuilderTest, GroupByWithHaving)
 
 TEST_F (SQLQueryBuilderTest, OrderByAsc)
 
 TEST_F (SQLQueryBuilderTest, OrderByDesc)
 
 TEST_F (SQLQueryBuilderTest, OrderByMultipleColumns)
 
 TEST_F (SQLQueryBuilderTest, Limit)
 
 TEST_F (SQLQueryBuilderTest, LimitWithOffset)
 
 TEST_F (SQLQueryBuilderTest, InsertSingleRow)
 
 TEST_F (SQLQueryBuilderTest, InsertMultipleRows)
 
 TEST_F (SQLQueryBuilderTest, UpdateSingleField)
 
 TEST_F (SQLQueryBuilderTest, UpdateMultipleFields)
 
 TEST_F (SQLQueryBuilderTest, DeleteWithWhere)
 
 TEST_F (SQLQueryBuilderTest, DeleteWithMultipleConditions)
 
 TEST_F (SQLQueryBuilderTest, PostgreSQLSyntax)
 
 TEST_F (SQLQueryBuilderTest, SQLiteSyntax)
 
 TEST_F (SQLQueryBuilderTest, Reset)
 
 TEST_F (SQLQueryBuilderTest, ReuseAfterReset)
 
 TEST_F (SQLQueryBuilderTest, ComplexSelectQuery)
 
 TEST_F (SQLQueryBuilderTest, EmptyConditions)
 
 TEST_F (SQLQueryBuilderTest, SwitchDatabase)
 
 TEST_F (UniversalQueryBuilderTest, PostgreSQLBuilder)
 
 TEST_F (UniversalQueryBuilderTest, SQLiteBuilder)
 
 TEST_F (UniversalQueryBuilderTest, SwitchDatabase)
 
 TEST_F (UniversalQueryBuilderTest, SelectQuery)
 
 TEST_F (UniversalQueryBuilderTest, JoinQuery)
 
 TEST_F (UniversalQueryBuilderTest, InsertData)
 
 TEST_F (UniversalQueryBuilderTest, UpdateData)
 
 TEST_F (UniversalQueryBuilderTest, Reset)
 
 TEST_F (UniversalQueryBuilderTest, DefaultConstructor)
 
 TEST_F (UniversalQueryBuilderTest, SetDatabaseAfterConstruction)
 
 TEST_F (UniversalQueryBuilderTest, SameSQLAcrossDialects)
 
 TEST_F (UniversalQueryBuilderTest, NoDatabaseType)
 
 TEST_F (UniversalQueryBuilderTest, MethodChaining)
 
 TEST_F (UniversalQueryBuilderTest, LimitForSQL)
 

Function Documentation

◆ TEST_F() [1/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
ComplexSelectQuery  )

Definition at line 471 of file sql_query_builder_test.cpp.

472{
473 std::vector<std::string> cols = {"u.id", "u.name", "COUNT(o.id) as order_count"};
474 std::vector<std::string> group_cols = {"u.id", "u.name"};
475 auto query = builder_->select(cols)
476 .from("users u")
477 .join("orders o", "u.id = o.user_id", join_type::left)
478 .where("u.status", "=", core::database_value{std::string("active")})
479 .group_by(group_cols)
480 .having("COUNT(o.id) > 5")
481 .order_by("order_count", sort_order::desc)
482 .limit(10)
483 .build();
484
485 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
486 EXPECT_TRUE(query.find("LEFT JOIN") != std::string::npos);
487 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
488 EXPECT_TRUE(query.find("GROUP BY") != std::string::npos);
489 EXPECT_TRUE(query.find("HAVING") != std::string::npos);
490 EXPECT_TRUE(query.find("ORDER BY") != std::string::npos);
491 EXPECT_TRUE(query.find("LIMIT") != std::string::npos);
492}

References database::desc, and database::left.

◆ TEST_F() [2/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
CrossJoin  )

Definition at line 104 of file sql_query_builder_test.cpp.

105{
106 auto query = builder_->select({"*"})
107 .from("colors")
108 .join("sizes", "1=1", join_type::cross)
109 .build();
110
111 EXPECT_TRUE(query.find("CROSS JOIN") != std::string::npos);
112}

References database::cross.

◆ TEST_F() [3/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
DeleteWithMultipleConditions  )

Definition at line 404 of file sql_query_builder_test.cpp.

405{
406 auto query = builder_->delete_from("users")
407 .where("status", "=", core::database_value{std::string("inactive")})
408 .where("last_login", "<", core::database_value{std::string("2024-01-01")})
409 .build();
410
411 EXPECT_TRUE(query.find("DELETE FROM") != std::string::npos);
412 EXPECT_TRUE(query.find("AND") != std::string::npos);
413}
std::variant< std::string, int64_t, double, bool, std::nullptr_t > database_value

◆ TEST_F() [4/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
DeleteWithWhere  )

Definition at line 394 of file sql_query_builder_test.cpp.

395{
396 auto query = builder_->delete_from("users")
397 .where("id", "=", core::database_value{int64_t(1)})
398 .build();
399
400 EXPECT_TRUE(query.find("DELETE FROM") != std::string::npos);
401 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
402}

◆ TEST_F() [5/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
EmptyConditions  )

Definition at line 498 of file sql_query_builder_test.cpp.

499{
500 auto query = builder_->select({"*"}).from("users").build();
501
502 EXPECT_FALSE(query.find("WHERE") != std::string::npos);
503}

◆ TEST_F() [6/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
FullOuterJoin  )

Definition at line 94 of file sql_query_builder_test.cpp.

95{
96 auto query = builder_->select({"*"})
97 .from("users")
98 .join("orders", "users.id = orders.user_id", join_type::full_outer)
99 .build();
100
101 EXPECT_TRUE(query.find("FULL OUTER JOIN") != std::string::npos);
102}

References database::full_outer.

◆ TEST_F() [7/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
GroupBy  )

Definition at line 217 of file sql_query_builder_test.cpp.

218{
219 std::vector<std::string> cols = {"department", "COUNT(*)"};
220 auto query = builder_->select(cols)
221 .from("employees")
222 .group_by("department")
223 .build();
224
225 EXPECT_TRUE(query.find("GROUP BY") != std::string::npos);
226}

◆ TEST_F() [8/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
GroupByMultipleColumns  )

Definition at line 228 of file sql_query_builder_test.cpp.

229{
230 std::vector<std::string> cols = {"department", "city", "COUNT(*)"};
231 std::vector<std::string> group_cols = {"department", "city"};
232 auto query = builder_->select(cols)
233 .from("employees")
234 .group_by(group_cols)
235 .build();
236
237 EXPECT_TRUE(query.find("GROUP BY") != std::string::npos);
238}

◆ TEST_F() [9/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
GroupByWithHaving  )

Definition at line 240 of file sql_query_builder_test.cpp.

241{
242 std::vector<std::string> cols = {"department", "COUNT(*) as count"};
243 auto query = builder_->select(cols)
244 .from("employees")
245 .group_by("department")
246 .having("COUNT(*) > 5")
247 .build();
248
249 EXPECT_TRUE(query.find("GROUP BY") != std::string::npos);
250 EXPECT_TRUE(query.find("HAVING") != std::string::npos);
251 EXPECT_TRUE(query.find("COUNT(*) > 5") != std::string::npos);
252}

◆ TEST_F() [10/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
InnerJoin  )

Definition at line 62 of file sql_query_builder_test.cpp.

63{
64 std::vector<std::string> cols = {"u.id", "u.name", "o.total"};
65 auto query = builder_->select(cols)
66 .from("users u")
67 .join("orders o", "u.id = o.user_id", join_type::inner)
68 .build();
69
70 EXPECT_TRUE(query.find("INNER JOIN") != std::string::npos);
71 EXPECT_TRUE(query.find("ON u.id = o.user_id") != std::string::npos);
72}

References database::inner.

◆ TEST_F() [11/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
InsertMultipleRows  )

Definition at line 337 of file sql_query_builder_test.cpp.

338{
339 std::vector<std::map<std::string, core::database_value>> rows;
340
341 std::map<std::string, core::database_value> row1;
342 row1["name"] = core::database_value{std::string("John")};
343 row1["age"] = core::database_value{int64_t(30)};
344 rows.push_back(row1);
345
346 std::map<std::string, core::database_value> row2;
347 row2["name"] = core::database_value{std::string("Jane")};
348 row2["age"] = core::database_value{int64_t(25)};
349 rows.push_back(row2);
350
351 auto query = builder_->insert_into("users")
352 .values(rows)
353 .build();
354
355 EXPECT_TRUE(query.find("INSERT INTO") != std::string::npos);
356 EXPECT_TRUE(query.find("VALUES") != std::string::npos);
357}

◆ TEST_F() [12/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
InsertSingleRow  )

Definition at line 323 of file sql_query_builder_test.cpp.

324{
325 std::map<std::string, core::database_value> data;
326 data["name"] = core::database_value{std::string("John")};
327 data["email"] = core::database_value{std::string("john@example.com")};
328
329 auto query = builder_->insert_into("users")
330 .values(data)
331 .build();
332
333 EXPECT_TRUE(query.find("INSERT INTO") != std::string::npos);
334 EXPECT_TRUE(query.find("VALUES") != std::string::npos);
335}

◆ TEST_F() [13/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
LeftJoin  )

Definition at line 74 of file sql_query_builder_test.cpp.

75{
76 auto query = builder_->select({"*"})
77 .from("users")
78 .join("profiles", "users.id = profiles.user_id", join_type::left)
79 .build();
80
81 EXPECT_TRUE(query.find("LEFT JOIN") != std::string::npos);
82}

References database::left.

◆ TEST_F() [14/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
Limit  )

Definition at line 297 of file sql_query_builder_test.cpp.

298{
299 auto query = builder_->select({"*"})
300 .from("users")
301 .limit(10)
302 .build();
303
304 EXPECT_TRUE(query.find("LIMIT 10") != std::string::npos);
305}

◆ TEST_F() [15/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
LimitWithOffset  )

Definition at line 307 of file sql_query_builder_test.cpp.

308{
309 auto query = builder_->select({"*"})
310 .from("users")
311 .limit(10)
312 .offset(20)
313 .build();
314
315 EXPECT_TRUE(query.find("LIMIT 10") != std::string::npos);
316 EXPECT_TRUE(query.find("OFFSET 20") != std::string::npos);
317}

◆ TEST_F() [16/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
MultipleJoins  )

Definition at line 114 of file sql_query_builder_test.cpp.

115{
116 std::vector<std::string> cols = {"u.id", "u.name", "o.total", "p.name"};
117 auto query = builder_->select(cols)
118 .from("users u")
119 .join("orders o", "u.id = o.user_id")
120 .join("products p", "o.product_id = p.id", join_type::left)
121 .build();
122
123 EXPECT_TRUE(query.find("INNER JOIN") != std::string::npos);
124 EXPECT_TRUE(query.find("LEFT JOIN") != std::string::npos);
125}

References database::left.

◆ TEST_F() [17/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
MultipleWhereConditions  )

Definition at line 174 of file sql_query_builder_test.cpp.

175{
176 auto query = builder_->select({"*"})
177 .from("users")
178 .where("active", "=", core::database_value{true})
179 .where("age", ">", core::database_value{int64_t(18)})
180 .build();
181
182 EXPECT_TRUE(query.find("AND") != std::string::npos);
183}

◆ TEST_F() [18/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
NestedConditionsWithAnd  )

Definition at line 185 of file sql_query_builder_test.cpp.

186{
187 query_condition cond1("age", ">", core::database_value{int64_t(18)});
188 query_condition cond2("status", "=", core::database_value{std::string("active")});
189 auto combined = cond1 && cond2;
190
191 auto query = builder_->select({"*"})
192 .from("users")
193 .where(combined)
194 .build();
195
196 EXPECT_TRUE(query.find("AND") != std::string::npos);
197}
Represents a WHERE condition in a query.

◆ TEST_F() [19/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
NestedConditionsWithOr  )

Definition at line 199 of file sql_query_builder_test.cpp.

200{
201 query_condition cond1("role", "=", core::database_value{std::string("admin")});
202 query_condition cond2("role", "=", core::database_value{std::string("superadmin")});
203 auto combined = cond1 || cond2;
204
205 auto query = builder_->select({"*"})
206 .from("users")
207 .where(combined)
208 .build();
209
210 EXPECT_TRUE(query.find("OR") != std::string::npos);
211}

◆ TEST_F() [20/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
OrderByAsc  )

Definition at line 258 of file sql_query_builder_test.cpp.

259{
260 auto query = builder_->select({"*"})
261 .from("users")
262 .order_by("name", sort_order::asc)
263 .build();
264
265 EXPECT_TRUE(query.find("ORDER BY") != std::string::npos);
266 EXPECT_TRUE(query.find("name ASC") != std::string::npos);
267}

References database::asc.

◆ TEST_F() [21/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
OrderByDesc  )

Definition at line 269 of file sql_query_builder_test.cpp.

270{
271 auto query = builder_->select({"*"})
272 .from("users")
273 .order_by("created_at", sort_order::desc)
274 .build();
275
276 EXPECT_TRUE(query.find("ORDER BY") != std::string::npos);
277 EXPECT_TRUE(query.find("created_at DESC") != std::string::npos);
278}

References database::desc.

◆ TEST_F() [22/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
OrderByMultipleColumns  )

Definition at line 280 of file sql_query_builder_test.cpp.

281{
282 auto query = builder_->select({"*"})
283 .from("products")
284 .order_by("category", sort_order::asc)
285 .order_by("price", sort_order::desc)
286 .build();
287
288 EXPECT_TRUE(query.find("ORDER BY") != std::string::npos);
289 EXPECT_TRUE(query.find("category ASC") != std::string::npos);
290 EXPECT_TRUE(query.find("price DESC") != std::string::npos);
291}

References database::asc, and database::desc.

◆ TEST_F() [23/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
PostgreSQLSyntax  )

Definition at line 419 of file sql_query_builder_test.cpp.

420{
421 query_builder pg_builder(database_types::postgres);
422 auto query = pg_builder.select({"*"})
423 .from("users")
424 .limit(10)
425 .build();
426
427 EXPECT_TRUE(query.find("\"users\"") != std::string::npos);
428}
Universal query builder that adapts to different database types.

References database::query_builder::build(), database::query_builder::limit(), database::postgres, and database::query_builder::select().

Here is the call graph for this function:

◆ TEST_F() [24/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
Reset  )

Definition at line 445 of file sql_query_builder_test.cpp.

446{
447 builder_->select({"*"}).from("users").limit(10);
448 builder_->reset();
449
450 // After reset, builder should be clean - verify by building a new query
451 // Reset clears the state, so next query starts fresh
452 auto query = builder_->select({"id"}).from("test_table").build();
453 EXPECT_TRUE(query.find("test_table") != std::string::npos);
454 EXPECT_TRUE(query.find("users") == std::string::npos); // Previous table not present
455}

◆ TEST_F() [25/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
ReuseAfterReset  )

Definition at line 457 of file sql_query_builder_test.cpp.

458{
459 builder_->select({"*"}).from("users").limit(10);
460 builder_->reset();
461
462 auto query = builder_->select({"*"}).from("products").build();
463 EXPECT_TRUE(query.find("products") != std::string::npos);
464 EXPECT_TRUE(query.find("users") == std::string::npos);
465}

◆ TEST_F() [26/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
RightJoin  )

Definition at line 84 of file sql_query_builder_test.cpp.

85{
86 auto query = builder_->select({"*"})
87 .from("users")
88 .join("orders", "users.id = orders.user_id", join_type::right)
89 .build();
90
91 EXPECT_TRUE(query.find("RIGHT JOIN") != std::string::npos);
92}

References database::right.

◆ TEST_F() [27/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
SelectAll  )

Definition at line 51 of file sql_query_builder_test.cpp.

52{
53 auto query = builder_->select({"*"}).from("users").build();
54 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
55 EXPECT_TRUE(query.find("*") != std::string::npos);
56}

◆ TEST_F() [28/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
SimpleSelect  )

Definition at line 40 of file sql_query_builder_test.cpp.

41{
42 std::vector<std::string> cols = {"id", "name", "email"};
43 auto query = builder_->select(cols)
44 .from("users")
45 .build();
46
47 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
48 EXPECT_TRUE(query.find("FROM") != std::string::npos);
49}

◆ TEST_F() [29/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
SimpleWhere  )

Definition at line 131 of file sql_query_builder_test.cpp.

132{
133 auto query = builder_->select({"*"})
134 .from("users")
135 .where("active", "=", core::database_value{true})
136 .build();
137
138 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
139 EXPECT_TRUE(query.find("active") != std::string::npos);
140 EXPECT_TRUE(query.find("TRUE") != std::string::npos);
141}

◆ TEST_F() [30/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
SQLiteSyntax  )

Definition at line 430 of file sql_query_builder_test.cpp.

431{
432 query_builder sqlite_builder(database_types::sqlite);
433 auto query = sqlite_builder.select({"*"})
434 .from("users")
435 .limit(10)
436 .build();
437
438 EXPECT_TRUE(query.find("[users]") != std::string::npos);
439}

References database::query_builder::build(), database::query_builder::limit(), database::query_builder::select(), and database::sqlite.

Here is the call graph for this function:

◆ TEST_F() [31/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
SwitchDatabase  )

Definition at line 509 of file sql_query_builder_test.cpp.

510{
511 builder_->for_database(database_types::sqlite);
512
513 auto query = builder_->select({"*"})
514 .from("users")
515 .build();
516
517 EXPECT_TRUE(query.find("[users]") != std::string::npos); // SQLite syntax
518}

References database::sqlite.

◆ TEST_F() [32/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
UpdateMultipleFields  )

Definition at line 375 of file sql_query_builder_test.cpp.

376{
377 std::map<std::string, core::database_value> data;
378 data["status"] = core::database_value{std::string("active")};
379 data["updated_at"] = core::database_value{std::string("2025-01-01")};
380
381 auto query = builder_->update("users")
382 .set(data)
383 .where("id", "=", core::database_value{int64_t(1)})
384 .build();
385
386 EXPECT_TRUE(query.find("UPDATE") != std::string::npos);
387 EXPECT_TRUE(query.find("SET") != std::string::npos);
388}

◆ TEST_F() [33/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
UpdateSingleField  )

Definition at line 363 of file sql_query_builder_test.cpp.

364{
365 auto query = builder_->update("users")
366 .set("status", core::database_value{std::string("active")})
367 .where("id", "=", core::database_value{int64_t(1)})
368 .build();
369
370 EXPECT_TRUE(query.find("UPDATE") != std::string::npos);
371 EXPECT_TRUE(query.find("SET") != std::string::npos);
372 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
373}

◆ TEST_F() [34/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
WhereWithDouble  )

Definition at line 163 of file sql_query_builder_test.cpp.

164{
165 auto query = builder_->select({"*"})
166 .from("products")
167 .where("price", "<", core::database_value{99.99})
168 .build();
169
170 EXPECT_TRUE(query.find("price") != std::string::npos);
171 EXPECT_TRUE(query.find("<") != std::string::npos);
172}

◆ TEST_F() [35/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
WhereWithInt  )

Definition at line 153 of file sql_query_builder_test.cpp.

154{
155 auto query = builder_->select({"*"})
156 .from("users")
157 .where("age", ">", core::database_value{int64_t(18)})
158 .build();
159
160 EXPECT_TRUE(query.find("> 18") != std::string::npos);
161}

◆ TEST_F() [36/50]

database::tests::TEST_F ( SQLQueryBuilderTest ,
WhereWithString  )

Definition at line 143 of file sql_query_builder_test.cpp.

144{
145 auto query = builder_->select({"*"})
146 .from("users")
147 .where("status", "=", core::database_value{std::string("active")})
148 .build();
149
150 EXPECT_TRUE(query.find("'active'") != std::string::npos);
151}

◆ TEST_F() [37/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
DefaultConstructor  )

Definition at line 215 of file universal_query_builder_test.cpp.

216{
217 query_builder builder;
218
219 // Default is none, so build should return empty
220 auto query = builder.build();
221 EXPECT_TRUE(query.empty());
222}
std::string build() const

References database::query_builder::build().

Here is the call graph for this function:

◆ TEST_F() [38/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
InsertData  )

Definition at line 138 of file universal_query_builder_test.cpp.

139{
140 query_builder builder(database_types::postgres);
141
142 std::map<std::string, core::database_value> data;
143 data["name"] = core::database_value{std::string("John")};
144 data["email"] = core::database_value{std::string("john@example.com")};
145
146 auto query = builder.insert_into("users").values(data).build();
147
148 EXPECT_TRUE(query.find("INSERT INTO") != std::string::npos);
149 EXPECT_TRUE(query.find("VALUES") != std::string::npos);
150}

References database::query_builder::build(), database::query_builder::insert_into(), database::postgres, and database::query_builder::values().

Here is the call graph for this function:

◆ TEST_F() [39/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
JoinQuery  )

Definition at line 122 of file universal_query_builder_test.cpp.

123{
124 query_builder builder(database_types::postgres);
125
126 auto query = builder.select({"u.id", "u.name", "o.total"})
127 .from("users u")
128 .join("orders o", "u.id = o.user_id")
129 .build();
130
131 EXPECT_TRUE(query.find("JOIN") != std::string::npos);
132}

References database::query_builder::build(), database::query_builder::join(), database::postgres, and database::query_builder::select().

Here is the call graph for this function:

◆ TEST_F() [40/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
LimitForSQL  )

Definition at line 326 of file universal_query_builder_test.cpp.

327{
328 query_builder builder(database_types::postgres);
329
330 auto query = builder.select({"*"})
331 .from("users")
332 .limit(10)
333 .build();
334
335 EXPECT_TRUE(query.find("LIMIT 10") != std::string::npos);
336}

References database::query_builder::build(), database::query_builder::limit(), database::postgres, and database::query_builder::select().

Here is the call graph for this function:

◆ TEST_F() [41/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
MethodChaining  )

Definition at line 282 of file universal_query_builder_test.cpp.

283{
284 query_builder builder(database_types::postgres);
285
286 // All methods should return reference for chaining
287 auto& ref1 = builder.for_database(database_types::sqlite);
288 auto& ref2 = ref1.select({"*"});
289 auto& ref3 = ref2.from("users");
290 auto& ref4 = ref3.where("active", "=", core::database_value{true});
291 auto& ref5 = ref4.order_by("name");
292 auto& ref6 = ref5.limit(10);
293
294 auto query = ref6.build();
295 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
296}

References database::query_builder::build(), database::query_builder::for_database(), database::query_builder::from(), database::query_builder::limit(), database::query_builder::order_by(), database::postgres, database::query_builder::select(), database::sqlite, and database::query_builder::where().

Here is the call graph for this function:

◆ TEST_F() [42/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
NoDatabaseType  )

Definition at line 269 of file universal_query_builder_test.cpp.

270{
271 query_builder builder(database_types::none);
272
273 auto query = builder.select({"*"}).from("users").build();
274
275 EXPECT_TRUE(query.empty());
276}

References database::query_builder::build(), database::none, and database::query_builder::select().

Here is the call graph for this function:

◆ TEST_F() [43/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
PostgreSQLBuilder  )

Definition at line 34 of file universal_query_builder_test.cpp.

35{
36 query_builder builder(database_types::postgres);
37
38 auto query = builder.select({"*"})
39 .from("users")
40 .build();
41
42 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
43 EXPECT_TRUE(query.find("\"users\"") != std::string::npos); // PostgreSQL uses double quotes
44}

References database::query_builder::build(), database::postgres, and database::query_builder::select().

Here is the call graph for this function:

◆ TEST_F() [44/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
Reset  )

Definition at line 170 of file universal_query_builder_test.cpp.

171{
172 query_builder builder(database_types::postgres);
173
174 builder.select({"*"}).from("users").limit(10);
175 builder.reset();
176
177 // After reset, building should work with new query
178 auto query = builder.select({"*"}).from("products").build();
179 EXPECT_TRUE(query.find("products") != std::string::npos);
180}

References database::query_builder::build(), database::query_builder::limit(), database::postgres, database::query_builder::reset(), and database::query_builder::select().

Here is the call graph for this function:

◆ TEST_F() [45/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
SameSQLAcrossDialects  )

Definition at line 241 of file universal_query_builder_test.cpp.

242{
243 // Build same logical query for different databases
244 std::vector<database_types> sql_types = {
245 database_types::postgres,
246 database_types::sqlite
247 };
248
249 for (auto db_type : sql_types) {
250 query_builder builder(db_type);
251
252 auto query = builder.select({"id", "name"})
253 .from("users")
254 .where("active", "=", core::database_value{true})
255 .limit(10)
256 .build();
257
258 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
259 EXPECT_TRUE(query.find("FROM") != std::string::npos);
260 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
261 EXPECT_TRUE(query.find("LIMIT") != std::string::npos);
262 }
263}

References database::query_builder::build(), database::postgres, database::query_builder::select(), database::sqlite, and database::query_builder::where().

Here is the call graph for this function:

◆ TEST_F() [46/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
SelectQuery  )

Definition at line 104 of file universal_query_builder_test.cpp.

105{
106 query_builder builder(database_types::sqlite);
107
108 auto query = builder.select({"id", "name", "email"})
109 .from("users")
110 .where("active", "=", core::database_value{true})
111 .order_by("name", sort_order::asc)
112 .limit(10)
113 .build();
114
115 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
116 EXPECT_TRUE(query.find("FROM") != std::string::npos);
117 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
118 EXPECT_TRUE(query.find("ORDER BY") != std::string::npos);
119 EXPECT_TRUE(query.find("LIMIT") != std::string::npos);
120}

References database::asc, database::query_builder::build(), database::query_builder::limit(), database::query_builder::select(), database::sqlite, and database::query_builder::where().

Here is the call graph for this function:

◆ TEST_F() [47/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
SetDatabaseAfterConstruction  )

Definition at line 224 of file universal_query_builder_test.cpp.

225{
226 query_builder builder;
227
228 builder.for_database(database_types::sqlite);
229
230 auto query = builder.select({"*"})
231 .from("users")
232 .build();
233
234 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
235}
query_builder & select(const std::vector< std::string > &columns)
query_builder & for_database(database_types db_type)

References database::query_builder::build(), database::query_builder::for_database(), database::query_builder::select(), and database::sqlite.

Here is the call graph for this function:

◆ TEST_F() [48/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
SQLiteBuilder  )

Definition at line 46 of file universal_query_builder_test.cpp.

47{
48 query_builder builder(database_types::sqlite);
49
50 auto query = builder.select({"*"})
51 .from("users")
52 .build();
53
54 EXPECT_TRUE(query.find("SELECT") != std::string::npos);
55 EXPECT_TRUE(query.find("[users]") != std::string::npos); // SQLite uses square brackets
56}

References database::query_builder::build(), database::query_builder::select(), and database::sqlite.

Here is the call graph for this function:

◆ TEST_F() [49/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
SwitchDatabase  )

Definition at line 87 of file universal_query_builder_test.cpp.

88{
89 query_builder builder(database_types::postgres);
90
91 builder.for_database(database_types::sqlite);
92
93 auto query = builder.select({"*"})
94 .from("users")
95 .build();
96
97 EXPECT_TRUE(query.find("[users]") != std::string::npos); // SQLite syntax
98}

References database::query_builder::build(), database::query_builder::for_database(), database::postgres, database::query_builder::select(), and database::sqlite.

Here is the call graph for this function:

◆ TEST_F() [50/50]

database::tests::TEST_F ( UniversalQueryBuilderTest ,
UpdateData  )

Definition at line 152 of file universal_query_builder_test.cpp.

153{
154 query_builder builder(database_types::postgres);
155
156 auto query = builder.update("users")
157 .set("status", core::database_value{std::string("active")})
158 .where("id", "=", core::database_value{int64_t(1)})
159 .build();
160
161 EXPECT_TRUE(query.find("UPDATE") != std::string::npos);
162 EXPECT_TRUE(query.find("SET") != std::string::npos);
163 EXPECT_TRUE(query.find("WHERE") != std::string::npos);
164}

References database::postgres, database::query_builder::set(), and database::query_builder::update().

Here is the call graph for this function: