Skip to content

Commit 698809e

Browse files
committed
added natural join unit tests
1 parent 3abd211 commit 698809e

File tree

3 files changed

+63
-14
lines changed

3 files changed

+63
-14
lines changed

tests/statement_serializer_tests/ast/cross_join.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ TEST_CASE("cross_join") {
1010
int id = 0;
1111
std::string name;
1212
};
13-
auto table =
14-
make_virtual_table("users", using_fts5(make_column("id", &User::id), make_column("name", &User::name)));
13+
auto table = make_table("users", make_column("id", &User::id), make_column("name", &User::name));
1514
using db_objects_t = internal::db_objects_tuple<decltype(table)>;
1615
auto dbObjects = db_objects_t{table};
1716
using context_t = internal::serializer_context<db_objects_t>;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <sqlite_orm/sqlite_orm.h>
2+
#include <catch2/catch_all.hpp>
3+
4+
using namespace sqlite_orm;
5+
6+
TEST_CASE("natural_join") {
7+
using internal::serialize;
8+
9+
struct User {
10+
int id = 0;
11+
std::string name;
12+
};
13+
auto table = make_table("users", make_column("id", &User::id), make_column("name", &User::name));
14+
using db_objects_t = internal::db_objects_tuple<decltype(table)>;
15+
auto dbObjects = db_objects_t{table};
16+
using context_t = internal::serializer_context<db_objects_t>;
17+
context_t context{dbObjects};
18+
std::string value;
19+
SECTION("straight") {
20+
auto node = natural_join<User>();
21+
value = serialize(node, context);
22+
}
23+
SECTION("alias") {
24+
using user_s = alias_s<User>;
25+
auto node = natural_join<user_s>();
26+
value = serialize(node, context);
27+
}
28+
REQUIRE(value == R"(NATURAL JOIN "users")");
29+
}

tests/statement_serializer_tests/statements/select.cpp

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <chrono>
12
#include <sqlite_orm/sqlite_orm.h>
23
#include <catch2/catch_all.hpp>
34

@@ -293,7 +294,7 @@ TEST_CASE("statement_serializer select_t") {
293294
}
294295
}
295296
}
296-
SECTION("cross join") {
297+
SECTION("{cross, natural} join") {
297298
struct Rank {
298299
std::string rank;
299300
};
@@ -307,19 +308,39 @@ TEST_CASE("statement_serializer select_t") {
307308
using db_objects_t = internal::db_objects_tuple<decltype(rankTable), decltype(suitTable)>;
308309
db_objects_t dbObjects{rankTable, suitTable};
309310
internal::serializer_context<db_objects_t> context{dbObjects};
310-
311-
SECTION("straight") {
312-
auto expression = select(columns(&Rank::rank, &Suit::suit), cross_join<Suit>(), order_by(&Suit::suit));
313-
expression.highest_level = true;
314-
stringValue = serialize(expression, context);
311+
SECTION("cross join") {
312+
SECTION("straight") {
313+
auto expression = select(columns(&Rank::rank, &Suit::suit), cross_join<Suit>(), order_by(&Suit::suit));
314+
expression.highest_level = true;
315+
stringValue = serialize(expression, context);
316+
}
317+
SECTION("alias") {
318+
using suit_s = alias_s<Suit>;
319+
auto expression =
320+
select(columns(&Rank::rank, &Suit::suit), cross_join<suit_s>(), order_by(&Suit::suit));
321+
expression.highest_level = true;
322+
stringValue = serialize(expression, context);
323+
}
324+
expected =
325+
R"(SELECT "ranks"."rank", "suits"."suit" FROM "ranks" CROSS JOIN "suits" ORDER BY "suits"."suit")";
315326
}
316-
SECTION("alias") {
317-
using suit_s = alias_s<Suit>;
318-
auto expression = select(columns(&Rank::rank, &Suit::suit), cross_join<suit_s>(), order_by(&Suit::suit));
319-
expression.highest_level = true;
320-
stringValue = serialize(expression, context);
327+
SECTION("natural join") {
328+
SECTION("straight") {
329+
auto expression =
330+
select(columns(&Rank::rank, &Suit::suit), natural_join<Suit>(), order_by(&Suit::suit));
331+
expression.highest_level = true;
332+
stringValue = serialize(expression, context);
333+
}
334+
SECTION("alias") {
335+
using suit_s = alias_s<Suit>;
336+
auto expression =
337+
select(columns(&Rank::rank, &Suit::suit), natural_join<suit_s>(), order_by(&Suit::suit));
338+
expression.highest_level = true;
339+
stringValue = serialize(expression, context);
340+
}
341+
expected =
342+
R"(SELECT "ranks"."rank", "suits"."suit" FROM "ranks" NATURAL JOIN "suits" ORDER BY "suits"."suit")";
321343
}
322-
expected = R"(SELECT "ranks"."rank", "suits"."suit" FROM "ranks" CROSS JOIN "suits" ORDER BY "suits"."suit")";
323344
}
324345
REQUIRE(stringValue == expected);
325346
}

0 commit comments

Comments
 (0)