winix_fullmorm #4

Merged
tomasz.sowa merged 27 commits from winix_fullmorm into master 2021-05-27 10:49:46 +02:00
4 changed files with 170 additions and 3 deletions
Showing only changes of commit b12037a7e5 - Show all commits

View File

@ -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)
{
std::string query_str;

View File

@ -62,8 +62,6 @@ public:
DbExpression * get_expression();
//virtual void clear_last_query_result();
virtual void generate_select_columns(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);
@ -73,7 +71,9 @@ public:
virtual bool update(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;

View File

@ -33,6 +33,7 @@
*/
#include "model.h"
#include "utf8/utf8.h"
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)
{
if( clear_stream )
@ -272,6 +335,7 @@ std::string Model::to_string()
void Model::generate_insert_query(PT::TextStream & stream, ModelData * model_data)
{
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

View File

@ -86,6 +86,10 @@ public:
void set_connector(ModelConnector * 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, bool clear_stream = true, bool dump_mode = false);
@ -122,6 +126,9 @@ public:
// set object to default values
virtual void clear();
virtual bool do_migration(int & current_table_version);
// IMPROVE ME this will be protected
// add set_field_value() functions for each POD type
template<typename FieldValue>
@ -210,6 +217,9 @@ protected:
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_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 Cursor;
friend class BaseExpression;