added to Finder: methods eq() and similar with table_name as an argument

Finder<ModelClass> & eq(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
Finder<ModelClass> & eq(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
and similar for neq(), lt(), gt(), le(), ge() and in()
This commit is contained in:
Tomasz Sowa 2021-05-13 19:32:31 +02:00
parent 6eaa9088e5
commit de4abeb91c
3 changed files with 294 additions and 2 deletions

View File

@ -174,7 +174,14 @@ void BaseExpression::put_field_name_and_table_if_needed(const wchar_t * field_na
{
if( use_prefix && model_env )
{
put_table_with_index_and_field(model_env->table_name, model_env->table_index, field_name, field_type);
if( !is_empty_field(model_env->table2_name) )
{
put_table_with_index_and_field(model_env->table2_name, model_env->table2_index, field_name, field_type);
}
else
{
put_table_with_index_and_field(model_env->table_name, model_env->table_index, field_name, field_type);
}
}
else
{

View File

@ -341,7 +341,6 @@ public:
template<typename FieldValue>
Finder<ModelClass> & eq(const wchar_t * field_name, const FieldValue & field_value)
{
@ -355,6 +354,32 @@ public:
}
template<typename FieldValue>
Finder<ModelClass> & eq(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_EQ);
field_to_stream(table_name, 1, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & eq(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_EQ);
field_to_stream(table_name, table_index, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & neq(const wchar_t * field_name, const FieldValue & field_value)
{
@ -367,6 +392,33 @@ public:
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & neq(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_NOT_EQ);
field_to_stream(table_name, 1, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & neq(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_NOT_EQ);
field_to_stream(table_name, table_index, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & lt(const wchar_t * field_name, const FieldValue & field_value)
{
@ -380,6 +432,32 @@ public:
}
template<typename FieldValue>
Finder<ModelClass> & lt(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_LT);
field_to_stream(table_name, 1, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & lt(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_LT);
field_to_stream(table_name, table_index, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & gt(const wchar_t * field_name, const FieldValue & field_value)
{
@ -393,6 +471,32 @@ public:
}
template<typename FieldValue>
Finder<ModelClass> & gt(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_GT);
field_to_stream(table_name, 1, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & gt(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_GT);
field_to_stream(table_name, table_index, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & le(const wchar_t * field_name, const FieldValue & field_value)
{
@ -406,6 +510,34 @@ public:
}
template<typename FieldValue>
Finder<ModelClass> & le(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_LE);
field_to_stream(table_name, 1, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & le(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_LE);
field_to_stream(table_name, table_index, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & ge(const wchar_t * field_name, const FieldValue & field_value)
{
@ -419,6 +551,33 @@ public:
}
template<typename FieldValue>
Finder<ModelClass> & ge(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_GE);
field_to_stream(table_name, 1, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & ge(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_GE);
field_to_stream(table_name, table_index, field_name, field_value);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * field_name, const std::set<FieldValue> & container)
@ -432,6 +591,33 @@ public:
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * table_name, const wchar_t * field_name, const std::set<FieldValue> & container)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_IN);
field_in(table_name, 1, field_name, container);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * table_name, int table_index, const wchar_t * field_name, const std::set<FieldValue> & container)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_IN);
field_in(table_name, table_index, field_name, container);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * field_name, const std::list<FieldValue> & container)
{
@ -444,6 +630,33 @@ public:
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * table_name, const wchar_t * field_name, const std::list<FieldValue> & container)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_IN);
field_in(table_name, 1, field_name, container);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * table_name, int table_index, const wchar_t * field_name, const std::list<FieldValue> & container)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_IN);
field_in(table_name, table_index, field_name, container);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * field_name, const std::vector<FieldValue> & container)
{
@ -456,6 +669,35 @@ public:
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * table_name, const wchar_t * field_name, const std::vector<FieldValue> & container)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_IN);
field_in(table_name, 1, field_name, container);
}
return *this;
}
template<typename FieldValue>
Finder<ModelClass> & in(const wchar_t * table_name, int table_index, const wchar_t * field_name, const std::vector<FieldValue> & container)
{
if( db_expression )
{
db_expression->set_output_type(MORM_OUTPUT_TYPE_WHERE_IN);
field_in(table_name, table_index, field_name, container);
}
return *this;
}
Finder<ModelClass> & page(size_t page_number, size_t page_size)
{
if( out_stream && db_expression )
@ -640,6 +882,35 @@ private:
}
template<typename FieldValue>
void field_to_stream(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
{
if( db_expression )
{
model_env.table2_name = table_name;
model_env.table2_index = table_index;
db_expression->field_to_stream(*out_stream, field_name, field_value, FT::default_type, &model_env);
model_env.table2_name = nullptr;
model_env.table2_index = 0;
}
}
template<typename Container>
void field_in(const wchar_t * table_name, int table_index, const wchar_t * field_name, const Container & container)
{
if( db_expression )
{
model_env.table2_name = table_name;
model_env.table2_index = table_index;
db_expression->field_in(*out_stream, field_name, container, &model_env);
model_env.table2_name = nullptr;
model_env.table2_index = 0;
}
}
};

View File

@ -64,10 +64,20 @@ public:
PT::WTextStream schema_name;
PT::WTextStream table_name;
int table_index;
/*
* optional additional table name
* used in eq(), neq(), ... methods in Finder
*/
const wchar_t * table2_name;
int table2_index;
int field_index;
bool was_primary_key_read;
bool has_primary_key_set;
std::vector<const wchar_t *> * set_field_name_helper;
std::vector<FieldValueHelper> * field_value_helper_tab;
@ -87,6 +97,7 @@ public:
copy_global_objects(e);
table_index = e.table_index;
table2_index = e.table2_index;
set_field_name_helper = e.set_field_name_helper;
field_value_helper_tab = e.field_value_helper_tab;
field_index = e.field_index;
@ -94,6 +105,7 @@ public:
has_primary_key_set = e.has_primary_key_set;
// schema_name and table_name don't have to be copied
table2_name = nullptr;
}
@ -119,7 +131,9 @@ public:
dump_mode = false;
schema_name.clear();
table_name.clear();
table2_name = nullptr;
table_index = 0;
table2_index = 0;
set_field_name_helper = nullptr;
field_value_helper_tab = nullptr;
field_index = 0;