some work in branches/join_models
- added FinderHelper class - used as a global object for the whole model tree in Finder (some fields moved from ModelData) - added CursorHelper class - used as a global object for the whole model tree in Cursor (some fields moved from ModelData) git-svn-id: svn://ttmath.org/publicrep/morm/branches/join_models@1192 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
@@ -75,12 +75,13 @@ public:
|
||||
virtual void allow_to_use_prefix(bool use_prefix);
|
||||
|
||||
// give me a better name
|
||||
virtual void put_field_doc(Model & model, const void * field_pointer, bool insertable, bool updatable, bool is_primary_key, ModelData * model_data);
|
||||
virtual void put_field_doc(Model & model, const void * field_pointer, bool insertable, bool updatable, bool is_primary_key, ModelEnv * model_env);
|
||||
|
||||
|
||||
|
||||
template<typename FieldValue>
|
||||
void field(const wchar_t * field_name, const FieldValue & field_value, bool insertable = true, bool updatable = true, bool is_primary_key = false, bool add_column_prefix = true, ModelData * model_data = nullptr)
|
||||
void field(const wchar_t * field_name, const FieldValue & field_value, bool insertable = true, bool updatable = true, bool is_primary_key = false,
|
||||
bool add_column_prefix = true, ModelEnv * model_env = nullptr)
|
||||
{
|
||||
if( out_stream && can_field_be_generated(insertable, updatable, is_primary_key) )
|
||||
{
|
||||
@@ -100,10 +101,10 @@ public:
|
||||
put_field_name(field_name, add_column_prefix);
|
||||
out_stream = old_out_stream;
|
||||
|
||||
if( model_data )
|
||||
if( model_env && model_env->finder_helper )
|
||||
{
|
||||
model_data->morm_foreign_keys.emplace_back();
|
||||
std::string & key_str = model_data->morm_foreign_keys.back();
|
||||
model_env->finder_helper->morm_foreign_keys.emplace_back();
|
||||
std::string & key_str = model_env->finder_helper->morm_foreign_keys.back();
|
||||
str.to_string(key_str, false);
|
||||
}
|
||||
}
|
||||
@@ -131,7 +132,7 @@ public:
|
||||
void field_doc(Model & model, const wchar_t * field_name, const FieldValue & field_value,
|
||||
bool insertable = true, bool updatable = true,
|
||||
bool is_primary_key = false, bool add_column_prefix = true,
|
||||
ModelData * model_data = nullptr)
|
||||
ModelEnv * model_env = nullptr)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
@@ -140,7 +141,7 @@ public:
|
||||
put_field_name(field_name, add_column_prefix);
|
||||
put_name_value_separator();
|
||||
|
||||
put_field_doc(model, reinterpret_cast<const void*>(&field_value), insertable, updatable, is_primary_key, model_data);
|
||||
put_field_doc(model, reinterpret_cast<const void*>(&field_value), insertable, updatable, is_primary_key, model_env);
|
||||
put_name_value_separator();
|
||||
|
||||
put_type(field_value, *out_stream);
|
||||
@@ -181,7 +182,7 @@ public:
|
||||
|
||||
template<typename ModelContainer>
|
||||
void field_list(const wchar_t * field_name, ModelContainer & field_value, bool insertable, bool updatable, bool is_primary_key,
|
||||
ModelConnector * model_connector, int model_connector_mode, ModelData * model_data)
|
||||
ModelConnector * model_connector, ModelEnv * model_env)
|
||||
{
|
||||
if( out_stream && can_field_be_generated(insertable, updatable, is_primary_key) )
|
||||
{
|
||||
@@ -196,7 +197,7 @@ public:
|
||||
{
|
||||
put_field_name(field_name);
|
||||
put_name_value_separator();
|
||||
put_field_value_list(field_value, model_connector, model_connector_mode, model_data);
|
||||
put_field_value_list(field_value, model_connector, model_env);
|
||||
}
|
||||
|
||||
field_after();
|
||||
@@ -309,44 +310,50 @@ protected:
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
virtual void before_field_value_list()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
virtual void after_field_value_list()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
virtual void field_value_list_separator()
|
||||
{
|
||||
(*out_stream) << ",";
|
||||
}
|
||||
|
||||
|
||||
// what about lists with a pod types? e.g. list<int>
|
||||
template<typename ModelContainer>
|
||||
void put_field_value_list(ModelContainer & field_value, ModelConnector * model_connector, int model_connector_mode, ModelData * model_data)
|
||||
void put_field_value_list(ModelContainer & field_value, ModelConnector * model_connector, ModelEnv * model_env)
|
||||
{
|
||||
if( out_stream )
|
||||
if( model_connector && model_env && out_stream )
|
||||
{
|
||||
(*out_stream) << "[";// make a virtual method
|
||||
}
|
||||
bool is_first = true;
|
||||
before_field_value_list();
|
||||
|
||||
bool is_first = true;
|
||||
|
||||
for(auto & m : field_value)
|
||||
{
|
||||
if( out_stream )
|
||||
for(auto & m : field_value)
|
||||
{
|
||||
if( !is_first )
|
||||
{
|
||||
if( out_stream )
|
||||
(*out_stream) << ","; // make a virtual method
|
||||
field_value_list_separator();
|
||||
}
|
||||
|
||||
ModelEnv model_env_local;
|
||||
ModelEnv model_env_local(*model_env);
|
||||
m.model_env = &model_env_local;
|
||||
|
||||
//before_field_value(field_value);
|
||||
m.set_connector(model_connector);
|
||||
m.model_env->model_connector_mode = model_connector_mode;
|
||||
m.model_env->model_data = model_data;
|
||||
generate_from_model(m);
|
||||
m.model_env = nullptr;
|
||||
//after_field_value(field_value);
|
||||
is_first = false;
|
||||
}
|
||||
}
|
||||
|
||||
if( out_stream )
|
||||
{
|
||||
(*out_stream) << "]";// make a virtual method
|
||||
after_field_value_list();
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user