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) bool Model::insert(ModelData * model_data, bool insert_whole_tree)
{ {
ModelEnv model_env_local; 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) bool Model::update(ModelData * model_data, bool update_whole_tree)
{ {
ModelEnv model_env_local; 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) 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); 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) bool Model::save(ModelData * model_data, bool save_whole_tree)
{ {
ModelEnv model_env_local; ModelEnv model_env_local;

View File

@ -39,6 +39,7 @@
#include <list> #include <list>
#include <vector> #include <vector>
#include <typeinfo> #include <typeinfo>
#include <type_traits>
#include "textstream/textstream.h" #include "textstream/textstream.h"
#include "modelconnector.h" #include "modelconnector.h"
@ -109,19 +110,24 @@ public:
virtual std::string to_string(); virtual std::string to_string();
virtual void generate_insert_query(PT::TextStream & stream, ModelData * model_data = nullptr); 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(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 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(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 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(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(ModelData & model_data, bool save_whole_tree = true);
virtual bool save(bool save_whole_tree = true);
virtual void generate_select_columns(PT::TextStream & stream); virtual void generate_select_columns(PT::TextStream & stream);
@ -1106,14 +1112,29 @@ protected:
{ {
if( model_connector && model_env ) 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 ) 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); 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 ) 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> template<typename FieldValue>
void add_field_for_select(const wchar_t * new_column_expression, const wchar_t * new_column_name, FieldValue & field_value) void add_field_for_select(const wchar_t * new_column_expression, const wchar_t * new_column_name, FieldValue & field_value)
{ {