some work in morm

- support for fetching rows from db
- support for inserting/updating rows



git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1081 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2018-04-16 22:46:25 +00:00
parent 09f31b2803
commit 72b2622d08
17 changed files with 965 additions and 319 deletions

View File

@@ -36,14 +36,15 @@
#define headerfile_morm_modelconnector
#include "baseexpression.h"
//#include "finder.h"
#include "dbconnector.h"
#include "flatexpression.h"
#include "flatconnector.h"
namespace morm
{
class Model;
class FlatConnector;
class DbConnector;
template<typename ModelClass>
class Finder;
@@ -81,6 +82,10 @@ public:
virtual void insert(Model & model);
virtual void update(Model & model);
virtual void map_values_from_query(Model & model);
virtual void clear_values(Model & model);
// template<typename ModelClass>
// Finder<ModelClass> & find()
@@ -92,13 +97,16 @@ public:
protected:
int model_connector_mode;
FlatConnector * flat_connector;
DbConnector * db_connector;
PT::TextStream * out_stream; // IMPROVE ME give here an interface to the base stream (implement him)
bool out_stream_allocated;
BaseExpression * expression_callback;
//BaseExpression * expression_callback;
//DbConnector * db_connector_callback;
void allocate_default_stream();
void allocate_default_stream_if_needed();
@@ -108,12 +116,75 @@ protected:
template<typename FieldValue>
void field(const wchar_t * field_name, FieldValue & field_value, bool insertable, bool updatable, bool is_primary_key)
{
if( expression_callback )
// may we need only db_connector_callback?
// if( expression_callback )
// {
// expression_callback->field(field_name, field_value, insertable, updatable, is_primary_key);
// }
// if( db_connector_callback )
// {
// db_connector_callback->get_value_by_field_name(field_name, field_value);
// }
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_EXPRESSION && flat_connector )
{
expression_callback->field(field_name, field_value, insertable, updatable, is_primary_key);
FlatExpression * flat_expression = flat_connector->get_expression();
if( flat_expression )
{
flat_expression->field(field_name, field_value, insertable, updatable, is_primary_key);
}
}
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_DB_EXPRESSION && db_connector )
{
DbExpression * db_expression = db_connector->get_expression();
if( db_expression )
{
db_expression->field(field_name, field_value, insertable, updatable, is_primary_key);
}
}
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_READING_VALUE_FROM_DB && db_connector )
{
db_connector->get_value_by_field_name(field_name, field_value);
}
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_CLEARING_VALUE && db_connector )
{
// IMPROVE ME those clearing should be moved to a better place
db_connector->clear_value(field_value);
}
}
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)
{
if( model_connector_mode == MORM_MODEL_CONNECTOR_MODE_GENERATING_FLAT_EXPRESSION && flat_connector && out_stream )
{
FlatExpression * flat_expression = flat_connector->get_expression();
if( flat_expression )
{
flat_expression->field_list(field_name, field_list, insertable, updatable, is_primary_key);
}
}
}
template<typename FieldValue>
void get_last_sequence(const wchar_t * sequence_table_name, FieldValue & field_value)
{
if( db_connector )
{
db_connector->get_last_sequence(sequence_table_name, field_value);
}
}
/*
* Model is using field() method
*/