some work in branches/join_models

- added FinderHelper class - used as a global object for the whole model tree in Finder
  (some fields moved from ModelData)
- added CursorHelper class - used as a global object for the whole model tree in Cursor
  (some fields moved from ModelData)







git-svn-id: svn://ttmath.org/publicrep/morm/branches/join_models@1192 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2019-05-21 15:51:13 +00:00
parent b37a577713
commit 958e89fb02
13 changed files with 349 additions and 238 deletions

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (c) 2018, Tomasz Sowa
* Copyright (c) 2018-2019, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -51,7 +51,8 @@ public:
Cursor()
{
set_default_values();
query_result = nullptr;
clear();
}
@@ -59,6 +60,7 @@ public:
{
model_connector = c.model_connector;
model_data = c.model_data;
has_autogenerated_select = c.has_autogenerated_select;
query_result = c.query_result;
select_status = c.select_status;
@@ -66,6 +68,9 @@ public:
{
query_result->references_count += 1;
}
// helper doesn't have to be copied
cursor_helper.clear();
}
@@ -91,7 +96,13 @@ public:
delete query_result;
}
set_default_values();
model_connector = nullptr;
model_data = nullptr;
has_autogenerated_select = false;
cursor_helper.clear();
query_result = nullptr;
select_status = false;
}
@@ -119,6 +130,12 @@ public:
}
virtual void set_has_autogenerated_select(bool has_autogenerated_select)
{
this->has_autogenerated_select = has_autogenerated_select;
}
virtual QueryResult * get_query_result()
{
return query_result;
@@ -144,7 +161,7 @@ public:
result.set_connector(model_connector);
result.clear();
if( model_connector && query_result && query_result->has_db_result() && model_data )
if( model_connector && query_result && query_result->has_db_result() )
{
DbConnector * db_connector = model_connector->get_db_connector();
@@ -152,11 +169,13 @@ public:
{
ModelEnv model_env_local;
result.model_env = &model_env_local;
result.model_env->cursor_helper = &cursor_helper;
try
{
model_data->current_column = 0;
model_data->query_result = query_result;
cursor_helper.clear();
cursor_helper.query_result = query_result;
cursor_helper.has_autogenerated_select = has_autogenerated_select;
result.model_env->model_data = model_data;
result.before_select();
@@ -214,7 +233,7 @@ public:
result.clear();
}
if( model_connector && query_result && query_result->has_db_result() && model_data )
if( model_connector && query_result && query_result->has_db_result() )
{
DbConnector * db_connector = model_connector->get_db_connector();
@@ -264,17 +283,12 @@ protected:
ModelConnector * model_connector;
ModelData * model_data;
bool has_autogenerated_select;
CursorHelper cursor_helper;
QueryResult * query_result;
bool select_status;
virtual void set_default_values()
{
model_connector = nullptr;
model_data = nullptr;
query_result = nullptr;
select_status = false;
}
template<typename ContainerType>
@@ -289,11 +303,13 @@ protected:
ModelEnv model_env_local;
added_model.model_env = &model_env_local;
added_model.model_env->cursor_helper = &cursor_helper;
try
{
model_data->current_column = 0;
model_data->query_result = query_result;
cursor_helper.clear();
cursor_helper.query_result = query_result;
cursor_helper.has_autogenerated_select = has_autogenerated_select;
added_model.set_connector(model_connector);
added_model.clear();