remove field(...) methods with void (ClassName::*method)(morm::Wrapper &) arguments

use new variables: ezc_var_space_local and ezc_var_date from ModelEnv
This commit is contained in:
Tomasz Sowa 2021-11-05 09:40:16 +01:00
parent df1bb0e56d
commit 4ba0f7133b
3 changed files with 87 additions and 72 deletions

View File

@ -1576,6 +1576,15 @@ void Model::field_model(const wchar_t * db_field_name, const wchar_t * flat_fiel
}
}
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_PUT_FIELD_RAW_VALUE_TO_STREAM )
{
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 = &field_model;
}
}
field_model.model_env = nullptr;
}
}
@ -1888,7 +1897,7 @@ void Model::field_member(
}
/*
bool Model::convert_to_bool(char v)
{
return v != 0;
@ -2009,7 +2018,7 @@ bool Model::convert_to_bool(const pt::Space & space)
{
return false;
}
*/

View File

@ -112,16 +112,6 @@
typedef bool (Model::*ModelMember)() const; \
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::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::Wrapper &), const morm::FT & field_type = morm::FT::default_type) \
{ \
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); \
}
#endif
@ -273,8 +263,11 @@ public:
model_env->db_field_name = db_field_name;
model_env->flat_field_name = flat_field_name;
model_env->model_data = model_data;
model_env->ezc_fun_info = &fun_info;
model_env->ezc_fun_info_typeinfo = &typeid(fun_info);
model_env->ezc_var_space_local = &fun_info.res.space_local;
model_env->model = this;
try
@ -288,6 +281,23 @@ public:
throw;
}
if( model_env->ezc_var_space_local && model_env->ezc_var_space_local->type != pt::Space::Type::type_null )
{
fun_info.res.type = Ezc::Var<FunInfoStreamType>::Type::TYPE_SPACE_LOCAL;
}
else
if( model_env->ezc_var_date )
{
fun_info.res.type = Ezc::Var<FunInfoStreamType>::Type::TYPE_DATE;
fun_info.res.date = model_env->ezc_var_date;
}
else
if( model_env->model )
{
fun_info.res.type = Ezc::Var<FunInfoStreamType>::Type::TYPE_MODEL;
fun_info.res.model = model_env->model;
}
model_env = nullptr;
return model_env_local.was_field_found;
}
@ -758,14 +768,10 @@ protected:
{
model_env->was_field_found = true;
if( model_env->stream )
if( model_env->ezc_var_space_local )
{
(*model_env->stream) << field_value;
model_env->ezc_var_space_local->set(field_value);
}
#ifdef MORM_HAS_EZC_LIBRARY
model_env->ezc_fun_result = convert_to_bool(field_value);
#endif
}
}
@ -832,6 +838,20 @@ protected:
}
}
else
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_PUT_FIELD_RAW_VALUE_TO_STREAM )
{
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->was_field_found = true;
if( model_env->ezc_var_date )
{
model_env->ezc_var_date = &field_value;
}
}
}
else
{
field_generic(db_field_name, flat_field_name, field_value, field_type);
}
@ -936,7 +956,6 @@ protected:
{
Ezc::Env<FunInfoStreamType> * ezc_fun_info = reinterpret_cast<Ezc::Env<FunInfoStreamType>*>(model_env->ezc_fun_info);
(model_env->model->*method)(*ezc_fun_info);
model_env->ezc_fun_result = ezc_fun_info->res; // ezc_fun_info->res is overwritten in get_raw_value() after fields() method call so we have to remember it in model_env
}
else
{
@ -971,7 +990,12 @@ protected:
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) )
{
model_env->was_field_found = true;
model_env->ezc_fun_result = (model_env->model->*method)();
bool res = (model_env->model->*method)();
if( model_env->ezc_var_space_local )
{
model_env->ezc_var_space_local->set(res);
}
}
}
}
@ -998,33 +1022,12 @@ protected:
(is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) )
{
model_env->was_field_found = true;
model_env->ezc_fun_result = (model_env->model->*method)();
}
}
}
}
bool res = (model_env->model->*method)();
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 )
{
if( field_type.is_primary_key() )
{
pt::Log * plog = model_connector->get_logger();
if( plog )
{
(*plog) << pt::Log::log1 << "Morm:: an ezc method cannot be used as a primary key" << pt::Log::logend;
}
}
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->model->*method)(model_env->wrapper);
if( model_env->ezc_var_space_local )
{
model_env->ezc_var_space_local->set(res);
}
}
}
}
@ -1556,29 +1559,29 @@ protected:
}
// those methods are used when converting fields to bool for Ezc library
virtual bool convert_to_bool(char v);
virtual bool convert_to_bool(unsigned char v);
virtual bool convert_to_bool(wchar_t v);
virtual bool convert_to_bool(const std::wstring & str);
virtual bool convert_to_bool(const wchar_t * str);
virtual bool convert_to_bool(const std::string & str);
virtual bool convert_to_bool(const char * str);
virtual bool convert_to_bool(bool v);
virtual bool convert_to_bool(short v);
virtual bool convert_to_bool(unsigned short v);
virtual bool convert_to_bool(int v);
virtual bool convert_to_bool(unsigned int v);
virtual bool convert_to_bool(long v);
virtual bool convert_to_bool(unsigned long v);
virtual bool convert_to_bool(long long v);
virtual bool convert_to_bool(unsigned long long v);
virtual bool convert_to_bool(float v);
virtual bool convert_to_bool(double v);
virtual bool convert_to_bool(long double v);
virtual bool convert_to_bool(const pt::Date & date);
virtual bool convert_to_bool(const pt::TextStream & val);
virtual bool convert_to_bool(const pt::WTextStream & val);
virtual bool convert_to_bool(const pt::Space & space);
// virtual bool convert_to_bool(char v);
// virtual bool convert_to_bool(unsigned char v);
// virtual bool convert_to_bool(wchar_t v);
// virtual bool convert_to_bool(const std::wstring & str);
// virtual bool convert_to_bool(const wchar_t * str);
// virtual bool convert_to_bool(const std::string & str);
// virtual bool convert_to_bool(const char * str);
// virtual bool convert_to_bool(bool v);
// virtual bool convert_to_bool(short v);
// virtual bool convert_to_bool(unsigned short v);
// virtual bool convert_to_bool(int v);
// virtual bool convert_to_bool(unsigned int v);
// virtual bool convert_to_bool(long v);
// virtual bool convert_to_bool(unsigned long v);
// virtual bool convert_to_bool(long long v);
// virtual bool convert_to_bool(unsigned long long v);
// virtual bool convert_to_bool(float v);
// virtual bool convert_to_bool(double v);
// virtual bool convert_to_bool(long double v);
// virtual bool convert_to_bool(const pt::Date & date);
// virtual bool convert_to_bool(const pt::TextStream & val);
// virtual bool convert_to_bool(const pt::WTextStream & val);
// virtual bool convert_to_bool(const pt::Space & space);
template<typename ModelClass> friend class Finder;

View File

@ -101,8 +101,9 @@ public:
#ifdef MORM_HAS_EZC_LIBRARY
void * ezc_fun_info;
bool ezc_fun_result;
const std::type_info * ezc_fun_info_typeinfo;
pt::Space * ezc_var_space_local;
pt::Date * ezc_var_date;
#endif
ModelEnv()
@ -141,8 +142,9 @@ public:
#ifdef MORM_HAS_EZC_LIBRARY
ezc_fun_info = e.ezc_fun_info;
ezc_fun_result = e.ezc_fun_result;
ezc_fun_info_typeinfo = e.ezc_fun_info_typeinfo;
ezc_var_space_local = e.ezc_var_space_local;
ezc_var_date = e.ezc_var_date;
#endif
// schema_name and table_name don't have to be copied
@ -192,8 +194,9 @@ public:
#ifdef MORM_HAS_EZC_LIBRARY
ezc_fun_info = nullptr;
ezc_fun_result = false;
ezc_fun_info_typeinfo = nullptr;
ezc_var_space_local = nullptr;
ezc_var_date = nullptr;
#endif
}