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:
parent
df1bb0e56d
commit
4ba0f7133b
|
@ -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;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
137
src/model.h
137
src/model.h
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue