diff --git a/Application/Application.vcxproj b/Application/Application.vcxproj index 7d10056..6cfd673 100644 --- a/Application/Application.vcxproj +++ b/Application/Application.vcxproj @@ -237,6 +237,7 @@ + diff --git a/Application/Application.vcxproj.filters b/Application/Application.vcxproj.filters index d36a5c1..ce2c06c 100644 --- a/Application/Application.vcxproj.filters +++ b/Application/Application.vcxproj.filters @@ -144,6 +144,9 @@ Header Files\Model + + Header Files\Common\ORM + diff --git a/Application/BaseQuery.h b/Application/BaseQuery.h index 8a4172c..158b9b1 100644 --- a/Application/BaseQuery.h +++ b/Application/BaseQuery.h @@ -72,11 +72,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_items_future = std::async(std::launch::async, &BaseQuery::GetAll, this, table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); - auto inner_items = inner_items_future.get(); + (item.get()->*(D).pointer) = inner_items_future.get(); #else - auto inner_items = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); + (item.get()->*(D).pointer) = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_items); } } else if constexpr (is_shared_ptr_v) @@ -91,11 +90,11 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_item_future = std::async(std::launch::async, &BaseQuery::GetSingle, this, PKEY " = '" + id + "'", includes); - auto inner_item = inner_item_future.get(); + (item.get()->*(D).pointer) = inner_item_future.get(); #else - auto inner_item = GetSingle(PKEY " = '" + id + "'", includes); + (item.get()->*(D).pointer) = GetSingle(PKEY " = '" + id + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_item); + } } } @@ -162,11 +161,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_items_future = std::async(std::launch::async, &BaseQuery::GetAll, this, table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); - auto inner_items(inner_items_future.get()); + (item.get()->*(D).pointer) = (inner_items_future.get()); #else - auto inner_items = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); + (item.get()->*(D).pointer) = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_items); } } else if constexpr (is_shared_ptr_v) @@ -181,11 +179,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_item_future = std::async(std::launch::async, &BaseQuery::GetSingle, this, PKEY " = '" + id + "'", includes); - auto inner_item = inner_item_future.get(); + (item.get()->*(D).pointer) = inner_item_future.get(); #else - auto inner_item = GetSingle(PKEY " = '" + id + "'", includes); + (item.get()->*(D).pointer) = GetSingle(PKEY " = '" + id + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_item); } } @@ -302,11 +299,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_items_future = std::async(std::launch::async, &BaseQuery::GetAll, this, table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); - auto inner_items = inner_items_future.get(); + (item.get()->*(D).pointer) = inner_items_future.get(); #else - auto inner_items = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); + (item.get()->*(D).pointer) = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_items); } } else if constexpr (is_shared_ptr_v) @@ -321,11 +317,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_ptr_item_future = std::async(std::launch::async, &BaseQuery::GetSingle, this, PKEY " = '" + id + "'", includes); - auto inner_ptr_item = inner_ptr_item_future.get(); + (item.get()->*(D).pointer) = inner_ptr_item_future.get(); #else - auto inner_ptr_item = GetSingle(PKEY " = '" + id + "'", includes); + (item.get()->*(D).pointer) = GetSingle(PKEY " = '" + id + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_ptr_item); } } @@ -400,11 +395,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_items_future = std::async(std::launch::async, &BaseQuery::GetAll, this, table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes_copy); - auto inner_items = inner_items_future.get(); + (item.get()->*(D).pointer) = inner_items_future.get(); #else - auto inner_items = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); + (item.get()->*(D).pointer) = GetAll(table_name + "Id = '" + client->GetStringResult(PKEY) + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_items); } } else if constexpr (is_shared_ptr_v) @@ -419,11 +413,10 @@ class APPLICATION_API BaseQuery includes_copy.erase(std::remove_if(includes_copy.begin(), includes_copy.end(), [&](std::string s) { return s == D.name; }), includes_copy.end()); #ifdef ASYNC auto inner_item_future = std::async(std::launch::async, &BaseQuery::GetSingle, this, PKEY " = '" + id + "'", includes); - auto inner_item = inner_item_future.get(); + (item.get()->*(D).pointer) = inner_item_future.get(); #else - auto inner_item = GetSingle(PKEY " = '" + id + "'", includes); + (item.get()->*(D).pointer) = GetSingle(PKEY " = '" + id + "'", includes); #endif // ASYNC - (item.get()->*(D).pointer) = std::any_cast(inner_item); } } diff --git a/Application/BaseQueryV3.h b/Application/BaseQueryV3.h new file mode 100644 index 0000000..3c355df --- /dev/null +++ b/Application/BaseQueryV3.h @@ -0,0 +1,28 @@ +#pragma once +#include +#include + +//TODO: Implement Query class + +template ::type> +class Query +{ +public: + Query(); + ~Query(); + Query& Where(std::string where) + { + _where = where; + return *this; + } + + template + Query& Include(F f) + { + _includes.push_back(typeid(f()).name()); + return *this; + } + +private: + std::string _command; +}; \ No newline at end of file