start adding support for Ezc library - Ezc::Generator is able to get variable value and call a static function
This commit is contained in:
143
src/model.h
143
src/model.h
@@ -50,6 +50,11 @@
|
||||
#include "ft.h"
|
||||
|
||||
|
||||
// use a macro
|
||||
#include "funinfo.h"
|
||||
////////////////////
|
||||
|
||||
|
||||
namespace morm
|
||||
{
|
||||
|
||||
@@ -137,7 +142,6 @@ public:
|
||||
ModelEnv model_env_local;
|
||||
model_env = &model_env_local;
|
||||
model_env->model_work_mode = MORM_MODEL_WORK_MODE_SET_FIELD_VALUE;
|
||||
model_env->field_index = 0;
|
||||
table(); // CHECK ME it is needed to set table name?
|
||||
|
||||
FieldValueHelper field_value_helper;
|
||||
@@ -169,6 +173,86 @@ public:
|
||||
}
|
||||
|
||||
|
||||
Model * get_field_model(const wchar_t * db_field_name, const wchar_t * flat_field_name)
|
||||
{
|
||||
ModelEnv model_env_local;
|
||||
model_env = &model_env_local;
|
||||
model_env->model_work_mode = MORM_MODEL_WORK_MODE_GET_FIELD_MODEL;
|
||||
model_env->flat_field_name = flat_field_name;
|
||||
Model * model = nullptr;
|
||||
|
||||
try
|
||||
{
|
||||
fields();
|
||||
model = model_env->model;
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
model_env = nullptr;
|
||||
throw;
|
||||
}
|
||||
|
||||
if( !model_env->model && model_connector )
|
||||
{
|
||||
pt::Log * plog = model_connector->get_logger();
|
||||
|
||||
if( plog )
|
||||
{
|
||||
(*plog) << pt::Log::log1 << "Morm: I cannot find such a property: ";
|
||||
put_fields_to_log(*plog, db_field_name, flat_field_name);
|
||||
(*plog) << pt::Log::logend;
|
||||
}
|
||||
}
|
||||
|
||||
model_env = nullptr;
|
||||
return model;
|
||||
}
|
||||
|
||||
|
||||
void put_field_value(const wchar_t * flat_field_name, pt::TextStream & stream, bool clear_stream = true);
|
||||
void put_field_value(const wchar_t * flat_field_name, ModelData * model_data, pt::TextStream & stream, bool clear_stream = true);
|
||||
|
||||
// put in macro
|
||||
template<typename FunInfoStreamType>
|
||||
void put_field_value(const wchar_t * flat_field_name, ModelData * model_data, Ezc::FunInfo<FunInfoStreamType> & fun_info, pt::TextStream & stream, bool clear_stream)
|
||||
{
|
||||
if( clear_stream )
|
||||
{
|
||||
stream.clear();
|
||||
}
|
||||
|
||||
ModelEnv model_env_local;
|
||||
model_env = &model_env_local;
|
||||
|
||||
model_env->has_primary_key_set = has_primary_key_set;
|
||||
model_env->model_work_mode = MORM_MODEL_WORK_MODE_GENERATING_FLAT_STRING;
|
||||
model_env->model_data = model_data;
|
||||
model_env->ezc_fun_info = &fun_info;
|
||||
model_env->ezc_fun_info_typeinfo = &typeid(fun_info);
|
||||
|
||||
if( model_connector )
|
||||
{
|
||||
FlatConnector * flat_connector = model_connector->get_flat_connector();
|
||||
|
||||
if( flat_connector )
|
||||
{
|
||||
try
|
||||
{
|
||||
flat_connector->to_text(flat_field_name, stream, *this);
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
model_env = nullptr;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model_env = nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
ModelConnector * model_connector;
|
||||
@@ -341,6 +425,12 @@ protected:
|
||||
field_list(field_name, field_name, field_value, list_model_null_pointer, field_type);
|
||||
}
|
||||
|
||||
template<typename FunInfoStreamType>
|
||||
void field(const wchar_t * field_name, void (*fun)(Ezc::FunInfo<FunInfoStreamType> &), const FT & field_type = FT::default_type)
|
||||
{
|
||||
field_fun(field_name, field_name, fun, field_type);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* field methods which take two names: db_field_name and flat_field_name
|
||||
@@ -461,6 +551,11 @@ protected:
|
||||
field_list(db_field_name, flat_field_name, field_value, list_model_null_pointer, field_type);
|
||||
}
|
||||
|
||||
template<typename FunInfoStreamType>
|
||||
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (*fun)(Ezc::FunInfo<FunInfoStreamType> &), const FT & field_type = FT::default_type)
|
||||
{
|
||||
field_fun(db_field_name, flat_field_name, fun, field_type);
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
@@ -528,7 +623,7 @@ protected:
|
||||
|
||||
|
||||
template<typename FieldValue>
|
||||
void field_generic_generate_flat_string(const wchar_t * db_field_name, const wchar_t * flat_field_name, FieldValue & field_value, const FT & field_type)
|
||||
void field_generic_generate_flat_string(const wchar_t * flat_field_name, FieldValue & field_value, const FT & field_type)
|
||||
{
|
||||
FlatConnector * flat_connector = model_connector->get_flat_connector();
|
||||
|
||||
@@ -618,7 +713,7 @@ protected:
|
||||
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_FLAT_STRING )
|
||||
{
|
||||
field_generic_generate_flat_string(db_field_name, flat_field_name, field_value, field_type);
|
||||
field_generic_generate_flat_string(flat_field_name, field_value, field_type);
|
||||
}
|
||||
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_DB_SQL )
|
||||
@@ -639,6 +734,47 @@ protected:
|
||||
}
|
||||
|
||||
|
||||
template<typename FunInfoStreamType>
|
||||
void field_fun(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (*fun)(Ezc::FunInfo<FunInfoStreamType> &), const FT & field_type)
|
||||
{
|
||||
if( model_connector && model_env )
|
||||
{
|
||||
if( field_type.is_primary_key() )
|
||||
{
|
||||
model_env->was_primary_key_read = true;
|
||||
}
|
||||
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_FLAT_STRING )
|
||||
{
|
||||
field_fun_generate_flat_string(flat_field_name, fun, field_type);
|
||||
}
|
||||
|
||||
// if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_DB_SQL )
|
||||
// {
|
||||
// field_generic_generate_db_sql(db_field_name, flat_field_name, field_value, field_type);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename FunInfoStreamType>
|
||||
void field_fun_generate_flat_string(const wchar_t * flat_field_name, void (*fun)(Ezc::FunInfo<FunInfoStreamType> &), const FT & field_type)
|
||||
{
|
||||
FlatConnector * flat_connector = model_connector->get_flat_connector();
|
||||
|
||||
if( flat_connector )
|
||||
{
|
||||
FlatExpression * flat_expression = flat_connector->get_expression();
|
||||
|
||||
if( flat_expression && !is_empty_field(flat_field_name) )
|
||||
{
|
||||
flat_expression->field(flat_field_name, fun, field_type, model_env);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void field_model_left_join(const wchar_t * db_field_name, Model & field_model, const FT & field_type, DbExpression * db_expression);
|
||||
void field_model_save_key(const wchar_t * db_field_name);
|
||||
void field_model_set_parent_key_in_child(const wchar_t * db_field_name, Model & field_model);
|
||||
@@ -1008,6 +1144,7 @@ protected:
|
||||
template<typename ModelClass> friend class Cursor;
|
||||
friend class BaseExpression;
|
||||
friend class DbConnector;
|
||||
friend class FlatConnector;
|
||||
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user