use table metas where possible
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include "matador/query/table_column.hpp"
|
||||
|
||||
#include "models/person.hpp"
|
||||
#include "models/model_metas.hpp"
|
||||
|
||||
#include "QueryFixture.hpp"
|
||||
|
||||
@@ -16,11 +17,12 @@
|
||||
using namespace matador::sql;
|
||||
using namespace matador::object;
|
||||
using namespace matador::query;
|
||||
using namespace matador::query::meta;
|
||||
using namespace matador::utils;
|
||||
using namespace matador::test;
|
||||
|
||||
TEST_CASE_METHOD(QueryFixture, "Test create statement", "[query][statement][create]") {
|
||||
REQUIRE(repo.attach<matador::test::person>("person"));
|
||||
const auto obj = object_generator::generate<person>(repo.repo(), "person");
|
||||
const auto obj = object_generator::generate<person>(repo.repo(), "persons");
|
||||
auto stmt = query::create()
|
||||
.table(obj->name())
|
||||
.columns(obj->attributes())
|
||||
@@ -31,11 +33,11 @@ TEST_CASE_METHOD(QueryFixture, "Test create statement", "[query][statement][crea
|
||||
auto res = stmt->execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 0);
|
||||
tables_to_drop.emplace("person");
|
||||
tables_to_drop.emplace("persons");
|
||||
|
||||
check_table_exists("person");
|
||||
check_table_exists("persons");
|
||||
const std::vector<std::string> cols = {"id", "name", "age", "image"};
|
||||
const auto fields = db.describe("person");
|
||||
const auto fields = db.describe("persons");
|
||||
REQUIRE(fields.is_ok());
|
||||
|
||||
for (const auto &fld : *fields) {
|
||||
@@ -44,39 +46,27 @@ TEST_CASE_METHOD(QueryFixture, "Test create statement", "[query][statement][crea
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(QueryFixture, "Test insert statement", "[query][statement][insert]") {
|
||||
using namespace matador::test;
|
||||
|
||||
REQUIRE(repo.attach<person>("person"));
|
||||
const auto obj = object_generator::generate<person>(repo.repo(), "person");
|
||||
auto stmt = query::create()
|
||||
.table(obj->name())
|
||||
.columns(obj->attributes())
|
||||
.constraints(obj->constraints())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
REQUIRE(repo.attach<person>("persons")
|
||||
.and_then([this] { return repo.create(db);}));
|
||||
|
||||
auto res = stmt->execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 0);
|
||||
tables_to_drop.emplace("person");
|
||||
|
||||
check_table_exists("person");
|
||||
check_table_exists(PERSON.table_name());
|
||||
|
||||
person george{1, "george", 45, {1,2,3,4}};
|
||||
|
||||
stmt = query::insert()
|
||||
.into<person>("person", repo)
|
||||
auto stmt = query::insert()
|
||||
.into(PERSON, {PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.values(generator::placeholders<person>())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
res = stmt->bind(george)
|
||||
auto res = stmt->bind(george)
|
||||
.execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
auto row = query::select<person>(repo)
|
||||
.from("person")
|
||||
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.from(PERSON)
|
||||
.fetch_one<person>(db);
|
||||
REQUIRE(row.is_ok());
|
||||
|
||||
@@ -88,40 +78,26 @@ TEST_CASE_METHOD(QueryFixture, "Test insert statement", "[query][statement][inse
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][update]") {
|
||||
using namespace matador::test;
|
||||
using namespace matador::utils;
|
||||
REQUIRE(repo.attach<person>("persons")
|
||||
.and_then([this] { return repo.create(db);}));
|
||||
|
||||
REQUIRE(repo.attach<matador::test::person>("person"));
|
||||
const auto obj = object_generator::generate<person>(repo.repo(), "person");
|
||||
auto stmt = query::create()
|
||||
.table(obj->name())
|
||||
.columns(obj->attributes())
|
||||
.constraints(obj->constraints())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
auto res = stmt->execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 0);
|
||||
tables_to_drop.emplace("person");
|
||||
|
||||
check_table_exists("person");
|
||||
check_table_exists(PERSON.table_name());
|
||||
|
||||
person george{1, "george", 45, {1,2,3,4}};
|
||||
|
||||
stmt = query::insert()
|
||||
.into<person>("person", repo)
|
||||
auto stmt = query::insert()
|
||||
.into(PERSON, {PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.values(generator::placeholders<person>())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
res = stmt->bind(george)
|
||||
auto res = stmt->bind(george)
|
||||
.execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
auto row = query::select<person>(repo)
|
||||
.from("person")
|
||||
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.from(PERSON)
|
||||
.fetch_one<person>(db);
|
||||
REQUIRE(row.is_ok());
|
||||
|
||||
@@ -133,9 +109,9 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
|
||||
|
||||
george.age = 36;
|
||||
george.image = {5,6,7,8};
|
||||
stmt = query::update("person")
|
||||
stmt = query::update(PERSON)
|
||||
.set(generator::column_value_pairs<person>())
|
||||
.where("id"_col == _)
|
||||
.where(PERSON.id == _)
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
@@ -145,8 +121,8 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
|
||||
row = query::select<person>(repo)
|
||||
.from("person")
|
||||
row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.from(PERSON)
|
||||
.fetch_one<person>(db);
|
||||
REQUIRE(row.is_ok());
|
||||
|
||||
@@ -158,26 +134,13 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][delete]") {
|
||||
using namespace matador::test;
|
||||
REQUIRE(repo.attach<person>("persons")
|
||||
.and_then([this] { return repo.create(db);}));
|
||||
|
||||
REQUIRE(repo.attach<matador::test::person>("person"));
|
||||
const auto obj = object_generator::generate<person>(repo.repo(), "person");
|
||||
auto stmt = query::create()
|
||||
.table(obj->name())
|
||||
.columns(obj->attributes())
|
||||
.constraints(obj->constraints())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
check_table_exists(PERSON.table_name());
|
||||
|
||||
auto res = stmt->execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 0);
|
||||
tables_to_drop.emplace("person");
|
||||
|
||||
check_table_exists("person");
|
||||
|
||||
stmt = query::insert()
|
||||
.into<person>("person", repo)
|
||||
auto stmt = query::insert()
|
||||
.into(PERSON, {PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.values(generator::placeholders<person>())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
@@ -190,16 +153,16 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
|
||||
};
|
||||
|
||||
for (const auto &p : peoples) {
|
||||
res = stmt->bind(p)
|
||||
auto res = stmt->bind(p)
|
||||
.execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
stmt->reset();
|
||||
}
|
||||
|
||||
auto select_stmt = query::select<person>(repo)
|
||||
.from("person")
|
||||
.where("name"_col == matador::utils::_)
|
||||
auto select_stmt = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.from(PERSON)
|
||||
.where(PERSON.name ==_)
|
||||
.prepare(db);
|
||||
REQUIRE(select_stmt);
|
||||
|
||||
@@ -216,12 +179,12 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
|
||||
}
|
||||
|
||||
stmt = query::remove()
|
||||
.from("person")
|
||||
.where("name"_col == matador::utils::_)
|
||||
.from(PERSON)
|
||||
.where(PERSON.name == _)
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
res = stmt->bind(0, "jane")
|
||||
auto res = stmt->bind(0, "jane")
|
||||
.execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
@@ -248,26 +211,13 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(QueryFixture, "Test reuse prepared statement", "[query][statement][reuse]") {
|
||||
using namespace matador::test;
|
||||
REQUIRE(repo.attach<matador::test::person>("persons")
|
||||
.and_then([this] { return repo.create(db);}));
|
||||
|
||||
REQUIRE(repo.attach<matador::test::person>("person"));
|
||||
const auto obj = object_generator::generate<person>(repo.repo(), "person");
|
||||
auto stmt = query::create()
|
||||
.table(obj->name())
|
||||
.columns(obj->attributes())
|
||||
.constraints(obj->constraints())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
check_table_exists(PERSON.table_name());
|
||||
|
||||
auto res = stmt->execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 0);
|
||||
tables_to_drop.emplace("person");
|
||||
|
||||
check_table_exists("person");
|
||||
|
||||
stmt = query::insert()
|
||||
.into<person>("person", repo)
|
||||
auto stmt = query::insert()
|
||||
.into(PERSON, {PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.values(generator::placeholders<person>())
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
@@ -280,15 +230,15 @@ TEST_CASE_METHOD(QueryFixture, "Test reuse prepared statement", "[query][stateme
|
||||
};
|
||||
|
||||
for (const auto &p : peoples) {
|
||||
res = stmt->bind(p)
|
||||
auto res = stmt->bind(p)
|
||||
.execute();
|
||||
REQUIRE(res.is_ok());
|
||||
REQUIRE(*res == 1);
|
||||
stmt->reset();
|
||||
}
|
||||
|
||||
stmt = query::select<person>(repo)
|
||||
.from("person")
|
||||
stmt = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||
.from(PERSON)
|
||||
.prepare(db);
|
||||
REQUIRE(stmt);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user