proxy lazy resolve progress

This commit is contained in:
Sascha Kühl 2025-08-19 18:07:27 +02:00
parent 18d21eb1c6
commit 6b24a0e413
5 changed files with 21 additions and 19 deletions

View File

@ -59,7 +59,7 @@ public:
return utils::failure(make_error(error_code::UnknownType, "Failed to determine requested type."));
}
session_query_builder eqb(*schema_);
session_query_builder eqb(*schema_, *this);
auto data = eqb.build<Type>(pk);
if (!data.is_ok()) {
return utils::failure(make_error(error_code::FailedToBuildQuery, "Failed to build query for type " + info->get().name() + "."));
@ -87,7 +87,7 @@ public:
return utils::failure(make_error(error_code::UnknownType, "Failed to determine requested type."));
}
session_query_builder eqb(*schema_);
session_query_builder eqb(*schema_, *this);
auto data = eqb.build<Type>();
if (!data.is_ok()) {
return utils::failure(make_error(error_code::FailedToBuildQuery, "Failed to build query for type " + info->get().name() + "."));

View File

@ -7,6 +7,7 @@
#include "matador/query/query.hpp"
#include "matador/sql/connection.hpp"
#include "matador/sql/executor.hpp"
#include "matador/object/join_columns_collector.hpp"
#include "matador/object/schema.hpp"
@ -28,11 +29,11 @@ struct entity_query_data {
std::unique_ptr<query::basic_condition> where_clause{};
};
class session_query_builder final
{
class session_query_builder final {
public:
explicit session_query_builder(const object::schema &scm)
: schema_(scm) {}
session_query_builder(const object::schema &scm, sql::executor &exec)
: schema_(scm)
, executor_(exec){}
template<class EntityType, typename PrimaryKeyType>
utils::result<entity_query_data, query_build_error> build(const PrimaryKeyType &pk) {
@ -250,6 +251,7 @@ private:
unsigned int column_index{0};
unsigned int table_index{0};
object::join_columns_collector join_columns_collector_;
sql::executor &executor_;
};
template<class Pointer>
@ -287,7 +289,7 @@ void session_query_builder::on_foreign_object(const char *id, Pointer &, const u
const auto result = matador::query::query::select<typename Pointer::value_type>(schema_)
.from(*foreign_table)
.where(sql::column(foreign_table, id, "") == _)
.com;
.prepare(executor_);
}
}

View File

@ -71,7 +71,7 @@ public:
[[nodiscard]] utils::result<sql::statement, utils::error> prepare(sql::executor &exec) const;
[[nodiscard]] std::string str(const sql::executor &exec) const;
[[nodiscard]] sql::query_context compile(const sql::executor &exec, query_mode mode) const;
[[nodiscard]] sql::query_context compile(const sql::dialect &d, query_mode mode) const;
private:
[[nodiscard]] utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::executor &exec) const;

View File

@ -32,21 +32,21 @@ utils::result<std::optional<sql::record>, utils::error> fetchable_query::fetch_o
}
std::string fetchable_query::str(const sql::executor &exec) const {
return exec.str(compile(exec, query_mode::Direct));
return exec.str(compile(exec.dialect(), query_mode::Direct));
}
sql::query_context fetchable_query::compile(const sql::executor &exec, const query_mode mode) const {
sql::query_context fetchable_query::compile(const sql::dialect &d, const query_mode mode) const {
query_compiler compiler;
context_->mode = mode;
return compiler.compile(*context_, exec.dialect(), std::nullopt);
return compiler.compile(*context_, d, std::nullopt);
}
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetchable_query::fetch(const sql::executor &exec) const {
return exec.fetch(compile(exec, query_mode::Direct));
return exec.fetch(compile(exec.dialect(), query_mode::Direct));
}
utils::result<sql::statement, utils::error> fetchable_query::prepare(sql::executor &exec) const {
return exec.prepare(compile(exec, query_mode::Prepared));
return exec.prepare(compile(exec.dialect(), query_mode::Prepared));
}
}

View File

@ -37,7 +37,7 @@ TEST_CASE("Create sql query data for entity with eager has one", "[query][entity
.and_then( [&scm] { return scm.attach<flight>("flights"); } );
REQUIRE(result);
session_query_builder eqb(scm);
session_query_builder eqb(scm, db);
auto data = eqb.build<flight>(17U);
@ -82,7 +82,7 @@ TEST_CASE("Create sql query data for entity with eager belongs to", "[query][ent
.and_then( [&scm] { return scm.attach<book>("books"); } );
REQUIRE(result);
session_query_builder eqb(scm);
session_query_builder eqb(scm, db);
auto data = eqb.build<book>(17);
@ -145,7 +145,7 @@ TEST_CASE("Create sql query data for entity with eager has many belongs to", "[q
.and_then( [&scm] { return scm.attach<order>("orders"); } );
REQUIRE(result);
session_query_builder eqb(scm);
session_query_builder eqb(scm, db);
auto data = eqb.build<order>(17);
@ -200,7 +200,7 @@ TEST_CASE("Create sql query data for entity with eager many to many", "[query][e
.and_then( [&scm] { return scm.attach<ingredient>("ingredients"); } );
// .and_then( [&scm] { return scm.attach<recipe_ingredient>("recipe_ingredients"); } );
session_query_builder eqb(scm);
session_query_builder eqb(scm, db);
auto data = eqb.build<ingredient>(17);
@ -245,7 +245,7 @@ TEST_CASE("Create sql query data for entity with eager many to many (inverse par
.and_then( [&scm] { return scm.attach<course>("courses"); } );
// .and_then( [&scm] { return scm.attach<student_course>("student_courses"); } );
session_query_builder eqb(scm);
session_query_builder eqb(scm, db);
auto data = eqb.build<course>(17);
@ -289,7 +289,7 @@ TEST_CASE("Test eager relationship", "[session][eager]") {
auto result = scm.attach<department>("departments")
.and_then( [&scm] { return scm.attach<employee>("employees"); } );
session_query_builder eqb(scm);
session_query_builder eqb(scm, db);
auto data = eqb.build<department>();
REQUIRE(data.is_ok());