added: Wrapper class as a wrapper for: a model, model container (list/vector), Space or Date

added BaseObjectWrapper as base class for: SpaceWrapper and ModelContainerWrapper
removed: ModelWrapperModel, now one Model doesn't need a wrapper
renamed: ModelWrapperSpace -> SpaceWrapper, now as a base class it has BaseObjectWrapper
renamed: Model::get_model_wrapper() -> Model::get_wrapper() - now it returns Wrapper object
removed logging from Model::get_model() and Model::get_wrapper()
field() methods don't take ModelWrapper** but Wrapper& now
This commit is contained in:
2021-07-01 22:55:56 +02:00
parent 84fd351bfc
commit dc6c70499c
8 changed files with 505 additions and 285 deletions

View File

@@ -48,7 +48,7 @@
#include "flatexpression.h"
#include "modelenv.h"
#include "ft.h"
#include "modelwrapper.h"
#include "wrapper.h"
#ifdef MORM_HAS_EZC_LIBRARY
#include "funinfo.h"
@@ -113,13 +113,13 @@
ModelMember model_member = static_cast<ModelMember>(method); \
field_member_ezc(db_field_name, flat_field_name, model_member, field_type); \
} \
void field(const wchar_t * field_name, void (ClassName::*method)(morm::ModelWrapper **), const morm::FT & field_type = morm::FT::default_type) \
void field(const wchar_t * field_name, void (ClassName::*method)(morm::Wrapper &), const morm::FT & field_type = morm::FT::default_type) \
{ \
field(field_name, field_name, method, field_type); \
} \
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (ClassName::*method)(morm::ModelWrapper **), const morm::FT & field_type = morm::FT::default_type) \
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (ClassName::*method)(morm::Wrapper &), const morm::FT & field_type = morm::FT::default_type) \
{ \
typedef void (Model::*ModelMember)(morm::ModelWrapper **); \
typedef void (Model::*ModelMember)(morm::Wrapper &); \
ModelMember model_member = static_cast<ModelMember>(method); \
field_member_ezc(db_field_name, flat_field_name, model_member, field_type); \
}
@@ -252,11 +252,11 @@ public:
}
Model * get_model(const wchar_t * db_field_name, const wchar_t * flat_field_name, bool put_log_if_not_found = true);
ModelWrapper * get_model_wrapper(const wchar_t * db_field_name, const wchar_t * flat_field_name, bool put_log_if_not_found = true);
Model * get_model(const wchar_t * db_field_name, const wchar_t * flat_field_name);
Wrapper get_wrapper(const wchar_t * db_field_name, const wchar_t * flat_field_name);
bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Stream & stream, bool clear_stream = true, bool put_log_if_not_found = true);
bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, ModelData * model_data, pt::Stream & stream, bool clear_stream = true, bool put_log_if_not_found = true);
bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Stream & stream, bool clear_stream = true);
bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, ModelData * model_data, pt::Stream & stream, bool clear_stream = true);
@@ -453,7 +453,7 @@ protected:
void field(const wchar_t * field_name, pt::Date & field_value, const FT & field_type = FT::default_type)
{
field_generic(field_name, field_name, field_value, field_type);
field_date(field_name, field_name, field_value, field_type);
}
void field(const wchar_t * field_name, pt::Space & field_value, const FT & field_type = FT::default_type)
@@ -583,7 +583,7 @@ protected:
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Date & field_value, const FT & field_type = FT::default_type)
{
field_generic(db_field_name, flat_field_name, field_value, field_type);
field_date(db_field_name, flat_field_name, field_value, field_type);
}
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Space & field_value, const FT & field_type = FT::default_type)
@@ -824,6 +824,27 @@ protected:
}
void field_date(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Date & field_value, const FT & field_type)
{
if( model_connector && model_env )
{
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)) &&
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) &&
!model_env->wrapper.date )
{
model_env->wrapper.date = &field_value;
}
}
else
{
field_generic(db_field_name, flat_field_name, field_value, field_type);
}
}
}
void field_space(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Space & field_value, const FT & field_type)
{
if( model_connector && model_env )
@@ -832,9 +853,9 @@ protected:
{
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->wrapper.space_wrapper )
{
model_env->model_wrapper = new ModelWrapperSpace(&field_value);
model_env->wrapper.space_wrapper = new SpaceWrapper(&field_value);
}
}
else
@@ -989,7 +1010,7 @@ protected:
}
void field_member_ezc(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (Model::*method)(ModelWrapper ** model_wrapper), const FT & field_type)
void field_member_ezc(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (Model::*method)(Wrapper & wrapper), const FT & field_type)
{
if( model_connector && model_env && model_env->model )
{
@@ -1008,7 +1029,7 @@ protected:
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->*method)(&model_env->model_wrapper);
(model_env->model->*method)(model_env->wrapper);
}
}
}
@@ -1178,9 +1199,9 @@ protected:
{
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->wrapper.model_container_wrapper )
{
model_env->model_wrapper = new ModelWrapperVector(&field_value);
model_env->wrapper.model_container_wrapper = new ModelWrapperVector(&field_value);
}
}
}
@@ -1203,9 +1224,9 @@ protected:
{
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->wrapper.model_container_wrapper )
{
model_env->model_wrapper = new ModelWrapperList(&field_value);
model_env->wrapper.model_container_wrapper = new ModelWrapperList(&field_value);
}
}
}
@@ -1228,9 +1249,9 @@ protected:
{
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->wrapper.model_container_wrapper )
{
model_env->model_wrapper = new ModelWrapperVectorPointer(&field_value);
model_env->wrapper.model_container_wrapper = new ModelWrapperVectorPointer(&field_value);
}
}
}
@@ -1253,9 +1274,9 @@ protected:
{
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->wrapper.model_container_wrapper )
{
model_env->model_wrapper = new ModelWrapperListPointer(&field_value);
model_env->wrapper.model_container_wrapper = new ModelWrapperListPointer(&field_value);
}
}
}