winix_fullmorm #4
|
@ -194,13 +194,20 @@ bool BaseExpression::is_long_field_name(const PT::TextStream & field_name)
|
|||
}
|
||||
|
||||
|
||||
void BaseExpression::put_field_name(const wchar_t * field_name, ModelEnv * model_env)
|
||||
void BaseExpression::put_field_name(const wchar_t * field_name, FT field_type, ModelEnv * model_env)
|
||||
{
|
||||
if( field_type.is_raw_field_name() )
|
||||
{
|
||||
(*out_stream) << field_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( is_long_field_name(field_name) )
|
||||
put_long_field_name(field_name);
|
||||
else
|
||||
put_short_field_name(field_name, model_env);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const wchar_t * BaseExpression::put_long_part_field_name(const wchar_t * field_name)
|
||||
|
@ -262,13 +269,13 @@ void BaseExpression::put_short_field_name(const wchar_t * field_name, ModelEnv *
|
|||
|
||||
}
|
||||
|
||||
void BaseExpression::save_foreign_key(const wchar_t * field_name, ModelEnv * model_env)
|
||||
void BaseExpression::save_foreign_key(const wchar_t * field_name, FT field_type, ModelEnv * model_env)
|
||||
{
|
||||
PT::TextStream str;
|
||||
PT::TextStream * old_out_stream = out_stream;
|
||||
|
||||
out_stream = &str;
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, field_type, model_env);
|
||||
out_stream = old_out_stream;
|
||||
|
||||
if( model_env && model_env->finder_helper )
|
||||
|
|
|
@ -81,12 +81,12 @@ public:
|
|||
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS )
|
||||
{
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, field_type, model_env);
|
||||
}
|
||||
else
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_SAVE_FIELDS )
|
||||
{
|
||||
save_foreign_key(field_name, model_env);
|
||||
save_foreign_key(field_name, field_type, model_env);
|
||||
}
|
||||
else
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_VALUES )
|
||||
|
@ -100,7 +100,7 @@ public:
|
|||
{
|
||||
if( (size_t)model_env->field_index < model_env->set_field_name_helper->size() )
|
||||
{
|
||||
put_field_name((*model_env->set_field_name_helper)[model_env->field_index], model_env);
|
||||
put_field_name((*model_env->set_field_name_helper)[model_env->field_index], field_type, model_env);
|
||||
put_name_value_separator();
|
||||
put_field_value_or_null(field_value, field_type, model_env);
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ public:
|
|||
}
|
||||
else
|
||||
{
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, field_type, model_env);
|
||||
put_name_value_separator();
|
||||
put_field_value_or_null(field_value, field_type, model_env);
|
||||
}
|
||||
|
@ -172,7 +172,7 @@ public:
|
|||
// else
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES )
|
||||
{
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, field_type, model_env);
|
||||
put_name_value_separator();
|
||||
put_field_value_list(field_value, model_connector, model_env);
|
||||
}
|
||||
|
@ -190,7 +190,7 @@ public:
|
|||
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS )
|
||||
{
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, field_type, model_env);
|
||||
}
|
||||
else
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_VALUES )
|
||||
|
@ -200,7 +200,7 @@ public:
|
|||
else
|
||||
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES )
|
||||
{
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, field_type, model_env);
|
||||
put_name_value_separator();
|
||||
generate_from_model(field_model);
|
||||
}
|
||||
|
@ -274,10 +274,8 @@ protected:
|
|||
virtual void field_before();
|
||||
virtual void field_after();
|
||||
|
||||
virtual void put_field_name(const wchar_t * field_name, ModelEnv * model_env);
|
||||
|
||||
virtual void save_foreign_key(const wchar_t * field_name, ModelEnv * model_env);
|
||||
|
||||
virtual void put_field_name(const wchar_t * field_name, FT field_type, ModelEnv * model_env);
|
||||
virtual void save_foreign_key(const wchar_t * field_name, FT field_type, ModelEnv * model_env);
|
||||
virtual void dump_additional_info(Model & model);
|
||||
|
||||
template<typename FieldValue>
|
||||
|
@ -573,7 +571,7 @@ protected:
|
|||
this->out_stream = &stream;
|
||||
|
||||
field_before();
|
||||
put_field_name(field_name, model_env);
|
||||
put_field_name(field_name, FT::default_type, model_env);
|
||||
put_name_value_separator();
|
||||
|
||||
bool is_first = true;
|
||||
|
|
|
@ -63,7 +63,7 @@ public:
|
|||
virtual DbExpression & page(PT::TextStream & stream, size_t page_number, size_t page_size);
|
||||
|
||||
template<typename FieldValue>
|
||||
void add_field_for_select(const wchar_t * new_column_expression, const wchar_t * new_column_name, FieldValue & field_value)
|
||||
void add_field_for_select(const wchar_t * new_column_expression, const wchar_t * new_column_name, FieldValue & field_value, FT field_type, ModelEnv * model_env)
|
||||
{
|
||||
std::wstring column_expression; // field() methods can be called recursively, so don't make it as class object
|
||||
|
||||
|
@ -71,9 +71,7 @@ public:
|
|||
column_expression += L" as ";
|
||||
column_expression += new_column_name;
|
||||
|
||||
// put nullptr to ModelEnv* to not allow to use prefix
|
||||
// or may better remember current value of use_prefix and set it to false for a while?
|
||||
field(column_expression.c_str(), field_value, false, false, false, nullptr);
|
||||
field(column_expression.c_str(), field_value, field_type, model_env);
|
||||
}
|
||||
|
||||
|
||||
|
|
10
src/finder.h
10
src/finder.h
|
@ -236,7 +236,15 @@ public:
|
|||
{
|
||||
(*out_stream) << "SELECT ";
|
||||
model.generate_select_columns(*out_stream);
|
||||
(*out_stream) << " FROM " << model.model_env->table_name << " AS ";
|
||||
(*out_stream) << " FROM ";
|
||||
|
||||
if( !model.model_env->schema_name.empty() )
|
||||
{
|
||||
(*out_stream) << model.model_env->schema_name << ".";
|
||||
}
|
||||
|
||||
// IMPROVEME escape table name
|
||||
(*out_stream) << model.model_env->table_name << " AS ";
|
||||
(*out_stream) << model.model_env->table_name;
|
||||
(*out_stream) << " ";
|
||||
(*out_stream) << finder_helper.join_tables_str;
|
||||
|
|
7
src/ft.h
7
src/ft.h
|
@ -56,6 +56,7 @@ public:
|
|||
no_insertable = 8,
|
||||
no_updatable = 16,
|
||||
no_fetchable = 32, /* not supported yet */
|
||||
raw_field_name = 64,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -130,6 +131,12 @@ public:
|
|||
return !is_flag_set(no_fetchable);
|
||||
}
|
||||
|
||||
|
||||
bool is_raw_field_name() const
|
||||
{
|
||||
return is_flag_set(raw_field_name);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
10
src/model.h
10
src/model.h
|
@ -1324,6 +1324,8 @@ public:
|
|||
template<typename FieldValue>
|
||||
void add_field_for_select(const wchar_t * new_column_expression, const wchar_t * new_column_name, const wchar_t * flat_field_name, FieldValue & field_value)
|
||||
{
|
||||
FT field_type = FT::no_insertable | FT::no_updatable | FT::raw_field_name;
|
||||
|
||||
if( model_connector && model_env )
|
||||
{
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_DB_SQL )
|
||||
|
@ -1336,24 +1338,24 @@ public:
|
|||
|
||||
if( db_expression && !is_empty_field(new_column_expression) )
|
||||
{
|
||||
db_expression->add_field_for_select(new_column_expression, new_column_name, field_value);
|
||||
db_expression->add_field_for_select(new_column_expression, new_column_name, field_value, field_type, model_env);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GENERATING_FLAT_STRING )
|
||||
{
|
||||
field_generic(L"", flat_field_name, field_value, false, false, false);
|
||||
field_generic(L"", flat_field_name, field_value, field_type);
|
||||
}
|
||||
else
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_READING_VALUE_FROM_DB_RESULTSET )
|
||||
{
|
||||
field_generic(new_column_name, L"", field_value, false, false, false);
|
||||
field_generic(new_column_name, L"", field_value, field_type);
|
||||
}
|
||||
else
|
||||
if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_CLEARING_VALUE )
|
||||
{
|
||||
field_generic(L"", L"", field_value, false, false, false); // the names don't matter here
|
||||
field_generic(L"", L"", field_value, field_type); // the names don't matter here
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue