|
|
|
@ -127,7 +127,7 @@ ModelConnector * Model::get_connector()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Model::prepare_table()
|
|
|
|
|
void Model::table()
|
|
|
|
|
{
|
|
|
|
|
if( model_connector )
|
|
|
|
|
{
|
|
|
|
@ -135,12 +135,12 @@ void Model::prepare_table()
|
|
|
|
|
|
|
|
|
|
if( plog )
|
|
|
|
|
{
|
|
|
|
|
(*plog) << PT::Log::log1 << "Morm: you should provide the table name e.g. provide prepare_table() method and call table(...) there" << PT::Log::logend;
|
|
|
|
|
(*plog) << PT::Log::log1 << "Morm: you should provide the table name e.g. provide table() method and call table(...) there" << PT::Log::logend;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Model::table(const wchar_t * table_name)
|
|
|
|
|
void Model::table_name(const wchar_t * table_name)
|
|
|
|
|
{
|
|
|
|
|
if( model_env )
|
|
|
|
|
{
|
|
|
|
@ -151,7 +151,7 @@ void Model::table(const wchar_t * table_name)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Model::table(const wchar_t * schema_name, const wchar_t * table_name)
|
|
|
|
|
void Model::table_name(const wchar_t * schema_name, const wchar_t * table_name)
|
|
|
|
|
{
|
|
|
|
|
if( model_env )
|
|
|
|
|
{
|
|
|
|
@ -200,7 +200,7 @@ void Model::to_text(PT::TextStream & stream, ModelData * model_data, bool clear_
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// prepare_table(); at the moment flat strings (json/space) do not need a table name
|
|
|
|
|
// table(); at the moment flat strings (json/space) do not need a table name
|
|
|
|
|
flat_connector->to_text(stream, *this);
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
@ -288,7 +288,7 @@ void Model::generate_insert_query(PT::TextStream & stream, ModelData * model_dat
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
db_connector->generate_insert_query(stream, *this);
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
@ -325,7 +325,7 @@ bool Model::insert(ModelData * model_data, bool insert_whole_tree)
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
status = insert_tree(insert_whole_tree);
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
@ -351,7 +351,7 @@ bool Model::insert_tree(bool insert_whole_tree)
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITH_FOREIGN_KEY;
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_INSERT;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( model_connector )
|
|
|
|
@ -398,7 +398,7 @@ bool Model::insert_tree(bool insert_whole_tree)
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY;
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_INSERT;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
@ -420,7 +420,7 @@ void Model::generate_update_query(PT::TextStream & stream, ModelData * model_dat
|
|
|
|
|
|
|
|
|
|
if( db_connector )
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
db_connector->generate_update_query(stream, *this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -452,7 +452,7 @@ bool Model::update(ModelData * model_data, bool update_whole_tree)
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
status = update_tree(update_whole_tree);
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
@ -482,7 +482,7 @@ bool Model::update_tree(bool update_whole_tree)
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITH_FOREIGN_KEY;
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_UPDATE;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( model_connector )
|
|
|
|
@ -510,7 +510,7 @@ bool Model::update_tree(bool update_whole_tree)
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY;
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_UPDATE;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
@ -531,7 +531,7 @@ void Model::generate_remove_query(PT::TextStream & stream, ModelData * model_dat
|
|
|
|
|
|
|
|
|
|
if( db_connector )
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
db_connector->generate_remove_query(stream, *this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -564,7 +564,7 @@ bool Model::remove(ModelData * model_data, bool remove_whole_tree)
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
status = remove_tree(remove_whole_tree);
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
@ -594,7 +594,7 @@ bool Model::remove_tree(bool remove_whole_tree)
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY;
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_REMOVE;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( model_connector )
|
|
|
|
@ -629,7 +629,7 @@ bool Model::remove_tree(bool remove_whole_tree)
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITH_FOREIGN_KEY;
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_REMOVE;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
@ -660,7 +660,7 @@ bool Model::save(ModelData * model_data, bool save_whole_tree)
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
prepare_table();
|
|
|
|
|
table();
|
|
|
|
|
status = save_tree(save_whole_tree);
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
@ -688,7 +688,7 @@ bool Model::save_tree(bool save_whole_tree)
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITH_FOREIGN_KEY;
|
|
|
|
|
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_SAVE;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ModelEnv * old_model_env = model_env; // remove, insert or update will set model_env to nullptr
|
|
|
|
@ -722,7 +722,7 @@ bool Model::save_tree(bool save_whole_tree)
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY;
|
|
|
|
|
|
|
|
|
|
model_env->model_work_submode = MORM_MODEL_WORK_SUBMODE_SAVE;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
@ -754,7 +754,7 @@ void Model::map_values_from_query()
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_READING_VALUE_FROM_DB_RESULTSET;
|
|
|
|
|
model_env->was_primary_key_read = false; // whether or not there was at least one column with primary_key flag
|
|
|
|
|
model_env->has_primary_key_set = true; // whether all primary_columns were different than null
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_NONE;
|
|
|
|
|
|
|
|
|
|
if( model_env->was_primary_key_read && model_env->has_primary_key_set )
|
|
|
|
@ -781,8 +781,8 @@ void Model::clear()
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// prepare_table() doesn't have to be called
|
|
|
|
|
map_fields();
|
|
|
|
|
// table() doesn't have to be called
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
catch(...)
|
|
|
|
|
{
|
|
|
|
@ -1030,7 +1030,7 @@ void Model::field_model_left_join(const wchar_t * db_field_name, Model & field_m
|
|
|
|
|
|
|
|
|
|
if( field_type.is_foreign_key() )
|
|
|
|
|
{
|
|
|
|
|
field_model.map_fields();
|
|
|
|
|
field_model.fields();
|
|
|
|
|
|
|
|
|
|
join_tables_str << " ON ";
|
|
|
|
|
db_expression->table_with_index_and_field_to_stream(join_tables_str, model_env->table_name, model_env->table_index, db_field_name, field_type);
|
|
|
|
@ -1048,7 +1048,7 @@ void Model::field_model_left_join(const wchar_t * db_field_name, Model & field_m
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ModelEnv * old_model_env = field_model.model_env;
|
|
|
|
|
map_fields(); // map_fields() will set field_model.model_env to null
|
|
|
|
|
fields(); // fields() will set field_model.model_env to null
|
|
|
|
|
field_model.model_env = old_model_env;
|
|
|
|
|
|
|
|
|
|
join_tables_str << " ON ";
|
|
|
|
@ -1092,7 +1092,7 @@ void Model::field_model_save_key(const wchar_t * db_field_name)
|
|
|
|
|
int old_work_mode = model_env->model_work_mode;
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_ITERATE_PRIMARY_KEY_VALUES;
|
|
|
|
|
model_env->field_index = 0;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
model_env->model_work_mode = old_work_mode;
|
|
|
|
|
|
|
|
|
|
if( model_env->field_value_helper_tab->empty() && plog )
|
|
|
|
@ -1131,9 +1131,9 @@ void Model::field_model_set_parent_key_in_child(const wchar_t * db_field_name, M
|
|
|
|
|
model_env_local.field_value_helper_tab = &helper_tab;
|
|
|
|
|
model_env_local.field_index = 0;
|
|
|
|
|
field_model.model_env = &model_env_local;
|
|
|
|
|
field_model.prepare_table();
|
|
|
|
|
field_model.table();
|
|
|
|
|
|
|
|
|
|
field_model.map_fields();
|
|
|
|
|
field_model.fields();
|
|
|
|
|
|
|
|
|
|
if( (size_t)field_model.model_env->field_index != helper_tab.size() && log )
|
|
|
|
|
{
|
|
|
|
@ -1268,7 +1268,7 @@ void Model::field_model_generate_db_sql(const wchar_t * db_field_name, Model & f
|
|
|
|
|
if( field_type.is_insertable() )
|
|
|
|
|
{
|
|
|
|
|
db_expression->set_output_type(MORM_OUTPUT_TYPE_DB_INSERT_PRIMARY_KEY);
|
|
|
|
|
field_model.map_fields();
|
|
|
|
|
field_model.fields();
|
|
|
|
|
db_expression->set_output_type(MORM_OUTPUT_TYPE_DB_INSERT);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1283,7 +1283,7 @@ void Model::field_model_generate_db_sql(const wchar_t * db_field_name, Model & f
|
|
|
|
|
db_expression->set_output_type(MORM_OUTPUT_TYPE_DB_UPDATE_PRIMARY_KEY);
|
|
|
|
|
field_model.model_env->field_index = 0;
|
|
|
|
|
field_model.model_env->set_field_name_helper = &key_fields;
|
|
|
|
|
field_model.map_fields();
|
|
|
|
|
field_model.fields();
|
|
|
|
|
db_expression->set_output_type(MORM_OUTPUT_TYPE_DB_UPDATE);
|
|
|
|
|
|
|
|
|
|
if( (size_t)field_model.model_env->field_index != key_fields.size() )
|
|
|
|
@ -1301,7 +1301,7 @@ void Model::field_model_generate_db_sql(const wchar_t * db_field_name, Model & f
|
|
|
|
|
db_expression->get_output_type() != MORM_OUTPUT_TYPE_DB_INSERT &&
|
|
|
|
|
db_expression->get_output_type() != MORM_OUTPUT_TYPE_DB_UPDATE )
|
|
|
|
|
{
|
|
|
|
|
field_model.map_fields();
|
|
|
|
|
field_model.fields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
field_model.model_env->model_work_mode = MORM_MODEL_WORK_MODE_NONE;
|
|
|
|
@ -1363,7 +1363,7 @@ void Model::field_model(const wchar_t * db_field_name, const wchar_t * flat_fiel
|
|
|
|
|
|
|
|
|
|
if( !is_empty_field(db_field_name) )
|
|
|
|
|
{
|
|
|
|
|
field_model.prepare_table();
|
|
|
|
|
field_model.table();
|
|
|
|
|
|
|
|
|
|
if( field_type.is_foreign_key() || field_type.is_foreign_key_in_child() )
|
|
|
|
|
{
|
|
|
|
@ -1386,7 +1386,7 @@ void Model::field_model(const wchar_t * db_field_name, const wchar_t * flat_fiel
|
|
|
|
|
{
|
|
|
|
|
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_FLAT_STRING )
|
|
|
|
|
{
|
|
|
|
|
// calling field_model.prepare_table(); is not needed in generating strings (at least for json/space formats)
|
|
|
|
|
// calling field_model.table() is not needed in generating strings (at least for json/space formats)
|
|
|
|
|
field_model_generate_flat_string(flat_field_name, field_model, field_type);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1445,7 +1445,7 @@ void Model::set_parent_key_in_childs()
|
|
|
|
|
if( model_env )
|
|
|
|
|
{
|
|
|
|
|
model_env->model_work_mode = MORM_MODEL_WORK_MODE_SET_PARENT_ID;
|
|
|
|
|
map_fields();
|
|
|
|
|
fields();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|