some work in branches/join_models

added: ModelEnv class - now Model has a pointer to ModelEnv
       and ModelEnv has a pointer to ModelData, model_connector_mode, table_index and doc_field_pointer
       



git-svn-id: svn://ttmath.org/publicrep/morm/branches/join_models@1191 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2019-05-13 17:59:28 +00:00
parent 34ddf11351
commit b37a577713
9 changed files with 441 additions and 237 deletions

View File

@@ -144,18 +144,21 @@ public:
result.set_connector(model_connector);
result.clear();
if( model_connector && query_result && query_result->has_db_result() )
if( model_connector && query_result && query_result->has_db_result() && model_data )
{
DbConnector * db_connector = model_connector->get_db_connector();
if( db_connector )
{
ModelEnv model_env_local;
result.model_env = &model_env_local;
try
{
if( model_data )
model_data->current_column = 0;
model_data->current_column = 0;
model_data->query_result = query_result;
result.model_data = model_data;
result.model_env->model_data = model_data;
result.before_select();
res = select_status;
@@ -164,7 +167,7 @@ public:
if( query_result->cur_row < query_result->result_rows )
{
result.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
result.map_values_from_query(query_result);
result.map_values_from_query();
result.after_select();
query_result->cur_row += 1;
}
@@ -185,7 +188,7 @@ public:
// throw something?
}
result.model_data = nullptr;
result.model_env = nullptr;
}
}
@@ -198,7 +201,7 @@ public:
ModelClass model;
get(model);
return std::move(model);
return model;
}
@@ -211,7 +214,7 @@ public:
result.clear();
}
if( model_connector && query_result && query_result->has_db_result() )
if( model_connector && query_result && query_result->has_db_result() && model_data )
{
DbConnector * db_connector = model_connector->get_db_connector();
@@ -284,17 +287,20 @@ protected:
result.emplace_back(); // it returns a reference from c++17
ModelClass & added_model = result.back();
ModelEnv model_env_local;
added_model.model_env = &model_env_local;
try
{
if( model_data )
model_data->current_column = 0;
model_data->current_column = 0;
model_data->query_result = query_result;
added_model.set_connector(model_connector);
added_model.clear();
added_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
added_model.model_data = model_data;
added_model.model_env->model_data = model_data;
added_model.before_select();
added_model.map_values_from_query(query_result);
added_model.map_values_from_query();
added_model.after_select();
}
catch(...)
@@ -303,7 +309,7 @@ protected:
// throw or something?
}
added_model.model_data = nullptr;
added_model.model_env = nullptr;
}
return res;