changed the way how to quote schemas, tables and field names,

added escaping table names in insert/update/remove

removed methods from BaseExpression:
virtual void before_short_field_name();
virtual void after_short_field_name();
virtual void before_first_part_long_field_name();
virtual void after_first_part_long_field_name();
virtual void before_second_part_long_field_name();
virtual void after_second_part_long_field_name();

added methods to BaseExpression:
virtual void schema_table_separator();
virtual void table_field_separator();
virtual void before_schema_name();
virtual void after_schema_name();
virtual void before_table_name();
virtual void after_table_name();
virtual void before_field_name();
virtual void after_field_name();
This commit is contained in:
2021-05-13 02:32:03 +02:00
parent a1537cf8d5
commit 2ad6c8c258
11 changed files with 222 additions and 177 deletions

View File

@@ -907,56 +907,54 @@ bool Model::is_the_same_field(const wchar_t * field1, const wchar_t * field2)
PT::WTextStream Model::get_table_name(bool put_schema_name)
void Model::log_table_name(bool put_schema_name)
{
PT::WTextStream str;
if( model_env )
if( model_connector && model_env )
{
if( put_schema_name && !model_env->schema_name.empty() )
PT::Log * plog = model_connector->get_logger();
if( plog )
{
str << model_env->schema_name;
if( put_schema_name && !model_env->schema_name.empty() )
{
(*plog) << model_env->schema_name;
// IMPROVEME make a virtual method in dbexpression to put such a dot
str << '.';
// although in BaseExpression there is schema_table_separator() method
// but for logging purposes we can use just a dot here
(*plog) << '.';
}
(*plog) << model_env->table_name;
}
str << model_env->table_name;
}
return str;
}
PT::WTextStream Model::get_table_name_with_field(const wchar_t * db_field_name, bool put_schema_name)
void Model::log_table_name_with_field(const wchar_t * db_field_name, bool put_schema_name)
{
PT::WTextStream str;
bool is_empty_field_name = is_empty_field(db_field_name);
if( model_env )
if( model_connector && model_env )
{
if( put_schema_name && !model_env->schema_name.empty() )
PT::Log * plog = model_connector->get_logger();
if( plog )
{
str << model_env->schema_name;
bool is_empty_field_name = is_empty_field(db_field_name);
// IMPROVEME make a virtual method in dbexpression to put such a dot
str << '.';
}
if( put_schema_name && !model_env->schema_name.empty() )
{
(*plog) << model_env->schema_name;
(*plog) << '.';
}
str << model_env->table_name;
(*plog) << model_env->table_name;
if( !is_empty_field_name )
{
str << '.'; // IMPROVEME get a virtual method from dbexpression
if( !is_empty_field_name )
{
(*plog) << '.';
(*plog) << db_field_name;
}
}
}
if( !is_empty_field_name )
{
str << db_field_name;
}
return str;
}
@@ -1099,7 +1097,9 @@ void Model::field_model_save_key(const wchar_t * db_field_name)
if( model_env->field_value_helper_tab->empty() && plog )
{
(*plog) << PT::Log::log1 << "Morm: I cannot find a primary key in " << get_table_name() << PT::Log::logend;
(*plog) << PT::Log::log1 << "Morm: I cannot find a primary key in ";
log_table_name();
(*plog) << PT::Log::logend;
}
}
}
@@ -1139,14 +1139,19 @@ void Model::field_model_set_parent_key_in_child(const wchar_t * db_field_name, M
{
if( field_model.model_env->field_index == 0 )
{
(*log) << PT::Log::log1 << "Morm: there is no a foreign key in " << field_model.get_table_name()
<< " called " << db_field_name << " pointing to " << get_table_name() << PT::Log::logend;
(*log) << PT::Log::log1 << "Morm: there is no a foreign key in ";
field_model.log_table_name();
(*log) << " called " << db_field_name << " pointing to ";
log_table_name();
(*log) << PT::Log::logend;
}
else
{
(*log) << PT::Log::log1 << "Morm: primary key in " << get_table_name() << " consists of " << model_env->field_index << " column(s)"
<< " but foreign key in " << field_model.get_table_name() << " consists of "
<< field_model.model_env->field_index << " column(s)" << PT::Log::logend;
(*log) << PT::Log::log1 << "Morm: primary key in ";
log_table_name();
(*log) << " consists of " << model_env->field_index << " column(s) but foreign key in ";
field_model.log_table_name();
(*log) << " consists of " << field_model.model_env->field_index << " column(s)" << PT::Log::logend;
}
}
@@ -1155,8 +1160,10 @@ void Model::field_model_set_parent_key_in_child(const wchar_t * db_field_name, M
else
if( log )
{
(*log) << PT::Log::log1 << "Morm: primary key in " << get_table_name() << " consists of incorrect number of columns"
<< ", expected " << helper_tab.size() << " column(s) but got " << model_env->field_index << PT::Log::logend;
(*log) << PT::Log::log1 << "Morm: primary key in ";
log_table_name();
(*log) << " consists of incorrect number of columns, expected " << helper_tab.size()
<< " column(s) but got " << model_env->field_index << PT::Log::logend;
}
}
}
@@ -1368,8 +1375,9 @@ void Model::field_model(const wchar_t * db_field_name, const wchar_t * flat_fiel
if( plog )
{
(*plog) << PT::Log::log1 << "Morm: error in " << get_table_name_with_field(db_field_name)
<< " field, you should set FT::is_foreign_key or FT::is_foreign_key_in_child flag for a model child object" << PT::Log::logend;
(*plog) << PT::Log::log1 << "Morm: error in ";
log_table_name_with_field(db_field_name);
(*plog) << " field, you should set FT::is_foreign_key or FT::is_foreign_key_in_child flag for a model child object" << PT::Log::logend;
}
}
}