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:
72
src/model.h
72
src/model.h
@@ -166,7 +166,7 @@ protected:
|
||||
|
||||
virtual ModelData * get_model_data();
|
||||
|
||||
// used by Cursor
|
||||
|
||||
virtual void map_values_from_query();
|
||||
|
||||
|
||||
@@ -636,7 +636,7 @@ protected:
|
||||
template<typename FieldValue>
|
||||
void field_generic(const wchar_t * db_field_name, const wchar_t * flat_field_name, FieldValue & field_value, bool insertable, bool updatable, bool is_primary_key)
|
||||
{
|
||||
if( model_connector )
|
||||
if( model_connector && model_env )
|
||||
{
|
||||
if( model_env->model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_STRING )
|
||||
{
|
||||
@@ -649,7 +649,7 @@ protected:
|
||||
if( flat_expression && !is_empty_field(flat_field_name) )
|
||||
{
|
||||
// insertable, updatable and is_primary_key are ignored here
|
||||
flat_expression->field(flat_field_name, field_value, insertable, updatable, is_primary_key, true, model_env->model_data);
|
||||
flat_expression->field(flat_field_name, field_value, insertable, updatable, is_primary_key, true, model_env);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -664,12 +664,7 @@ protected:
|
||||
|
||||
if( db_expression && !is_empty_field(db_field_name) )
|
||||
{
|
||||
db_expression->field(db_field_name, field_value, insertable, updatable, is_primary_key, true, model_env->model_data);
|
||||
|
||||
if( model_env->model_data )
|
||||
{
|
||||
model_env->model_data->current_column += 1;
|
||||
}
|
||||
db_expression->field(db_field_name, field_value, insertable, updatable, is_primary_key, true, model_env);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -682,10 +677,10 @@ protected:
|
||||
{
|
||||
if( !is_empty_field(db_field_name) )
|
||||
{
|
||||
if( model_env->model_data && model_env->model_data->has_autogenerated_select )
|
||||
if( model_env->model_data && model_env->cursor_helper && model_env->cursor_helper->has_autogenerated_select )
|
||||
{
|
||||
get_value_by_field_index(model_env->model_data->current_column, field_value);
|
||||
model_env->model_data->current_column += 1;
|
||||
get_value_by_field_index(model_env->cursor_helper->current_column, field_value);
|
||||
model_env->cursor_helper->current_column += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -727,14 +722,14 @@ protected:
|
||||
|
||||
void field_model_left_join(const wchar_t * db_field_name, const wchar_t * flat_field_name, Model & field_model, bool insertable, bool updatable, bool has_foreign_key, DbExpression * db_expression)
|
||||
{
|
||||
if( model_env->model_data )
|
||||
if( model_env->finder_helper )
|
||||
{
|
||||
model_env->model_data->morm_current_max_column += 1;
|
||||
model_env->model_data->morm_foreign_keys.clear();
|
||||
//model_env->select_helper->morm_current_max_column += 1;
|
||||
model_env->finder_helper->morm_foreign_keys.clear();
|
||||
|
||||
model_env->model_data->morm_finder_join_tables << "LEFT JOIN ";
|
||||
field_model.table_name(model_env->model_data->morm_finder_join_tables);
|
||||
model_env->model_data->morm_finder_join_tables << " AS ";
|
||||
model_env->finder_helper->morm_finder_join_tables << "LEFT JOIN ";
|
||||
field_model.table_name(model_env->finder_helper->morm_finder_join_tables);
|
||||
model_env->finder_helper->morm_finder_join_tables << " AS ";
|
||||
|
||||
|
||||
//////////////
|
||||
@@ -749,14 +744,14 @@ protected:
|
||||
PT::TextStream join_table_name;
|
||||
field_model.table_name_for_join_as(join_table_name);
|
||||
|
||||
field_model.model_env->table_index = model_env->model_data->add_join_table(join_table_name);
|
||||
field_model.model_env->table_index = model_env->finder_helper->add_join_table(join_table_name);
|
||||
|
||||
if( field_model.model_env->table_index > 1 )
|
||||
join_table_name << field_model.model_env->table_index;
|
||||
//////////
|
||||
|
||||
|
||||
model_env->model_data->morm_finder_join_tables << join_table_name;
|
||||
model_env->finder_helper->morm_finder_join_tables << join_table_name;
|
||||
|
||||
int expr_work_mode = db_expression->get_work_mode();
|
||||
int expr_output_type = db_expression->get_output_type();
|
||||
@@ -770,29 +765,29 @@ protected:
|
||||
{
|
||||
field_model.map_fields();
|
||||
|
||||
model_env->model_data->morm_finder_join_tables << " ON " << join_table_name_this << '.' << db_field_name; // escape?
|
||||
model_env->model_data->morm_finder_join_tables << " = " << join_table_name << '.';
|
||||
model_env->finder_helper->morm_finder_join_tables << " ON " << join_table_name_this << '.' << db_field_name; // escape?
|
||||
model_env->finder_helper->morm_finder_join_tables << " = " << join_table_name << '.';
|
||||
|
||||
if( !model_env->model_data->morm_foreign_keys.empty() )
|
||||
if( !model_env->finder_helper->morm_foreign_keys.empty() )
|
||||
{
|
||||
model_env->model_data->morm_finder_join_tables << model_env->model_data->morm_foreign_keys.front();
|
||||
model_env->finder_helper->morm_finder_join_tables << model_env->finder_helper->morm_foreign_keys.front();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
map_fields();
|
||||
|
||||
model_env->model_data->morm_finder_join_tables << " ON " << join_table_name_this << '.';
|
||||
model_env->finder_helper->morm_finder_join_tables << " ON " << join_table_name_this << '.';
|
||||
|
||||
if( !model_env->model_data->morm_foreign_keys.empty() )
|
||||
if( !model_env->finder_helper->morm_foreign_keys.empty() )
|
||||
{
|
||||
model_env->model_data->morm_finder_join_tables << model_env->model_data->morm_foreign_keys.front();
|
||||
model_env->finder_helper->morm_finder_join_tables << model_env->finder_helper->morm_foreign_keys.front();
|
||||
}
|
||||
|
||||
model_env->model_data->morm_finder_join_tables << " = " << (join_table_name) << '.' << db_field_name;
|
||||
model_env->finder_helper->morm_finder_join_tables << " = " << (join_table_name) << '.' << db_field_name;
|
||||
}
|
||||
|
||||
model_env->model_data->morm_finder_join_tables << ' ';
|
||||
model_env->finder_helper->morm_finder_join_tables << ' ';
|
||||
|
||||
db_expression->set_work_mode(expr_work_mode);
|
||||
db_expression->set_output_type(expr_output_type);
|
||||
@@ -860,11 +855,6 @@ protected:
|
||||
}
|
||||
|
||||
field_model.model_env->model_connector_mode = MORM_MODEL_CONNECTOR_MODE_NONE;
|
||||
|
||||
if( model_env->model_data )
|
||||
{
|
||||
model_env->model_data->current_column += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -920,7 +910,7 @@ protected:
|
||||
|
||||
void field_model(const wchar_t * db_field_name, const wchar_t * flat_field_name, Model & field_model, bool insertable, bool updatable, bool has_foreign_key)
|
||||
{
|
||||
if( model_connector )
|
||||
if( model_connector && model_env )
|
||||
{
|
||||
ModelEnv model_env_local(*model_env);
|
||||
field_model.model_env = &model_env_local;
|
||||
@@ -959,7 +949,7 @@ protected:
|
||||
template<typename ModelContainer, typename ModelContainerType>
|
||||
void field_list(const wchar_t * db_field_name, const wchar_t * flat_field_name, ModelContainer & field_container, ModelContainerType * model_container_type, bool insertable, bool updatable)
|
||||
{
|
||||
if( model_connector )
|
||||
if( model_connector && model_env )
|
||||
{
|
||||
if( model_env->model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_STRING )
|
||||
{
|
||||
@@ -974,7 +964,7 @@ protected:
|
||||
// IMPROVE ME
|
||||
// what about model_data and save_mode?
|
||||
// may it should be placed inside some structure?
|
||||
flat_expression->field_list(flat_field_name, field_container, insertable, updatable, false, model_connector, model_env->model_connector_mode, model_env->model_data);
|
||||
flat_expression->field_list(flat_field_name, field_container, insertable, updatable, false, model_connector, model_env);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1030,9 +1020,9 @@ protected:
|
||||
template<typename FieldValue>
|
||||
void get_value_by_field_index(int field_index, FieldValue & field_value)
|
||||
{
|
||||
if( model_env->model_data && model_env->model_data->query_result )
|
||||
if( model_env->cursor_helper && model_env->cursor_helper->query_result )
|
||||
{
|
||||
const char * val_str = model_env->model_data->query_result->get_field_string_value(field_index);
|
||||
const char * val_str = model_env->cursor_helper->query_result->get_field_string_value(field_index);
|
||||
|
||||
if( val_str )
|
||||
{
|
||||
@@ -1050,9 +1040,9 @@ protected:
|
||||
template<typename FieldValue>
|
||||
void get_value_by_field_name(const wchar_t * field_name, FieldValue & field_value)
|
||||
{
|
||||
if( model_env->model_data && model_env->model_data->query_result )
|
||||
if( model_env->cursor_helper && model_env->cursor_helper->query_result )
|
||||
{
|
||||
const char * val_str = model_env->model_data->query_result->get_field_string_value(field_name);
|
||||
const char * val_str = model_env->cursor_helper->query_result->get_field_string_value(field_name);
|
||||
|
||||
if( val_str )
|
||||
{
|
||||
|
Reference in New Issue
Block a user