session progress
This commit is contained in:
@@ -24,8 +24,45 @@ using namespace matador::object;
|
||||
using namespace matador::query;
|
||||
using namespace matador::sql;
|
||||
using namespace matador::test;
|
||||
using namespace matador::utils;
|
||||
using namespace matador::query::meta;
|
||||
|
||||
void initialize_resolver(const basic_schema& repo, connection& db) {
|
||||
for (const auto &pair : repo.resolver_producers()) {
|
||||
auto res = pair.second->build_query(db.dialect()).and_then([&db](query_context&& query_ctx) -> result<statement, error> {
|
||||
query_ctx.resolver = db.resolver();
|
||||
return db.prepare(query_ctx);
|
||||
}).and_then([&pair, &db](statement&& stmt) -> result<void, error> {
|
||||
db.resolver()->register_object_resolver(pair.second->produce(std::move(stmt)));
|
||||
|
||||
return ok<void>();
|
||||
}).or_else([](const auto &err) {
|
||||
return failure(err);
|
||||
});
|
||||
|
||||
if (!res) {
|
||||
throw std::runtime_error(res.err().message());
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &pair : repo.collection_resolver_producers()) {
|
||||
auto res = pair.second->build_query(db.dialect()).and_then([&db](query_context&& query_ctx) -> result<statement, error> {
|
||||
query_ctx.resolver = db.resolver();
|
||||
return db.prepare(query_ctx);
|
||||
}).and_then([&pair, &db](statement&& stmt) -> result<void, error> {
|
||||
db.resolver()->register_collection_resolver(pair.second->produce(std::move(stmt), *db.resolver()));
|
||||
|
||||
return ok<void>();
|
||||
}).or_else([](const auto &err) {
|
||||
return failure(err);
|
||||
});
|
||||
|
||||
if (!res) {
|
||||
throw std::runtime_error(res.err().message());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(QueryFixture, "Create table with foreign key relation", "[query][foreign][relation]") {
|
||||
const auto result = repo.attach<airplane>("airplane")
|
||||
.and_then([this] { return repo.attach<flight>("flight");})
|
||||
@@ -311,7 +348,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and for single
|
||||
.and_then([this] {return repo.create(db); });
|
||||
REQUIRE(result.is_ok());
|
||||
|
||||
// repo.initialize(db);
|
||||
initialize_resolver(repo, db);
|
||||
|
||||
REQUIRE(db.exists(AIRPLANE.table_name()));
|
||||
REQUIRE(db.exists(FLIGHT.table_name()));
|
||||
@@ -538,7 +575,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many relation",
|
||||
.and_then([this] {return repo.create(db); });
|
||||
REQUIRE(result.is_ok());
|
||||
|
||||
// repo.initialize(db);
|
||||
initialize_resolver(repo, db);
|
||||
|
||||
const std::vector shipments {
|
||||
make_object<shipment>(1, "4711"),
|
||||
@@ -636,7 +673,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy has many relation", "
|
||||
} );
|
||||
REQUIRE(result.is_ok());
|
||||
|
||||
// repo.initialize(db);
|
||||
initialize_resolver(repo, db);
|
||||
|
||||
const std::vector authors {
|
||||
make_object<author>(1, "Michael", "Crichton", "23.10.1942", 1975, true),
|
||||
@@ -718,7 +755,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy belongs to relation",
|
||||
.and_then([this] {return repo.create(db); });
|
||||
REQUIRE(result.is_ok());
|
||||
|
||||
// repo.initialize(db);
|
||||
initialize_resolver(repo, db);
|
||||
|
||||
const std::vector deps {
|
||||
make_object<department>(1, "Human Resources"),
|
||||
@@ -864,7 +901,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many to many rel
|
||||
|
||||
REQUIRE(result.is_ok());
|
||||
|
||||
// repo.initialize(db);
|
||||
initialize_resolver(repo, db);
|
||||
|
||||
REQUIRE(db.exists(RECIPE.table_name()));
|
||||
REQUIRE(db.exists(INGREDIENT.table_name()));
|
||||
|
||||
@@ -29,7 +29,7 @@ struct author_identity {
|
||||
void process(Operator &op) {
|
||||
namespace field = matador::access;
|
||||
field::primary_key(op, "id", id, utils::Identity);
|
||||
field::attribute(op, "first_name", name, VarChar63);
|
||||
field::attribute(op, "name", name, VarChar63);
|
||||
field::has_many(op, "books", books, "author_id", utils::CascadeAllFetchLazy);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -88,7 +88,7 @@ TEST_CASE_METHOD(SessionFixture, "Session delete test", "[session][delete]") {
|
||||
|
||||
result = ses.find<airplane>(1);
|
||||
REQUIRE(result.is_error());
|
||||
REQUIRE(result.err().ec() == query::error_code::FailedToFindObject);
|
||||
REQUIRE(result.err().ec() == sql::error_code::FetchFailed);
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(SessionFixture, "Session relation test", "[session][relation]") {
|
||||
@@ -125,7 +125,7 @@ TEST_CASE_METHOD(SessionFixture, "Use session to find object with id", "[session
|
||||
|
||||
auto find_result = ses.find<airplane>(2);
|
||||
REQUIRE(!find_result.is_ok());
|
||||
REQUIRE((find_result.err().ec() == query::error_code::FailedToFindObject));
|
||||
REQUIRE((find_result.err().ec() == sql::error_code::FetchFailed));
|
||||
|
||||
find_result = ses.find<airplane>(1);
|
||||
|
||||
|
||||
@@ -38,19 +38,19 @@ std::unordered_map<std::type_index, query_contexts> to_contexts_by_name(const sc
|
||||
// SELECT one
|
||||
queries.select_one = select(node.table())
|
||||
.from(node.name())
|
||||
.where(*node.table().primary_key_column().value() == _)
|
||||
.where(*node.table().primary_key_column() == _)
|
||||
.compile(d);
|
||||
// UPDATE one
|
||||
auto update_set = update(node.table());
|
||||
for (const auto &col: node.table().columns()) {
|
||||
update_set.set(col, _);
|
||||
}
|
||||
queries.update_one = update_set.where(*node.table().primary_key_column().value() == _)
|
||||
queries.update_one = update_set.where(*node.table().primary_key_column() == _)
|
||||
.compile(d);
|
||||
// DELETE one
|
||||
queries.delete_one = remove()
|
||||
.from(node.name())
|
||||
.where(*node.table().primary_key_column().value() == _)
|
||||
.where(*node.table().primary_key_column() == _)
|
||||
.compile(d);
|
||||
}
|
||||
// INSERT one
|
||||
|
||||
Reference in New Issue
Block a user