fixed: in Model::generate_insert_query there was not ModelEnv set (was a null pointer)

similarly in generate_update_query and generate_remove_query
added: support std::vector<> in Model::field() methods
added: serializing std::vector and std::list for non-model classes in BaseExpression




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1200 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2019-08-20 15:49:37 +00:00
parent 0a324a38ce
commit f8d88d1459
3 changed files with 262 additions and 14 deletions

View File

@@ -36,6 +36,8 @@
#define headerfile_morm_model
#include <string>
#include <list>
#include <vector>
#include "textstream/textstream.h"
#include "modelconnector.h"
@@ -107,15 +109,15 @@ public:
virtual std::string to_text();
virtual std::string to_string();
virtual void generate_insert_query(PT::TextStream & stream); // FIX ME needed model_data
virtual void generate_insert_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool insert(ModelData * model_data = nullptr);
virtual bool insert(ModelData & model_data);
virtual void generate_update_query(PT::TextStream & stream); // FIX ME needed model_data
virtual void generate_update_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool update(ModelData * model_data = nullptr);
virtual bool update(ModelData & model_data);
virtual void generate_remove_query(PT::TextStream & stream); // FIX ME needed model_data
virtual void generate_remove_query(PT::TextStream & stream, ModelData * model_data = nullptr);
virtual bool remove(ModelData * model_data = nullptr);
virtual bool remove(ModelData & model_data);
@@ -281,6 +283,12 @@ protected:
field_list(field_name, field_name, field_value, list_model_null_pointer, insertable, updatable);
}
template<typename ModelClass>
void field(const wchar_t * field_name, std::vector<ModelClass> & field_value, bool insertable = true, bool updatable = true)
{
ModelClass * list_model_null_pointer = nullptr;
field_list(field_name, field_name, field_value, list_model_null_pointer, insertable, updatable);
}
//////////////////////
@@ -397,7 +405,14 @@ protected:
field_list(db_field_name, flat_field_name, field_value, list_model_null_pointer, insertable, updatable);
}
//////////////////////
template<typename ModelClass>
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector<ModelClass> & field_value, bool insertable = true, bool updatable = true)
{
ModelClass * list_model_null_pointer = nullptr;
field_list(db_field_name, flat_field_name, field_value, list_model_null_pointer, insertable, updatable);
}
//////////////////////
void doc(const wchar_t * field_name, char & field_value)
{
doc_field_generic(field_name, field_name, field_value);
@@ -813,6 +828,8 @@ protected:
if( db_expression->get_output_type() != MORM_OUTPUT_TYPE_JOIN_TABLES )
{
// FIX ME
// UPDATE, INSERT, REMOVE for models
field_model.map_fields();
}
@@ -946,6 +963,9 @@ protected:
// another select will be used (from another Finder)
// we need only columns name
// but columns are defined in the other model
// FIX ME
// UPDATE, INSERT, REMOVE for lists
}
}
}