added: Finder::prefix() method
code not thoroughly tested git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1106 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
98206fdb7a
commit
e25b6d9a29
|
@ -60,6 +60,19 @@ void BaseExpression::set_work_mode(int work_mode)
|
|||
}
|
||||
|
||||
|
||||
void BaseExpression::prepare_to_new_expression()
|
||||
{
|
||||
column_prefix.clear();
|
||||
out_stream = nullptr;
|
||||
is_first_field = false;
|
||||
work_mode = 0;
|
||||
}
|
||||
|
||||
void BaseExpression::set_column_prefix(const std::wstring & prefix)
|
||||
{
|
||||
column_prefix = prefix;
|
||||
}
|
||||
|
||||
void BaseExpression::generate_from_model(PT::TextStream & stream, Model & model)
|
||||
{
|
||||
this->out_stream = &stream;
|
||||
|
@ -113,6 +126,13 @@ void BaseExpression::field_after()
|
|||
void BaseExpression::put_field_name(const wchar_t * field_name)
|
||||
{
|
||||
before_field_name();
|
||||
|
||||
if( !column_prefix.empty() )
|
||||
{
|
||||
esc(column_prefix, *out_stream);
|
||||
(*out_stream) << '.';
|
||||
}
|
||||
|
||||
esc(field_name, *out_stream);
|
||||
after_field_name();
|
||||
}
|
||||
|
|
|
@ -56,6 +56,9 @@ public:
|
|||
virtual ~BaseExpression();
|
||||
|
||||
virtual void set_work_mode(int work_mode);
|
||||
virtual void prepare_to_new_expression();
|
||||
virtual void set_column_prefix(const std::wstring & prefix);
|
||||
|
||||
virtual void generate_from_model(PT::TextStream & stream, Model & model);
|
||||
|
||||
template<typename FieldValue>
|
||||
|
@ -219,6 +222,9 @@ protected:
|
|||
// przyda sie do formatowania doubli
|
||||
PT::TextStream * out_stream;
|
||||
|
||||
|
||||
std::wstring column_prefix;
|
||||
|
||||
// virtual void map_fields(Model * model)
|
||||
// {
|
||||
// work_mode = model->work_mode;
|
||||
|
|
|
@ -169,14 +169,16 @@ DbExpression * DbConnector::get_expression()
|
|||
}
|
||||
|
||||
|
||||
void DbConnector::generate_select_columns(PT::TextStream & stream, Model & model)
|
||||
void DbConnector::generate_select_columns(PT::TextStream & stream, Model & model, const std::wstring & column_prefix)
|
||||
{
|
||||
allocate_default_expression_if_needed();
|
||||
|
||||
if( db_expression )
|
||||
{
|
||||
db_expression->prepare_to_new_expression();
|
||||
db_expression->set_work_mode(MORM_WORK_MODE_MODEL_FIELDS);
|
||||
db_expression->set_output_type(MORM_OUTPUT_TYPE_SELECT_COLUMNS);
|
||||
db_expression->set_column_prefix(column_prefix);
|
||||
db_expression->generate_from_model(stream, model);
|
||||
}
|
||||
}
|
||||
|
@ -188,6 +190,7 @@ void DbConnector::generate_insert_query(PT::TextStream & stream, Model & model)
|
|||
|
||||
if( db_expression )
|
||||
{
|
||||
db_expression->prepare_to_new_expression();
|
||||
stream << "insert into ";
|
||||
model.table_name(stream);
|
||||
|
||||
|
@ -210,6 +213,7 @@ void DbConnector::generate_update_query(PT::TextStream & stream, Model & model)
|
|||
|
||||
if( db_expression )
|
||||
{
|
||||
db_expression->prepare_to_new_expression();
|
||||
stream << "update ";
|
||||
model.table_name(stream);
|
||||
|
||||
|
@ -232,6 +236,7 @@ void DbConnector::generate_remove_query(PT::TextStream & stream, Model & model)
|
|||
|
||||
if( db_expression )
|
||||
{
|
||||
db_expression->prepare_to_new_expression();
|
||||
stream << "delete from ";
|
||||
model.table_name(stream);
|
||||
stream << " where ";
|
||||
|
|
|
@ -61,7 +61,7 @@ public:
|
|||
|
||||
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, const std::wstring & column_prefix);
|
||||
virtual void generate_insert_query(PT::TextStream & stream, Model & model);
|
||||
virtual void generate_update_query(PT::TextStream & stream, Model & model);
|
||||
virtual void generate_remove_query(PT::TextStream & stream, Model & model);
|
||||
|
@ -165,6 +165,7 @@ protected:
|
|||
std::wstring last_query_error_msg;
|
||||
PT::Logger * logger;
|
||||
|
||||
|
||||
virtual void allocate_default_expression() = 0;
|
||||
virtual void allocate_default_expression_if_needed();
|
||||
virtual void deallocate_expression();
|
||||
|
|
79
src/finder.h
79
src/finder.h
|
@ -121,30 +121,10 @@ public:
|
|||
}
|
||||
|
||||
|
||||
Finder<ModelClass> & select(ModelConnector & model_connector)
|
||||
Finder<ModelClass> & prefix(const wchar_t * prefix)
|
||||
{
|
||||
this->model_connector = &model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
Finder<ModelClass> & select(ModelConnector * model_connector)
|
||||
{
|
||||
this->model_connector = model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
Finder<ModelClass> & select(PT::TextStream & out_stream, ModelConnector & model_connector)
|
||||
{
|
||||
this->out_stream = &out_stream;
|
||||
this->model_connector = &model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
Finder<ModelClass> & select(PT::TextStream & out_stream, ModelConnector * model_connector)
|
||||
{
|
||||
this->out_stream = &out_stream;
|
||||
this->model_connector = model_connector;
|
||||
return select();
|
||||
column_prefix = prefix;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
@ -153,6 +133,7 @@ public:
|
|||
was_query_error = false;
|
||||
last_query_error.clear();
|
||||
model_data = nullptr;
|
||||
column_prefix.clear();
|
||||
|
||||
if( model_connector )
|
||||
{
|
||||
|
@ -184,6 +165,32 @@ public:
|
|||
}
|
||||
|
||||
|
||||
Finder<ModelClass> & select(ModelConnector & model_connector)
|
||||
{
|
||||
this->model_connector = &model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
Finder<ModelClass> & select(ModelConnector * model_connector)
|
||||
{
|
||||
this->model_connector = model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
Finder<ModelClass> & select(PT::TextStream & out_stream, ModelConnector & model_connector)
|
||||
{
|
||||
this->out_stream = &out_stream;
|
||||
this->model_connector = &model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
Finder<ModelClass> & select(PT::TextStream & out_stream, ModelConnector * model_connector)
|
||||
{
|
||||
this->out_stream = &out_stream;
|
||||
this->model_connector = model_connector;
|
||||
return select();
|
||||
}
|
||||
|
||||
|
||||
Finder<ModelClass> & select(bool call_prepare = true)
|
||||
{
|
||||
|
@ -195,9 +202,13 @@ public:
|
|||
if( model_connector && out_stream )
|
||||
{
|
||||
(*out_stream) << "SELECT ";
|
||||
model_connector->generate_select_columns(*out_stream, model);
|
||||
model_connector->generate_select_columns(*out_stream, model, column_prefix);
|
||||
(*out_stream) << " FROM ";
|
||||
model.table_name(*out_stream);
|
||||
|
||||
if( !column_prefix.empty() )
|
||||
(*out_stream) << " AS " << column_prefix; // what about escaping?
|
||||
|
||||
(*out_stream) << " ";
|
||||
}
|
||||
|
||||
|
@ -403,6 +414,23 @@ public:
|
|||
}
|
||||
|
||||
|
||||
Finder<ModelClass> & raw(long val, bool add_spaces = true)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
if( add_spaces )
|
||||
(*out_stream) << ' ';
|
||||
|
||||
(*out_stream) << val;
|
||||
|
||||
if( add_spaces )
|
||||
(*out_stream) << ' ';
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
bool get(ModelClass & result)
|
||||
{
|
||||
bool res = false;
|
||||
|
@ -542,6 +570,9 @@ private:
|
|||
bool was_query_error;
|
||||
std::wstring last_query_error;
|
||||
Model::ModelData * model_data;
|
||||
std::wstring column_prefix;
|
||||
|
||||
|
||||
|
||||
void set_db_expression()
|
||||
{
|
||||
|
|
|
@ -198,7 +198,7 @@ void ModelConnector::to_text(PT::TextStream & stream, Model & model)
|
|||
}
|
||||
|
||||
|
||||
void ModelConnector::generate_select_columns(PT::TextStream & stream, Model & model)
|
||||
void ModelConnector::generate_select_columns(PT::TextStream & stream, Model & model, const std::wstring & column_prefix)
|
||||
{
|
||||
if( db_connector )
|
||||
{
|
||||
|
@ -207,7 +207,7 @@ void ModelConnector::generate_select_columns(PT::TextStream & stream, Model & mo
|
|||
|
||||
//if( expression_callback )
|
||||
//{
|
||||
db_connector->generate_select_columns(stream, model);
|
||||
db_connector->generate_select_columns(stream, model, column_prefix);
|
||||
//}
|
||||
|
||||
//expression_callback = nullptr;
|
||||
|
|
|
@ -85,7 +85,7 @@ public:
|
|||
virtual void to_text(PT::TextStream & stream, Model & model);
|
||||
|
||||
|
||||
virtual void generate_select_columns(PT::TextStream & stream, Model & model);
|
||||
virtual void generate_select_columns(PT::TextStream & stream, Model & model, const std::wstring & column_prefix);
|
||||
virtual void generate_insert_query(PT::TextStream & stream, Model & model);
|
||||
virtual void generate_update_query(PT::TextStream & stream, Model & model);
|
||||
virtual void generate_remove_query(PT::TextStream & stream, Model & model);
|
||||
|
|
Loading…
Reference in New Issue