session queries as statement progress
This commit is contained in:
@@ -101,12 +101,12 @@ void foreign_node_completer::on_has_many( const char* /*id*/, CollectionType&, c
|
||||
}
|
||||
|
||||
template<class CollectionType>
|
||||
void foreign_node_completer::on_has_many_to_many( const char* id, CollectionType& /*collection*/, const char* /*join_column*/, const char* /*inverse_join_column*/, const utils::foreign_attributes& /*attr*/ ) {
|
||||
void foreign_node_completer::on_has_many_to_many( const char* /*id*/, CollectionType& /*collection*/, const char* /*join_column*/, const char* /*inverse_join_column*/, const utils::foreign_attributes& /*attr*/ ) {
|
||||
attach_node<typename CollectionType::value_type::value_type>(/*id*/);
|
||||
}
|
||||
|
||||
template<class CollectionType>
|
||||
void foreign_node_completer::on_has_many_to_many( const char* id, CollectionType& /*collection*/, const utils::foreign_attributes& /*attr*/ ) {
|
||||
void foreign_node_completer::on_has_many_to_many( const char* /*id*/, CollectionType& /*collection*/, const utils::foreign_attributes& /*attr*/ ) {
|
||||
attach_node<typename CollectionType::value_type::value_type>(/*id*/);
|
||||
}
|
||||
|
||||
|
||||
@@ -121,15 +121,17 @@ public:
|
||||
return utils::failure(make_error(error_code::FailedToBuildQuery, "Failed to build query for type " + info->get().name() + "."));
|
||||
}
|
||||
|
||||
auto obj = build_select_query(data.release()).template fetch_one<Type>(*this);
|
||||
auto res = build_select_query(data.release()).prepare(*this);
|
||||
// auto obj = build_select_query(data.release()).template fetch_one<Type>(*this);
|
||||
|
||||
if (!obj) {
|
||||
return utils::failure(obj.err());
|
||||
if (!res) {
|
||||
return utils::failure(res.err());
|
||||
}
|
||||
if (!obj->get()) {
|
||||
auto stmt_result = res->bind(0, const_cast<PrimaryKeyType&>(pk)).template fetch_one<Type>();
|
||||
if (!stmt_result) {
|
||||
return utils::failure(make_error(error_code::FailedToFindObject, "Failed to find object of type " + info->get().name() + " with primary key " + std::to_string(pk) + "."));
|
||||
}
|
||||
return utils::ok(object::object_ptr<Type>{ obj->release() });
|
||||
return utils::ok(object::object_ptr<Type>{ stmt_result->release() });
|
||||
}
|
||||
|
||||
template<typename Type>
|
||||
|
||||
@@ -88,9 +88,9 @@ public:
|
||||
if (pk_.is_null()) {
|
||||
entity_query_data_.pk_column_name = id;
|
||||
} else if (pk_.is_integer()) {
|
||||
auto v = *pk_.as<V>();
|
||||
// auto v = *pk_.as<V>();
|
||||
auto c = sql::column{table_info_stack_.top().table, id, ""};
|
||||
auto co = std::make_unique<query::condition<sql::column, V>>(c, query::basic_condition::operand_type::EQUAL, v);
|
||||
auto co = std::make_unique<query::condition<sql::column, utils::placeholder>>(c, query::basic_condition::operand_type::EQUAL, utils::_);
|
||||
entity_query_data_.where_clause = std::move(co);
|
||||
entity_query_data_.pk_column_name = id;
|
||||
} else if (pk_.is_varchar()) {
|
||||
|
||||
@@ -25,7 +25,7 @@ public:
|
||||
* @param info The database connection info data
|
||||
* @param sql_logger The logging handler
|
||||
*/
|
||||
explicit connection(connection_info info, const logger_ptr &sql_logger = null_logger);
|
||||
explicit connection(const connection_info& info, const logger_ptr &sql_logger = null_logger);
|
||||
/**
|
||||
* @brief Creates a database connection from a connection string.
|
||||
*
|
||||
@@ -147,7 +147,6 @@ private:
|
||||
friend class session;
|
||||
friend class statement_cache;
|
||||
|
||||
connection_info connection_info_;
|
||||
std::unique_ptr<connection_impl> connection_;
|
||||
std::shared_ptr<abstract_sql_logger> logger_ = std::make_shared<null_sql_logger>();
|
||||
};
|
||||
|
||||
@@ -42,14 +42,13 @@ public:
|
||||
[[nodiscard]] const class dialect &dialect() const;
|
||||
|
||||
[[nodiscard]] virtual std::string to_escaped_string(const utils::blob &value) const = 0;
|
||||
[[nodiscard]] const connection_info &info() const;
|
||||
|
||||
protected:
|
||||
explicit connection_impl(const connection_info &info);
|
||||
|
||||
[[nodiscard]] const connection_info &info() const;
|
||||
|
||||
private:
|
||||
std::reference_wrapper<const connection_info> info_;
|
||||
connection_info info_;
|
||||
std::reference_wrapper<const class dialect> dialect_;
|
||||
};
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ public:
|
||||
, creator_(std::move(creator)) {}
|
||||
|
||||
iterator begin() { return std::move(++iterator(this)); }
|
||||
static iterator end() { return {}; }
|
||||
iterator end() { return {}; }
|
||||
|
||||
private:
|
||||
friend class query_result_iterator<Type>;
|
||||
|
||||
Reference in New Issue
Block a user