added: field_model() method to Model

git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1103 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2018-04-26 18:58:31 +00:00
parent 3da8d1f411
commit 98206fdb7a
4 changed files with 83 additions and 4 deletions

View File

@ -120,6 +120,7 @@ public:
{
field_before();
// IMPLEMENTME
// if( work_mode == MORM_WORK_MODE_MODEL_FIELDS )
// {
// put_field_name(field_name);
@ -141,6 +142,34 @@ public:
}
}
template<typename ModelClass>
void field_model(const wchar_t * field_name, ModelClass & field_model, bool insertable = true, bool updatable = true, bool is_primary_key = false)
{
if( out_stream && can_field_be_generated(insertable, updatable, is_primary_key) )
{
field_before();
// IMPLEMENTME
// if( work_mode == MORM_WORK_MODE_MODEL_FIELDS )
// {
// put_field_name(field_name);
// }
// else
// if( work_mode == MORM_WORK_MODE_MODEL_VALUES )
// {
// put_field_value(field_value);
// }
// else
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES )
{
put_field_name(field_name);
put_name_value_separator();
generate_from_model(field_model);
}
field_after();
}
}
template<typename FieldValue>
void field_to_stream(PT::TextStream & stream, const wchar_t * field_name, const FieldValue & field_value, bool insertable = true, bool updatable = true, bool is_primary_key = false)

View File

@ -406,10 +406,8 @@ public:
bool get(ModelClass & result)
{
bool res = false;
result.clear(); // here has to be a model connector (it clears all fields)
// what about setting a model connector for the result?
// it can be a different object
result.set_connector(model_connector);
result.clear();
if( model_connector && out_stream )
{

View File

@ -156,6 +156,20 @@ protected:
virtual int get_connector_mode();
// temporarily workaround
// these templates will be removed
void fieldb(const wchar_t * db_field_name, const wchar_t * flat_field_name, bool & field_value, bool insertable = true, bool updatable = true, bool is_primary_key = false)
{
if( model_connector )
{
model_connector->field(db_field_name, flat_field_name, field_value, insertable, updatable, is_primary_key);
}
}
/////////////////////////////////
template<typename FieldValue>
void field(const wchar_t * field_name, FieldValue & field_value, bool insertable = true, bool updatable = true, bool is_primary_key = false)
{
@ -201,6 +215,18 @@ protected:
}
}
template<typename ModelClass>
void field_model(const wchar_t * field_name, ModelClass & field_model, bool insertable = true, bool updatable = true, bool is_primary_key = false)
{
if( model_connector )
{
// is there a possibility for the childs to be connected to different model connectors?
field_model.set_connector(model_connector);
model_connector->field_model(field_name, field_model, insertable, updatable, is_primary_key);
}
}
template<typename FieldValue>
void get_last_sequence(const wchar_t * sequence_table_name, FieldValue & field_value)
{

View File

@ -178,6 +178,7 @@ protected:
template<typename ModelClass>
void field_list(const wchar_t * field_name, std::list<ModelClass> & field_list, bool insertable = true, bool updatable = true, bool is_primary_key = false)
{
// IMPLEMENTME what about db?
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_STRING && flat_connector )
{
FlatExpression * flat_expression = flat_connector->get_expression();
@ -187,6 +188,31 @@ protected:
flat_expression->field_list(field_name, field_list, insertable, updatable, is_primary_key);
}
}
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_CLEARING_VALUE )
{
field_list.clear();
}
}
template<typename ModelClass>
void field_model(const wchar_t * field_name, ModelClass & field_model, bool insertable = true, bool updatable = true, bool is_primary_key = false)
{
// IMPLEMENTME what about db?
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_STRING && flat_connector )
{
FlatExpression * flat_expression = flat_connector->get_expression();
if( flat_expression && !is_empty_field(field_name) )
{
flat_expression->field_model(field_name, field_model, insertable, updatable, is_primary_key);
}
}
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_CLEARING_VALUE )
{
field_model.clear();
}
}
template<typename FieldValue>