diff --git a/include/matador/object/object_proxy.hpp b/include/matador/object/object_proxy.hpp index 5fce8c0..4b8691e 100644 --- a/include/matador/object/object_proxy.hpp +++ b/include/matador/object/object_proxy.hpp @@ -2,6 +2,7 @@ #define OBJECT_PROXY_HPP #include +#include namespace matador::object { @@ -13,7 +14,7 @@ public: }; template -class object_proxy : public basic_object_proxy { +class object_proxy final : public basic_object_proxy { public: object_proxy() = default; explicit object_proxy(Type* obj) @@ -21,20 +22,26 @@ public: explicit object_proxy(std::unique_ptr obj) : obj_(std::move(obj)) {} - [[nodiscard]] void *get() const override { return static_cast(obj_.get()); } + [[nodiscard]] void *get() const override { return static_cast(pointer()); } - Type* operator->() const { return obj_.get(); } - Type& operator*() { return *obj_; } - const Type& operator*() const { return *obj_; } + Type* operator->() const { return pointer(); } + Type& operator*() { return *pointer(); } + const Type& operator*() const { return *pointer(); } - Type* pointer() const { return obj_.get(); } + Type* pointer() const { return resolve(); } - Type& ref() { return *obj_; } - const Type& ref() const { return *obj_; } + Type& ref() { return *pointer(); } + const Type& ref() const { return *pointer(); } void reset(Type* obj) { obj_.reset(obj); } private: + Type* resolve() const { + return resolver_(*this); + } + +private: + std::function resolver_{[](const object_proxy &proxy){ return proxy.obj_.get();}}; std::unique_ptr obj_{}; }; diff --git a/include/matador/object/primary_key_resolver.hpp b/include/matador/object/primary_key_resolver.hpp index c67a814..54a69d9 100644 --- a/include/matador/object/primary_key_resolver.hpp +++ b/include/matador/object/primary_key_resolver.hpp @@ -9,8 +9,6 @@ #include #include -#include - namespace matador::object { diff --git a/include/matador/orm/session.hpp b/include/matador/orm/session.hpp index a31eb01..fd91468 100644 --- a/include/matador/orm/session.hpp +++ b/include/matador/orm/session.hpp @@ -96,26 +96,6 @@ public: return build_select_query(data.release()).template fetch_all(*this); } - // template - // utils::result select() { - // auto c = pool_.acquire(); - // if (!c.valid()) { - // return utils::failure(make_error(error_code::NoConnectionAvailable, "Failed to acquire connection.")); - // } - // auto info = schema_->info(); - // if (!info) { - // return utils::failure(make_error(error_code::UnknownType, "Failed to determine requested type.")); - // } - // - // session_query_builder eqb(*schema_); - // auto data = eqb.build(); - // if (!data.is_ok()) { - // return utils::failure(make_error(error_code::FailedToBuildQuery, "Failed to build query for type " + info->get().name() + ".")); - // } - // - // return utils::ok(build_select_query(data.release()).template fetch_all(*c)); - // } - // template utils::result drop_table(); utils::result drop_table(const std::string &table_name) const; diff --git a/include/matador/sql/statement.hpp b/include/matador/sql/statement.hpp index 75c6c2c..ecff489 100644 --- a/include/matador/sql/statement.hpp +++ b/include/matador/sql/statement.hpp @@ -152,10 +152,6 @@ utils::result, utils::error> statement::fetch() { return statement_proxy_->fetch(*bindings_).and_then([](std::unique_ptr &&value) { return utils::ok(query_result(std::forward(value))); }); -// if (!result.is_ok()) { -// return utils::error(result.err()); -// } -// return query_result(result.release()); } template diff --git a/source/orm/sql/statement.cpp b/source/orm/sql/statement.cpp index b3a2754..214e989 100644 --- a/source/orm/sql/statement.cpp +++ b/source/orm/sql/statement.cpp @@ -54,18 +54,7 @@ utils::result statement::execute() const { return statement_proxy_->execute(*bindings_); } -//bool is_unknown(const std::vector &columns) { -// return std::all_of(std::begin(columns), std::end(columns), [](const auto &col) { -// return col.is_unknown(); -// }); -//} - utils::result, utils::error> statement::fetch() const { -// if (is_unknown(statement_->query_.prototype)) { -// -// } - - auto result = statement_proxy_->fetch(*bindings_); if (!result.is_ok()) { return utils::failure(result.err());