winix_fullmorm #4
|
@ -85,6 +85,28 @@ void DbConnector::set_log_queries(bool log_queries)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DbConnector::query(const PT::TextStream & stream)
|
||||||
|
{
|
||||||
|
std::unique_ptr<QueryResult> query_result_ptr(create_query_result());
|
||||||
|
return query(stream, *query_result_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DbConnector::query(const std::string & query_str)
|
||||||
|
{
|
||||||
|
std::unique_ptr<QueryResult> query_result_ptr(create_query_result());
|
||||||
|
return query(query_str, *query_result_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DbConnector::query(const char * query_str)
|
||||||
|
{
|
||||||
|
std::unique_ptr<QueryResult> query_result_ptr(create_query_result());
|
||||||
|
return query(query_str, *query_result_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool DbConnector::query(const PT::TextStream & stream, QueryResult & query_result)
|
bool DbConnector::query(const PT::TextStream & stream, QueryResult & query_result)
|
||||||
{
|
{
|
||||||
std::string query_str;
|
std::string query_str;
|
||||||
|
|
|
@ -62,8 +62,6 @@ public:
|
||||||
|
|
||||||
DbExpression * get_expression();
|
DbExpression * get_expression();
|
||||||
|
|
||||||
//virtual void clear_last_query_result();
|
|
||||||
|
|
||||||
virtual void generate_select_columns(PT::TextStream & stream, Model & model);
|
virtual void generate_select_columns(PT::TextStream & stream, Model & model);
|
||||||
virtual void generate_insert_query(PT::TextStream & stream, Model & model);
|
virtual void generate_insert_query(PT::TextStream & stream, Model & model);
|
||||||
virtual void generate_update_query(PT::TextStream & stream, Model & model);
|
virtual void generate_update_query(PT::TextStream & stream, Model & model);
|
||||||
|
@ -73,7 +71,9 @@ public:
|
||||||
virtual bool update(PT::TextStream & stream, Model & model);
|
virtual bool update(PT::TextStream & stream, Model & model);
|
||||||
virtual bool remove(PT::TextStream & stream, Model & model);
|
virtual bool remove(PT::TextStream & stream, Model & model);
|
||||||
|
|
||||||
//void ModelConnector::get_values_from_db(Model & model)
|
virtual bool query(const PT::TextStream & stream);
|
||||||
|
virtual bool query(const std::string & query_str);
|
||||||
|
virtual bool query(const char * query_str);
|
||||||
|
|
||||||
virtual QueryResult * create_query_result() = 0;
|
virtual QueryResult * create_query_result() = 0;
|
||||||
|
|
||||||
|
|
113
src/model.cpp
113
src/model.cpp
|
@ -33,6 +33,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "model.h"
|
#include "model.h"
|
||||||
|
#include "utf8/utf8.h"
|
||||||
|
|
||||||
|
|
||||||
namespace morm
|
namespace morm
|
||||||
|
@ -177,6 +178,68 @@ bool Model::found()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Model::get_table_name(PT::WTextStream & stream, bool with_schema_name, ModelData * model_data, bool clear_stream)
|
||||||
|
{
|
||||||
|
if( clear_stream )
|
||||||
|
{
|
||||||
|
stream.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
ModelEnv model_env_local;
|
||||||
|
model_env = &model_env_local;
|
||||||
|
model_env->model_data = model_data;
|
||||||
|
|
||||||
|
if( model_connector )
|
||||||
|
{
|
||||||
|
DbConnector * db_connector = model_connector->get_db_connector();
|
||||||
|
|
||||||
|
if( db_connector )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
table();
|
||||||
|
|
||||||
|
if( with_schema_name && !model_env->schema_name.empty() )
|
||||||
|
{
|
||||||
|
stream << model_env->schema_name;
|
||||||
|
stream << '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
stream << model_env->table_name;
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
model_env = nullptr;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model_env = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Model::get_table_name(std::wstring & str, bool with_schema_name, ModelData * model_data, bool clear_string)
|
||||||
|
{
|
||||||
|
PT::WTextStream stream;
|
||||||
|
|
||||||
|
if( clear_string )
|
||||||
|
str.clear();
|
||||||
|
|
||||||
|
get_table_name(stream, with_schema_name, model_data, false);
|
||||||
|
stream.to_string(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Model::get_table_name(std::string & str, bool with_schema_name, ModelData * model_data, bool clear_string)
|
||||||
|
{
|
||||||
|
PT::WTextStream stream;
|
||||||
|
|
||||||
|
get_table_name(stream, with_schema_name, model_data, false);
|
||||||
|
PT::WideStreamToUTF8(stream, str, clear_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Model::to_text(PT::TextStream & stream, ModelData * model_data, bool clear_stream, bool dump_mode)
|
void Model::to_text(PT::TextStream & stream, ModelData * model_data, bool clear_stream, bool dump_mode)
|
||||||
{
|
{
|
||||||
if( clear_stream )
|
if( clear_stream )
|
||||||
|
@ -272,6 +335,7 @@ std::string Model::to_string()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Model::generate_insert_query(PT::TextStream & stream, ModelData * model_data)
|
void Model::generate_insert_query(PT::TextStream & stream, ModelData * model_data)
|
||||||
{
|
{
|
||||||
ModelEnv model_env_local;
|
ModelEnv model_env_local;
|
||||||
|
@ -797,6 +861,10 @@ void Model::clear()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool Model::do_migration(int & current_table_version)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1449,5 +1517,50 @@ void Model::set_parent_key_in_childs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool Model::db_query(const char * raw_sql)
|
||||||
|
{
|
||||||
|
bool status = false;
|
||||||
|
|
||||||
|
if( model_connector )
|
||||||
|
{
|
||||||
|
DbConnector * db_connector = model_connector->get_db_connector();
|
||||||
|
|
||||||
|
if( db_connector )
|
||||||
|
{
|
||||||
|
status = db_connector->query(raw_sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Model::db_query(const std::string & raw_sql)
|
||||||
|
{
|
||||||
|
return db_query(raw_sql.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Model::db_query(const PT::TextStream & raw_sql)
|
||||||
|
{
|
||||||
|
bool status = false;
|
||||||
|
|
||||||
|
if( model_connector )
|
||||||
|
{
|
||||||
|
DbConnector * db_connector = model_connector->get_db_connector();
|
||||||
|
|
||||||
|
if( db_connector )
|
||||||
|
{
|
||||||
|
status = db_connector->query(raw_sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
32
src/model.h
32
src/model.h
|
@ -86,6 +86,10 @@ public:
|
||||||
void set_connector(ModelConnector * connector);
|
void set_connector(ModelConnector * connector);
|
||||||
ModelConnector * get_connector();
|
ModelConnector * get_connector();
|
||||||
|
|
||||||
|
virtual void get_table_name(PT::WTextStream & stream, bool with_schema_name = true, ModelData * model_data = nullptr, bool clear_stream = true);
|
||||||
|
virtual void get_table_name(std::wstring & str, bool with_schema_name = true, ModelData * model_data = nullptr, bool clear_string = true);
|
||||||
|
virtual void get_table_name(std::string & str, bool with_schema_name = true, ModelData * model_data = nullptr, bool clear_string = true);
|
||||||
|
|
||||||
virtual void to_text(PT::TextStream & stream, ModelData * model_data, bool clear_stream = true, bool dump_mode = false);
|
virtual void to_text(PT::TextStream & stream, ModelData * model_data, bool clear_stream = true, bool dump_mode = false);
|
||||||
virtual void to_text(PT::TextStream & stream, ModelData & model_data, bool clear_stream = true, bool dump_mode = false);
|
virtual void to_text(PT::TextStream & stream, ModelData & model_data, bool clear_stream = true, bool dump_mode = false);
|
||||||
virtual void to_text(PT::TextStream & stream, bool clear_stream = true, bool dump_mode = false);
|
virtual void to_text(PT::TextStream & stream, bool clear_stream = true, bool dump_mode = false);
|
||||||
|
@ -122,6 +126,9 @@ public:
|
||||||
// set object to default values
|
// set object to default values
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
|
|
||||||
|
virtual bool do_migration(int & current_table_version);
|
||||||
|
|
||||||
|
|
||||||
// IMPROVE ME this will be protected
|
// IMPROVE ME this will be protected
|
||||||
// add set_field_value() functions for each POD type
|
// add set_field_value() functions for each POD type
|
||||||
template<typename FieldValue>
|
template<typename FieldValue>
|
||||||
|
@ -210,6 +217,9 @@ protected:
|
||||||
|
|
||||||
virtual void map_values_from_query();
|
virtual void map_values_from_query();
|
||||||
|
|
||||||
|
virtual bool db_query(const char * raw_sql);
|
||||||
|
virtual bool db_query(const std::string & raw_sql);
|
||||||
|
virtual bool db_query(const PT::TextStream & raw_sql);
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
/*
|
/*
|
||||||
|
@ -972,6 +982,28 @@ protected:
|
||||||
virtual void log_table_name(bool put_schema_name = true);
|
virtual void log_table_name(bool put_schema_name = true);
|
||||||
virtual void log_table_name_with_field(const wchar_t * db_field_name = nullptr, bool put_schema_name = true);
|
virtual void log_table_name_with_field(const wchar_t * db_field_name = nullptr, bool put_schema_name = true);
|
||||||
|
|
||||||
|
template<typename ModelObject>
|
||||||
|
bool do_migration(int & current_table_version, int destination_table_version, ModelObject * model_object, bool (ModelObject::*migration_function)())
|
||||||
|
{
|
||||||
|
bool status = true;
|
||||||
|
|
||||||
|
if( current_table_version < destination_table_version )
|
||||||
|
{
|
||||||
|
if( (model_object->*migration_function)() )
|
||||||
|
{
|
||||||
|
current_table_version = destination_table_version;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename ModelClass> friend class Finder;
|
template<typename ModelClass> friend class Finder;
|
||||||
template<typename ModelClass> friend class Cursor;
|
template<typename ModelClass> friend class Cursor;
|
||||||
friend class BaseExpression;
|
friend class BaseExpression;
|
||||||
|
|
Loading…
Reference in New Issue