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:
@@ -192,11 +192,9 @@ void BaseExpression::put_field_name(const wchar_t * field_name, const FT & field
|
||||
}
|
||||
else
|
||||
{
|
||||
// !!!!!!!!!!!!!!!!!!!
|
||||
// there are too many methods: before... after...
|
||||
before_short_field_name();
|
||||
before_field_name();
|
||||
esc(field_name, *out_stream);
|
||||
after_short_field_name();
|
||||
after_field_name();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,36 +217,47 @@ void BaseExpression::save_foreign_key(const wchar_t * field_name, const FT & fie
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::before_short_field_name()
|
||||
|
||||
void BaseExpression::schema_table_separator()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::after_short_field_name()
|
||||
void BaseExpression::table_field_separator()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::before_first_part_long_field_name()
|
||||
|
||||
void BaseExpression::before_schema_name()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::after_first_part_long_field_name()
|
||||
void BaseExpression::after_schema_name()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::before_second_part_long_field_name()
|
||||
void BaseExpression::before_table_name()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::after_second_part_long_field_name()
|
||||
void BaseExpression::after_table_name()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::before_field_name()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::after_field_name()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void BaseExpression::before_field_value(const std::wstring &, const FT & field_type)
|
||||
{
|
||||
@@ -690,36 +699,63 @@ void BaseExpression::after_field_value_string(const FT & field_type)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* schema_name can be a null pointer or just pointing to an empty string
|
||||
* in such a case we do not put the schema name
|
||||
*/
|
||||
void BaseExpression::put_schema_table(const wchar_t * schema_name, const wchar_t * table_name)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
before_first_part_long_field_name();
|
||||
esc(schema_name, *out_stream);
|
||||
after_first_part_long_field_name();
|
||||
bool has_schema = false;
|
||||
|
||||
(*out_stream) << '.';
|
||||
if( !is_empty_field(schema_name) )
|
||||
{
|
||||
has_schema = true;
|
||||
before_schema_name();
|
||||
esc(schema_name, *out_stream);
|
||||
after_schema_name();
|
||||
}
|
||||
|
||||
before_second_part_long_field_name();
|
||||
esc(table_name, *out_stream);
|
||||
after_second_part_long_field_name();
|
||||
if( !is_empty_field(table_name) )
|
||||
{
|
||||
if( has_schema )
|
||||
schema_table_separator();
|
||||
|
||||
before_table_name();
|
||||
esc(table_name, *out_stream);
|
||||
after_table_name();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* schema_name can be empty - in such a case we do not put the schema name
|
||||
*/
|
||||
void BaseExpression::put_schema_table(const PT::WTextStream & schema_name, const PT::WTextStream & table_name)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
before_first_part_long_field_name();
|
||||
esc(schema_name, *out_stream);
|
||||
after_first_part_long_field_name();
|
||||
bool has_schema = false;
|
||||
|
||||
(*out_stream) << '.';
|
||||
if( !schema_name.empty() )
|
||||
{
|
||||
has_schema = true;
|
||||
before_schema_name();
|
||||
esc(schema_name, *out_stream);
|
||||
after_schema_name();
|
||||
}
|
||||
|
||||
before_second_part_long_field_name();
|
||||
esc(table_name, *out_stream);
|
||||
after_second_part_long_field_name();
|
||||
if( !table_name.empty() )
|
||||
{
|
||||
if( has_schema )
|
||||
schema_table_separator();
|
||||
|
||||
before_table_name();
|
||||
esc(table_name, *out_stream);
|
||||
after_table_name();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -728,9 +764,9 @@ void BaseExpression::put_table(const wchar_t * table_name)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
before_short_field_name();
|
||||
before_table_name();
|
||||
esc(table_name, *out_stream);
|
||||
after_short_field_name();
|
||||
after_table_name();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -739,9 +775,9 @@ void BaseExpression::put_table(const PT::WTextStream & table_name)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
before_short_field_name();
|
||||
before_table_name();
|
||||
esc(table_name, *out_stream);
|
||||
after_short_field_name();
|
||||
after_table_name();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,7 +786,7 @@ void BaseExpression::put_table_with_index(const wchar_t * table_name, int index)
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
before_short_field_name();
|
||||
before_table_name();
|
||||
esc(table_name, *out_stream);
|
||||
|
||||
if( index > 1 )
|
||||
@@ -758,7 +794,7 @@ void BaseExpression::put_table_with_index(const wchar_t * table_name, int index)
|
||||
(*out_stream) << index;
|
||||
}
|
||||
|
||||
after_short_field_name();
|
||||
after_table_name();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -767,7 +803,7 @@ void BaseExpression::put_table_with_index(const PT::WTextStream & table_name, in
|
||||
{
|
||||
if( out_stream )
|
||||
{
|
||||
before_short_field_name();
|
||||
before_table_name();
|
||||
esc(table_name, *out_stream);
|
||||
|
||||
if( index > 1 )
|
||||
@@ -775,7 +811,7 @@ void BaseExpression::put_table_with_index(const PT::WTextStream & table_name, in
|
||||
(*out_stream) << index;
|
||||
}
|
||||
|
||||
after_short_field_name();
|
||||
after_table_name();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -785,10 +821,7 @@ void BaseExpression::put_table_with_index_and_field(const wchar_t * table_name,
|
||||
if( out_stream )
|
||||
{
|
||||
put_table_with_index(table_name, index);
|
||||
(*out_stream) << '.';
|
||||
|
||||
// IMPROVE ME
|
||||
// put_field_name seems to be too complicated, it is needed to check there whether field_name is long or short?
|
||||
table_field_separator();
|
||||
put_field_name(field_name, field_type, nullptr);
|
||||
}
|
||||
}
|
||||
@@ -798,7 +831,7 @@ void BaseExpression::put_table_with_index_and_field(const PT::WTextStream & tabl
|
||||
if( out_stream )
|
||||
{
|
||||
put_table_with_index(table_name, index);
|
||||
(*out_stream) << '.';
|
||||
table_field_separator();
|
||||
put_field_name(field_name, field_type, nullptr);
|
||||
}
|
||||
}
|
||||
@@ -809,7 +842,7 @@ void BaseExpression::put_table_and_field(const wchar_t * table_name, const wchar
|
||||
if( out_stream )
|
||||
{
|
||||
put_table(table_name);
|
||||
(*out_stream) << '.';
|
||||
table_field_separator();
|
||||
put_field_name(field_name, field_type, nullptr);
|
||||
}
|
||||
}
|
||||
@@ -819,7 +852,7 @@ void BaseExpression::put_table_and_field(const PT::WTextStream & table_name, con
|
||||
if( out_stream )
|
||||
{
|
||||
put_table(table_name);
|
||||
(*out_stream) << '.';
|
||||
table_field_separator();
|
||||
put_field_name(field_name, field_type, nullptr);
|
||||
}
|
||||
}
|
||||
@@ -907,5 +940,11 @@ void BaseExpression::table_and_field_to_stream(PT::TextStream & stream, const PT
|
||||
|
||||
|
||||
|
||||
bool BaseExpression::is_empty_field(const wchar_t * value)
|
||||
{
|
||||
return (!value || *value == '\0');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user