start adding support for inserting child models

git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1203 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2019-08-21 17:42:50 +00:00
parent 074be938ca
commit 52422d929e
7 changed files with 83 additions and 14 deletions

View File

@@ -110,8 +110,8 @@ 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);
virtual bool insert(ModelData & model_data);
virtual bool insert(ModelData * model_data = nullptr, bool insert_whole_tree = true);
virtual bool insert(ModelData & model_data, bool insert_whole_tree = true);
virtual void generate_update_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool update(ModelData * model_data = nullptr);
@@ -165,6 +165,7 @@ protected:
virtual ModelData * get_model_data();
virtual bool insert_tree(bool insert_whole_tree);
virtual void map_values_from_query();
@@ -826,6 +827,19 @@ protected:
field_model_left_join(db_field_name, flat_field_name, field_model, insertable, updatable, has_foreign_key, db_expression);
}
if( db_expression->get_work_mode() == MORM_WORK_MODE_MODEL_FIELDS && db_expression->get_output_type() == MORM_OUTPUT_TYPE_DB_INSERT )
{
int not_used_object = 0;
db_expression->field(db_field_name, not_used_object, insertable, updatable, false, model_env);
}
if( db_expression->get_work_mode() == MORM_WORK_MODE_MODEL_VALUES && db_expression->get_output_type() == MORM_OUTPUT_TYPE_DB_INSERT )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_DB_INSERT_PRIMARY_KEY);
field_model.map_fields();
db_expression->set_output_type(MORM_OUTPUT_TYPE_DB_INSERT);
}
if( db_expression->get_output_type() != MORM_OUTPUT_TYPE_JOIN_TABLES &&
db_expression->get_output_type() != MORM_OUTPUT_TYPE_DB_INSERT &&
db_expression->get_output_type() != MORM_OUTPUT_TYPE_DB_UPDATE )
@@ -899,6 +913,27 @@ protected:
field_model.model_env = &model_env_local;
field_model.set_connector(model_connector);
if( model_env->model_connector_mode == MORM_MODEL_CONNECTOR_MODE_ITERATE_THROUGH_CHILDS_AND_INSERT )
{
// IMPROVE ME what about if db_field_name is empty? not iterate in such a case?
field_model.map_fields();
field_model.insert_tree(true);
}
if( model_env->model_connector_mode == MORM_MODEL_CONNECTOR_MODE_ITERATE_THROUGH_CHILDS_AND_UPDATE )
{
// IMPROVE ME what about if db_field_name is empty? not iterate in such a case?
//field_model.map_fields();
//field_model.update_tree(true);
}
if( model_env->model_connector_mode == MORM_MODEL_CONNECTOR_MODE_ITERATE_THROUGH_CHILDS_AND_SAVE )
{
// IMPROVE ME what about if db_field_name is empty? not iterate in such a case?
//field_model.map_fields();
//field_model.save_tree(true);
}
if( model_env->model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_STRING )
{
field_model_generate_flat_string(db_field_name, flat_field_name, field_model, insertable, updatable);