2017-04-01 09:19:00 +00:00
|
|
|
#include <DataStreams/verbosePrintString.h>
|
|
|
|
#include <IO/Operators.h>
|
2016-06-23 19:39:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
void verbosePrintString(BufferBase::Position begin, BufferBase::Position end, WriteBuffer & out)
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
if (end == begin)
|
|
|
|
{
|
|
|
|
out << "<EMPTY>";
|
|
|
|
return;
|
|
|
|
}
|
2016-06-23 19:39:20 +00:00
|
|
|
|
2017-04-01 07:20:54 +00:00
|
|
|
out << "\"";
|
2016-06-23 19:39:20 +00:00
|
|
|
|
2017-04-01 07:20:54 +00:00
|
|
|
for (auto pos = begin; pos < end; ++pos)
|
|
|
|
{
|
|
|
|
switch (*pos)
|
|
|
|
{
|
|
|
|
case '\0':
|
|
|
|
out << "<ASCII NUL>";
|
|
|
|
break;
|
|
|
|
case '\b':
|
|
|
|
out << "<BACKSPACE>";
|
|
|
|
break;
|
|
|
|
case '\f':
|
|
|
|
out << "<FORM FEED>";
|
|
|
|
break;
|
|
|
|
case '\n':
|
|
|
|
out << "<LINE FEED>";
|
|
|
|
break;
|
|
|
|
case '\r':
|
|
|
|
out << "<CARRIAGE RETURN>";
|
|
|
|
break;
|
|
|
|
case '\t':
|
|
|
|
out << "<TAB>";
|
|
|
|
break;
|
|
|
|
case '\\':
|
|
|
|
out << "<BACKSLASH>";
|
|
|
|
break;
|
|
|
|
case '"':
|
|
|
|
out << "<DOUBLE QUOTE>";
|
|
|
|
break;
|
|
|
|
case '\'':
|
|
|
|
out << "<SINGLE QUOTE>";
|
|
|
|
break;
|
2016-06-23 19:39:20 +00:00
|
|
|
|
2017-04-01 07:20:54 +00:00
|
|
|
default:
|
|
|
|
{
|
|
|
|
if (*pos >= 0 && *pos < 32)
|
|
|
|
{
|
|
|
|
static const char * hex = "0123456789ABCDEF";
|
|
|
|
out << "<0x" << hex[*pos / 16] << hex[*pos % 16] << ">";
|
|
|
|
}
|
|
|
|
else
|
|
|
|
out << *pos;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-06-23 19:39:20 +00:00
|
|
|
|
2017-04-01 07:20:54 +00:00
|
|
|
out << "\"";
|
2016-06-23 19:39:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|