fixed: in Model::remove(ModelData & model_data, bool remove_whole_tree) we didn't use remove_whole_tree parameter

fixed: compilation erorr when inserting/updating a Model object which has child lists without Model objects such as std::list<int>
added: to Model: methods insert, update, remove and save with one argument: bool save_whole_tree




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1217 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2019-09-25 16:20:37 +00:00
parent 334201fe15
commit ac67f0079a
2 changed files with 58 additions and 11 deletions

View File

@ -239,6 +239,12 @@ bool Model::insert(ModelData & model_data, bool insert_whole_tree)
}
bool Model::insert(bool insert_whole_tree)
{
return insert(nullptr, insert_whole_tree);
}
bool Model::insert(ModelData * model_data, bool insert_whole_tree)
{
ModelEnv model_env_local;
@ -335,6 +341,12 @@ bool Model::update(ModelData & model_data, bool update_whole_tree)
}
bool Model::update(bool update_whole_tree)
{
return update(nullptr, update_whole_tree);
}
bool Model::update(ModelData * model_data, bool update_whole_tree)
{
ModelEnv model_env_local;
@ -419,7 +431,13 @@ void Model::generate_remove_query(PT::TextStream & stream, ModelData * model_dat
bool Model::remove(ModelData & model_data, bool remove_whole_tree)
{
return remove(&model_data);
return remove(&model_data, remove_whole_tree);
}
bool Model::remove(bool remove_whole_tree)
{
return remove(nullptr, remove_whole_tree);
}
@ -494,6 +512,13 @@ bool Model::save(ModelData & model_data, bool save_whole_tree)
return save(&model_data, save_whole_tree);
}
bool Model::save(bool save_whole_tree)
{
return save(nullptr, save_whole_tree);
}
bool Model::save(ModelData * model_data, bool save_whole_tree)
{
ModelEnv model_env_local;

View File

@ -39,6 +39,7 @@
#include <list>
#include <vector>
#include <typeinfo>
#include <type_traits>
#include "textstream/textstream.h"
#include "modelconnector.h"
@ -109,19 +110,24 @@ public:
virtual std::string to_string();
virtual void generate_insert_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool insert(ModelData * model_data = nullptr, bool insert_whole_tree = true);
virtual bool insert(ModelData * model_data, bool insert_whole_tree = true);
virtual bool insert(ModelData & model_data, bool insert_whole_tree = true);
virtual bool insert(bool insert_whole_tree = true);
virtual void generate_update_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool update(ModelData * model_data = nullptr, bool update_whole_tree = true);
virtual bool update(ModelData * model_data, bool update_whole_tree = true);
virtual bool update(ModelData & model_data, bool update_whole_tree = true);
virtual bool update(bool update_whole_tree = true);
virtual void generate_remove_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool remove(ModelData * model_data = nullptr, bool remove_whole_tree = true);
virtual bool remove(ModelData * model_data, bool remove_whole_tree = true);
virtual bool remove(ModelData & model_data, bool remove_whole_tree = true);
virtual bool remove(bool remove_whole_tree = true);
virtual bool save(ModelData * model_data = nullptr, bool save_whole_tree = true);
virtual bool save(ModelData * model_data, bool save_whole_tree = true);
virtual bool save(ModelData & model_data, bool save_whole_tree = true);
virtual bool save(bool save_whole_tree = true);
virtual void generate_select_columns(PT::TextStream & stream);
@ -1106,14 +1112,29 @@ protected:
{
if( model_connector && model_env )
{
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_SET_PARENT_ID )
if( !is_empty_field(db_field_name) )
{
field_list_set_parent_key(db_field_name, field_container, model_container_type);
}
if constexpr (std::is_base_of<Model, ModelContainerType>())
{
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_SET_PARENT_ID )
{
field_list_set_parent_key(db_field_name, field_container, model_container_type);
}
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY )
{
field_list_iterate_through_childs(db_field_name, field_container, model_container_type);
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY )
{
field_list_iterate_through_childs(db_field_name, field_container, model_container_type);
}
}
else
{
PT::Log * plog = model_connector->get_logger();
if( plog )
{
(*plog) << "Morm: ignoring " << db_field_name << " as this is not a container with Model objects" << PT::Log::logend;
}
}
}
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_FLAT_STRING )
@ -1256,6 +1277,7 @@ public:
}
}
// RENAME ME to something like select_field() or field_select()
template<typename FieldValue>
void add_field_for_select(const wchar_t * new_column_expression, const wchar_t * new_column_name, FieldValue & field_value)
{