some code refactoring and cleanup
This commit is contained in:
parent
e5072741f0
commit
36168b2e33
|
|
@ -39,64 +39,6 @@ struct session_context {
|
||||||
std::shared_ptr<sql::resolver_service> resolver_service = std::make_shared<sql::resolver_service>();
|
std::shared_ptr<sql::resolver_service> resolver_service = std::make_shared<sql::resolver_service>();
|
||||||
};
|
};
|
||||||
|
|
||||||
class prototype_builder final {
|
|
||||||
public:
|
|
||||||
explicit prototype_builder(const std::unordered_map<std::string, sql::statement> &statements_per_column)
|
|
||||||
: statements_per_column_(statements_per_column) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<typename Type>
|
|
||||||
Type build() const {
|
|
||||||
Type obj;
|
|
||||||
access::process(*this, obj);
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class V>
|
|
||||||
static void on_primary_key(const char * /*id*/, V &/*pk*/,
|
|
||||||
const utils::primary_key_attribute & /*attr*/ = utils::default_pk_attributes) {
|
|
||||||
}
|
|
||||||
|
|
||||||
static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Type>
|
|
||||||
static void on_attribute(const char * /*id*/, Type &/*obj*/,
|
|
||||||
const utils::field_attributes &/*attr*/ = utils::null_attributes) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Pointer>
|
|
||||||
void on_belongs_to(const char *id, Pointer &/*obj*/, const utils::foreign_attributes &/*attr*/) {
|
|
||||||
const auto it = statements_per_column_.find(id);
|
|
||||||
if (it == statements_per_column_.end()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Pointer>
|
|
||||||
void on_has_one(const char * /*id*/, Pointer &/*obj*/, const utils::foreign_attributes &/*attr*/) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class ContainerType>
|
|
||||||
void on_has_many(const char * /*id*/, ContainerType &, const char * /*join_column*/,
|
|
||||||
const utils::foreign_attributes &/*attr*/) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class ContainerType>
|
|
||||||
void on_has_many_to_many(const char * /*id*/, ContainerType &/*cont*/, const char * /*join_column*/,
|
|
||||||
const char * /*inverse_join_column*/, const utils::foreign_attributes &/*attr*/) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class ContainerType>
|
|
||||||
void on_has_many_to_many(const char * /*id*/, ContainerType &/*cont*/, const utils::foreign_attributes &/*attr*/) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
const std::unordered_map<std::string, sql::statement> &statements_per_column_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class session final : public sql::executor {
|
class session final : public sql::executor {
|
||||||
public:
|
public:
|
||||||
session(session_context &&ctx, const query::schema &scm);
|
session(session_context &&ctx, const query::schema &scm);
|
||||||
|
|
@ -125,15 +67,13 @@ public:
|
||||||
utils::result<void, utils::error> drop_table() const;
|
utils::result<void, utils::error> drop_table() const;
|
||||||
utils::result<void, utils::error> drop_table(const std::string &table_name) const;
|
utils::result<void, utils::error> drop_table(const std::string &table_name) const;
|
||||||
|
|
||||||
[[nodiscard]] utils::result<sql::query_result<sql::record>, utils::error>
|
[[nodiscard]] utils::result<sql::query_result<sql::record>, utils::error> fetch_all(const sql::query_context &q) const;
|
||||||
fetch_all(const sql::query_context &q) const;
|
|
||||||
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const std::string &sql) const;
|
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const std::string &sql) const;
|
||||||
|
|
||||||
[[nodiscard]] std::vector<object::attribute> describe_table(const std::string &table_name) const;
|
[[nodiscard]] std::vector<object::attribute> describe_table(const std::string &table_name) const;
|
||||||
[[nodiscard]] bool table_exists(const std::string &table_name) const;
|
[[nodiscard]] bool table_exists(const std::string &table_name) const;
|
||||||
|
|
||||||
[[nodiscard]] utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(
|
[[nodiscard]] utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::query_context &ctx) const override;
|
||||||
const sql::query_context &ctx) const override;
|
|
||||||
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const sql::query_context &ctx) const override;
|
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const sql::query_context &ctx) const override;
|
||||||
[[nodiscard]] utils::result<sql::statement, utils::error> prepare(const sql::query_context &ctx) override;
|
[[nodiscard]] utils::result<sql::statement, utils::error> prepare(const sql::query_context &ctx) override;
|
||||||
[[nodiscard]] std::string str(const sql::query_context &ctx) const override;
|
[[nodiscard]] std::string str(const sql::query_context &ctx) const override;
|
||||||
|
|
@ -141,9 +81,6 @@ public:
|
||||||
[[nodiscard]] std::shared_ptr<sql::resolver_service> resolver() const override;
|
[[nodiscard]] std::shared_ptr<sql::resolver_service> resolver() const override;
|
||||||
[[nodiscard]] const query::basic_schema &schema() const;
|
[[nodiscard]] const query::basic_schema &schema() const;
|
||||||
|
|
||||||
private:
|
|
||||||
friend class query_select;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
sql::connection_pool pool_;
|
sql::connection_pool pool_;
|
||||||
mutable sql::statement_cache cache_;
|
mutable sql::statement_cache cache_;
|
||||||
|
|
@ -226,26 +163,6 @@ utils::result<object::object_ptr<Type>, utils::error> session::insert(object::ob
|
||||||
|
|
||||||
obj.change_state(object::object_state::Persistent);
|
obj.change_state(object::object_state::Persistent);
|
||||||
return utils::ok(obj);
|
return utils::ok(obj);
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// const auto it = schema_.find(typeid(Type));
|
|
||||||
// if (it == schema_.end()) {
|
|
||||||
// return utils::failure(make_error(error_code::UnknownType, "Failed to determine requested type."));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// auto res = query::query::insert()
|
|
||||||
// .into(it->second.name(), query::generator::columns<Type>(schema_))
|
|
||||||
// .values(query::generator::placeholders<Type>())
|
|
||||||
// .prepare(*this);
|
|
||||||
// if (!res) {
|
|
||||||
// return utils::failure(res.err());
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (const auto insert_result = res->bind(*obj).execute(); !insert_result.is_ok()) {
|
|
||||||
// return utils::failure(insert_result.err());
|
|
||||||
// }
|
|
||||||
// return utils::ok(obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class pk_object_binder final {
|
class pk_object_binder final {
|
||||||
|
|
|
||||||
|
|
@ -82,8 +82,7 @@ public:
|
||||||
|
|
||||||
template<class EntityType>
|
template<class EntityType>
|
||||||
utils::result<std::vector<insert_step>, query_build_error> build(const object::object_ptr<EntityType> &ptr) {
|
utils::result<std::vector<insert_step>, query_build_error> build(const object::object_ptr<EntityType> &ptr) {
|
||||||
auto it = schema_.find(typeid(EntityType));
|
if (const auto it = schema_.find(typeid(EntityType)); it == schema_.end()) {
|
||||||
if (it == schema_.end()) {
|
|
||||||
return utils::failure(query_build_error::UnknownType);
|
return utils::failure(query_build_error::UnknownType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue