#include #include #include #include #include using namespace matador::sql; TEST_CASE("Create table", "[query]") { dialect d; query_builder query(d); const auto sql = query.create().table("person", { make_pk_column("id"), make_column("name", 255), make_column("age") }).compile(); REQUIRE(sql == R"##(CREATE TABLE "person" ("id" BIGINT NOT NULL PRIMARY KEY, "name" VARCHAR(255), "age" INTEGER))##"); } TEST_CASE("Drop table", "[query]") { dialect d; query_builder query(d); const auto sql = query.drop().table("person").compile(); REQUIRE(sql == R"(DROP TABLE "person")"); } TEST_CASE("Select", "[query]") { dialect d; query_builder query(d); const auto sql = query.select({"id", "name", "age"}).from("person").compile(); REQUIRE(sql == R"(SELECT "id", "name", "age" FROM "person")"); } TEST_CASE("Insert", "[query]") { dialect d; query_builder query(d); const auto sql = query.insert().into("person", { "id", "name", "age" }).values({7UL, "george", 65U}).compile(); REQUIRE(sql == R"(INSERT INTO "person" ("id", "name", "age") VALUES (7, 'george', 65))"); } TEST_CASE("Update", "[query]") { dialect d; query_builder query(d); const auto sql = query.update("person").set({ {"id", 7UL}, {"name", "george"}, {"age", 65U} }).compile(); REQUIRE(sql == R"(UPDATE "person" SET "id"=7, "name"='george', "age"=65)"); } TEST_CASE("Delete", "[query]") { dialect d; query_builder query(d); const auto sql = query.remove().from("person").compile(); REQUIRE(sql == R"(DELETE FROM "person")"); } TEST_CASE("Where", "[query]") { dialect d; query_builder query(d); auto sql = query.select({"id", "name", "age"}) .from("person") .where("id"_col == 8 && "age"_col > 50) .compile(); REQUIRE(sql == R"(SELECT "id", "name", "age" FROM "person" WHERE ("id" = 8 AND "age" > 50))"); sql = query.select({"id", "name", "age"}) .from("person") .where("id"_col == _ && "age"_col > 50) .compile(); REQUIRE(sql == R"(SELECT "id", "name", "age" FROM "person" WHERE ("id" = ? AND "age" > 50))"); } TEST_CASE("OrderBy", "[query]") { dialect d; query_builder query(d); const auto sql = query.select({"id", "name", "age"}) .from("person") .order_by("name").asc() .compile(); REQUIRE(sql == R"(SELECT "id", "name", "age" FROM "person" ORDER BY "name" ASC)"); } TEST_CASE("GroupBy", "[query]") { dialect d; query_builder query(d); const auto sql = query.select({"id", "name", "age"}) .from("person") .group_by("age") .compile(); REQUIRE(sql == R"(SELECT "id", "name", "age" FROM "person" GROUP BY "age")"); } TEST_CASE("Limit", "[query]") { dialect d; query_builder query(d); const auto sql = query.select({"id", "name", "age"}) .from("person") .offset(10) .limit(20) .compile(); REQUIRE(sql == R"(SELECT "id", "name", "age" FROM "person" OFFSET 10 LIMIT 20)"); }