added basic support for containers with pointers to models
added to Model: template<typename ContainerItemType> void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::list<ContainerItemType*> & field_value, const FT & field_type = FT::default_type); template<typename ContainerItemType> void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector<ContainerItemType*> & field_value, const FT & field_type = FT::default_type);
This commit is contained in:
@@ -166,8 +166,9 @@ public:
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainer>
|
||||
void field_list(const wchar_t * field_name, ModelContainer & field_value, const FT & field_type, ModelConnector * model_connector, ModelEnv * model_env)
|
||||
template<typename ModelContainer, typename ModelContainerType, typename IsContainerByValueRenameMe>
|
||||
void field_list(const wchar_t * field_name, ModelContainer & field_value, ModelContainerType * model_container_type,
|
||||
const FT & field_type, ModelConnector * model_connector, ModelEnv * model_env, IsContainerByValueRenameMe * foo)
|
||||
{
|
||||
if( out_stream && can_field_be_generated(field_type) )
|
||||
{
|
||||
@@ -182,7 +183,7 @@ public:
|
||||
{
|
||||
put_field_name_and_table_if_needed(field_name, field_type, model_env);
|
||||
put_name_value_separator();
|
||||
put_field_value_list(field_value, model_connector, model_env);
|
||||
put_field_value_list(field_value, model_container_type, model_connector, model_env, foo);
|
||||
}
|
||||
|
||||
field_after();
|
||||
@@ -353,6 +354,92 @@ protected:
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainer, typename ModelContainerType, typename IsContainerByValueRenameMe>
|
||||
void put_field_value_list(ModelContainer & field_value, ModelContainerType * model_container_type, ModelConnector * model_connector,
|
||||
ModelEnv * model_env, IsContainerByValueRenameMe * foo)
|
||||
{
|
||||
if constexpr (std::is_base_of<Model, ModelContainerType>())
|
||||
{
|
||||
if constexpr (std::is_base_of<Model, IsContainerByValueRenameMe>())
|
||||
{
|
||||
put_field_value_list_model_by_value(field_value, model_container_type, model_connector, model_env);
|
||||
}
|
||||
else
|
||||
{
|
||||
put_field_value_list_model_by_pointer(field_value, model_container_type, model_connector, model_env);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainer, typename ModelContainerType>
|
||||
void put_field_value_list_model_by_value(ModelContainer & field_value, ModelContainerType * model_container_type, ModelConnector * model_connector,
|
||||
ModelEnv * model_env)
|
||||
{
|
||||
if( model_connector && model_env && out_stream )
|
||||
{
|
||||
bool is_first = true;
|
||||
before_field_value_list();
|
||||
|
||||
for(auto & child_model_item : field_value)
|
||||
{
|
||||
if( !is_first )
|
||||
{
|
||||
field_value_list_separator();
|
||||
}
|
||||
|
||||
put_field_value_list_model(child_model_item, model_connector, model_env);
|
||||
is_first = false;
|
||||
}
|
||||
|
||||
after_field_value_list();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainer, typename ModelContainerType>
|
||||
void put_field_value_list_model_by_pointer(ModelContainer & field_value, ModelContainerType * model_container_type, ModelConnector * model_connector,
|
||||
ModelEnv * model_env)
|
||||
{
|
||||
if( model_connector && model_env && out_stream )
|
||||
{
|
||||
bool is_first = true;
|
||||
before_field_value_list();
|
||||
|
||||
for(auto * child_model_item : field_value)
|
||||
{
|
||||
if( !is_first )
|
||||
{
|
||||
field_value_list_separator();
|
||||
}
|
||||
|
||||
put_field_value_list_model(*child_model_item, model_connector, model_env);
|
||||
is_first = false;
|
||||
}
|
||||
|
||||
after_field_value_list();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainerType>
|
||||
void put_field_value_list_model(ModelContainerType & child_model, ModelConnector * model_connector, ModelEnv * model_env)
|
||||
{
|
||||
ModelEnv model_env_local(*model_env);
|
||||
child_model.model_env = &model_env_local;
|
||||
child_model.model_env->has_primary_key_set = child_model.get_has_primary_key_set();
|
||||
child_model.set_connector(model_connector);
|
||||
|
||||
generate_from_model(child_model);
|
||||
|
||||
child_model.model_env = nullptr;
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainer>
|
||||
void put_field_value_list_non_model(ModelContainer & field_value, ModelConnector * model_connector)
|
||||
{
|
||||
@@ -377,212 +464,6 @@ protected:
|
||||
}
|
||||
|
||||
|
||||
template<typename ModelContainer>
|
||||
void put_field_value_list(ModelContainer & field_value, ModelConnector * model_connector, ModelEnv * model_env)
|
||||
{
|
||||
if( model_connector && model_env && out_stream )
|
||||
{
|
||||
bool is_first = true;
|
||||
before_field_value_list();
|
||||
|
||||
for(auto & m : field_value)
|
||||
{
|
||||
if( !is_first )
|
||||
{
|
||||
field_value_list_separator();
|
||||
}
|
||||
|
||||
ModelEnv model_env_local(*model_env);
|
||||
m.model_env = &model_env_local;
|
||||
m.model_env->has_primary_key_set = m.get_has_primary_key_set();
|
||||
m.set_connector(model_connector);
|
||||
|
||||
generate_from_model(m);
|
||||
|
||||
m.model_env = nullptr;
|
||||
is_first = false;
|
||||
}
|
||||
|
||||
after_field_value_list();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void put_field_value_list(std::vector<char> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<unsigned char> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<std::wstring> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<std::string> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<bool> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<short> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<unsigned short> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<int> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<unsigned int> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<unsigned long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<long long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<unsigned long long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<float> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<double> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<long double> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::vector<pt::Date> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void put_field_value_list(std::list<char> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<unsigned char> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<std::wstring> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<std::string> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<bool> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<short> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<unsigned short> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<int> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<unsigned int> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<unsigned long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<long long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<unsigned long long> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<float> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<double> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<long double> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
void put_field_value_list(std::list<pt::Date> & field_value, ModelConnector * model_connector, ModelEnv *)
|
||||
{
|
||||
put_field_value_list_non_model(field_value, model_connector);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// used in 'in()' statements, may should be renamed?
|
||||
template<typename FieldValue, typename Container>
|
||||
|
Reference in New Issue
Block a user