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

View File

@ -112,16 +112,6 @@
typedef bool (Model::*ModelMember)() const; \ typedef bool (Model::*ModelMember)() const; \
ModelMember model_member = static_cast<ModelMember>(method); \ ModelMember model_member = static_cast<ModelMember>(method); \
field_member_ezc(db_field_name, flat_field_name, model_member, field_type); \ 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 #endif
@ -273,8 +263,11 @@ public:
model_env->db_field_name = db_field_name; model_env->db_field_name = db_field_name;
model_env->flat_field_name = flat_field_name; model_env->flat_field_name = flat_field_name;
model_env->model_data = model_data; model_env->model_data = model_data;
model_env->ezc_fun_info = &fun_info; model_env->ezc_fun_info = &fun_info;
model_env->ezc_fun_info_typeinfo = &typeid(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; model_env->model = this;
try try
@ -288,6 +281,23 @@ public:
throw; 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; model_env = nullptr;
return model_env_local.was_field_found; return model_env_local.was_field_found;
} }
@ -758,14 +768,10 @@ protected:
{ {
model_env->was_field_found = true; 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 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); 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); 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->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 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)) ) (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->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)) ) (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->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 )
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) {
{ model_env->ezc_var_space_local->set(res);
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);
} }
} }
} }
@ -1556,29 +1559,29 @@ protected:
} }
// those methods are used when converting fields to bool for Ezc library // those methods are used when converting fields to bool for Ezc library
virtual bool convert_to_bool(char v); // virtual bool convert_to_bool(char v);
virtual bool convert_to_bool(unsigned char v); // virtual bool convert_to_bool(unsigned char v);
virtual bool convert_to_bool(wchar_t v); // virtual bool convert_to_bool(wchar_t v);
virtual bool convert_to_bool(const std::wstring & str); // virtual bool convert_to_bool(const std::wstring & str);
virtual bool convert_to_bool(const wchar_t * 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 std::string & str);
virtual bool convert_to_bool(const char * str); // virtual bool convert_to_bool(const char * str);
virtual bool convert_to_bool(bool v); // virtual bool convert_to_bool(bool v);
virtual bool convert_to_bool(short v); // virtual bool convert_to_bool(short v);
virtual bool convert_to_bool(unsigned short v); // virtual bool convert_to_bool(unsigned short v);
virtual bool convert_to_bool(int v); // virtual bool convert_to_bool(int v);
virtual bool convert_to_bool(unsigned int v); // virtual bool convert_to_bool(unsigned int v);
virtual bool convert_to_bool(long v); // virtual bool convert_to_bool(long v);
virtual bool convert_to_bool(unsigned long v); // virtual bool convert_to_bool(unsigned long v);
virtual bool convert_to_bool(long long v); // virtual bool convert_to_bool(long long v);
virtual bool convert_to_bool(unsigned long long v); // virtual bool convert_to_bool(unsigned long long v);
virtual bool convert_to_bool(float v); // virtual bool convert_to_bool(float v);
virtual bool convert_to_bool(double v); // virtual bool convert_to_bool(double v);
virtual bool convert_to_bool(long 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::Date & date);
virtual bool convert_to_bool(const pt::TextStream & val); // 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::WTextStream & val);
virtual bool convert_to_bool(const pt::Space & space); // virtual bool convert_to_bool(const pt::Space & space);
template<typename ModelClass> friend class Finder; template<typename ModelClass> friend class Finder;

View File

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