in Model: added a test whether Model is a base class of ContainerItemType (list/vector) when doing MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER
This commit is contained in:
parent
d8f7216a73
commit
dc1c601eac
46
src/model.h
46
src/model.h
|
@ -433,14 +433,14 @@ protected:
|
||||||
field_model(field_name, field_name, field_value, field_type);
|
field_model(field_name, field_name, field_value, field_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ModelClass>
|
template<typename ContainerItemType>
|
||||||
void field(const wchar_t * field_name, std::list<ModelClass> & field_value, const FT & field_type = FT::default_type)
|
void field(const wchar_t * field_name, std::list<ContainerItemType> & field_value, const FT & field_type = FT::default_type)
|
||||||
{
|
{
|
||||||
field_list(field_name, field_name, field_value, field_type);
|
field_list(field_name, field_name, field_value, field_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ModelClass>
|
template<typename ContainerItemType>
|
||||||
void field(const wchar_t * field_name, std::vector<ModelClass> & field_value, const FT & field_type = FT::default_type)
|
void field(const wchar_t * field_name, std::vector<ContainerItemType> & field_value, const FT & field_type = FT::default_type)
|
||||||
{
|
{
|
||||||
field_vector(field_name, field_name, field_value, field_type);
|
field_vector(field_name, field_name, field_value, field_type);
|
||||||
}
|
}
|
||||||
|
@ -959,44 +959,50 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<typename ModelClass>
|
template<typename ContainerItemType>
|
||||||
void field_vector(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector<ModelClass> & field_value, const FT & field_type)
|
void field_vector(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector<ContainerItemType> & field_value, const FT & field_type)
|
||||||
{
|
{
|
||||||
ModelClass * list_model_null_pointer = nullptr;
|
ContainerItemType * item_type_null_pointer = nullptr;
|
||||||
|
|
||||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER )
|
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER )
|
||||||
{
|
{
|
||||||
if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) &&
|
if constexpr (std::is_base_of<Model, ContainerItemType>())
|
||||||
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) &&
|
|
||||||
!model_env->model_wrapper )
|
|
||||||
{
|
{
|
||||||
model_env->model_wrapper = new ModelWrapperVector(&field_value);
|
if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) &&
|
||||||
|
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) &&
|
||||||
|
!model_env->model_wrapper )
|
||||||
|
{
|
||||||
|
model_env->model_wrapper = new ModelWrapperVector(&field_value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
field_list_generic(db_field_name, flat_field_name, field_value, list_model_null_pointer, field_type);
|
field_list_generic(db_field_name, flat_field_name, field_value, item_type_null_pointer, field_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<typename ModelClass>
|
template<typename ContainerItemType>
|
||||||
void field_list(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::list<ModelClass> & field_value, const FT & field_type)
|
void field_list(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::list<ContainerItemType> & field_value, const FT & field_type)
|
||||||
{
|
{
|
||||||
ModelClass * list_model_null_pointer = nullptr;
|
ContainerItemType * item_type_null_pointer = nullptr;
|
||||||
|
|
||||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER )
|
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER )
|
||||||
{
|
{
|
||||||
if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) &&
|
if constexpr (std::is_base_of<Model, ContainerItemType>())
|
||||||
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) &&
|
|
||||||
!model_env->model_wrapper )
|
|
||||||
{
|
{
|
||||||
model_env->model_wrapper = new ModelWrapperList(&field_value);
|
if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) &&
|
||||||
|
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) &&
|
||||||
|
!model_env->model_wrapper )
|
||||||
|
{
|
||||||
|
model_env->model_wrapper = new ModelWrapperList(&field_value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
field_list_generic(db_field_name, flat_field_name, field_value, list_model_null_pointer, field_type);
|
field_list_generic(db_field_name, flat_field_name, field_value, item_type_null_pointer, field_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue