added support for hex strings and binary strings

added FT::hexadecimal, FT::binary and FT::dont_use_utf8
This commit is contained in:
2021-05-11 22:11:31 +02:00
parent 2afe111c57
commit 009955a0fd
19 changed files with 744 additions and 515 deletions

View File

@@ -129,13 +129,13 @@ public:
if( field_type.is_primary_key() )
{
if( model_env && model_env->has_primary_key_set )
put_field_value(field_value);
put_field_value(field_value, field_type);
else
put_null_value();
}
else
{
put_field_value(field_value);
put_field_value(field_value, field_type);
}
}
@@ -288,35 +288,35 @@ public:
* esc for: signed char, wchar_t, char16_t, char32_t
*
*/
virtual void esc(char val, PT::TextStream & stream);
virtual void esc(unsigned char val, PT::TextStream & stream);
virtual void esc(char val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(unsigned char val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(wchar_t val, PT::TextStream & stream);
virtual void esc(wchar_t val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const std::wstring & val, PT::TextStream & stream);
virtual void esc(const wchar_t * val, PT::TextStream & stream);
virtual void esc(const std::wstring & val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const wchar_t * val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const std::string & val, PT::TextStream & stream);
virtual void esc(const char * val, PT::TextStream & stream);
virtual void esc(const std::string & val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const char * val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(bool val, PT::TextStream & stream);
virtual void esc(short val, PT::TextStream & stream);
virtual void esc(unsigned short val, PT::TextStream & stream);
virtual void esc(int val, PT::TextStream & stream);
virtual void esc(unsigned int val, PT::TextStream & stream);
virtual void esc(long val, PT::TextStream & stream);
virtual void esc(unsigned long val, PT::TextStream & stream);
virtual void esc(long long val, PT::TextStream & stream);
virtual void esc(unsigned long long val, PT::TextStream & stream);
virtual void esc(float val, PT::TextStream & stream);
virtual void esc(double val, PT::TextStream & stream);
virtual void esc(long double val, PT::TextStream & stream);
virtual void esc(bool val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(short val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(unsigned short val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(int val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(unsigned int val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(long val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(unsigned long val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(long long val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(unsigned long long val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(float val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(double val, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(long double val, PT::TextStream & stream, FT field_type = FT::default_type);
//virtual void esc(void* val, PT::TextStream & stream);
virtual void esc(const PT::Date & date, PT::TextStream & stream);
virtual void esc(const PT::TextStream & val,PT::TextStream & stream);
virtual void esc(const PT::WTextStream & val,PT::TextStream & stream);
virtual void esc(const PT::Space & space, PT::TextStream & stream);
virtual void esc(const PT::Date & date, PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const PT::TextStream & val,PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const PT::WTextStream & val,PT::TextStream & stream, FT field_type = FT::default_type);
virtual void esc(const PT::Space & space, PT::TextStream & stream, FT field_type = FT::default_type);
virtual bool is_long_field_name(const wchar_t * field_name);
virtual bool is_long_field_name(const PT::TextStream & table_name);
@@ -344,13 +344,13 @@ protected:
virtual void dump_additional_info(Model & model);
template<typename FieldValue>
void put_field_value(const FieldValue & field_value)
void put_field_value(const FieldValue & field_value, FT field_type)
{
if( out_stream )
{
before_field_value(field_value);
esc(field_value, *out_stream);
after_field_value(field_value);
before_field_value(field_value, field_type);
esc(field_value, *out_stream, field_type);
after_field_value(field_value, field_type);
}
}
@@ -402,7 +402,7 @@ protected:
field_value_list_separator();
}
put_field_value(m);
put_field_value(m, FT::default_type);
is_first = false;
}
@@ -641,7 +641,7 @@ protected:
field_value_list_separator();
}
put_field_value(v);
put_field_value(v, FT::default_type);
is_first = false;
}
@@ -672,31 +672,37 @@ protected:
virtual void put_long_field_name(const wchar_t * field_name);
virtual void put_short_field_name(const wchar_t * field_name, ModelEnv * model_env);
virtual void before_field_value(const std::wstring &);
virtual void after_field_value(const std::wstring &);
virtual void before_field_value(const std::wstring &, FT field_type);
virtual void after_field_value(const std::wstring &, FT field_type);
virtual void before_field_value(const std::string &);
virtual void after_field_value(const std::string &);
virtual void before_field_value(const std::string &, FT field_type);
virtual void after_field_value(const std::string &, FT field_type);
virtual void before_field_value(const wchar_t *);
virtual void after_field_value(const wchar_t *);
virtual void before_field_value(const wchar_t *, FT field_type);
virtual void after_field_value(const wchar_t *, FT field_type);
virtual void before_field_value(const char *);
virtual void after_field_value(const char *);
virtual void before_field_value(const char *, FT field_type);
virtual void after_field_value(const char *, FT field_type);
virtual void before_field_value(const PT::Date &);
virtual void after_field_value(const PT::Date &);
virtual void before_field_value(wchar_t, FT field_type);
virtual void after_field_value(wchar_t, FT field_type);
virtual void before_field_value(const PT::Space &);
virtual void after_field_value(const PT::Space &);
virtual void before_field_value(char, FT field_type);
virtual void after_field_value(char, FT field_type);
virtual void before_field_value(const PT::Date &, FT field_type);
virtual void after_field_value(const PT::Date &, FT field_type);
virtual void before_field_value(const PT::Space &, FT field_type);
virtual void after_field_value(const PT::Space &, FT field_type);
template<typename FieldValue>
void before_field_value(const FieldValue &)
void before_field_value(const FieldValue &, FT field_type)
{
}
template<typename FieldValue>
void after_field_value(const FieldValue &)
void after_field_value(const FieldValue &, FT field_type)
{
}
@@ -747,12 +753,14 @@ protected:
// }
private:
virtual void before_field_value_string();
virtual void after_field_value_string();
virtual void before_field_value_string(FT field_type);
virtual void after_field_value_string(FT field_type);
char char_to_hex_part(char c);
void char_to_hex(char c, PT::TextStream & stream);
void esc(const wchar_t * val, bool has_known_length, size_t len, PT::TextStream & stream, FT field_type = FT::default_type);
};