mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-10-01 06:00:49 +00:00
89 lines
1.6 KiB
C++
89 lines
1.6 KiB
C++
#include <DB/Core/FieldVisitors.h>
|
|
|
|
|
|
namespace DB
|
|
{
|
|
|
|
|
|
String FieldVisitorDump::operator() (const String & x) const
|
|
{
|
|
String res;
|
|
WriteBufferFromString wb(res);
|
|
writeQuoted(x, wb);
|
|
return res;
|
|
}
|
|
|
|
String FieldVisitorDump::operator() (const Array & x) const
|
|
{
|
|
String res;
|
|
WriteBufferFromString wb(res);
|
|
FieldVisitorDump visitor;
|
|
|
|
wb.write("Array_[", 7);
|
|
for (Array::const_iterator it = x.begin(); it != x.end(); ++it)
|
|
{
|
|
if (it != x.begin())
|
|
wb.write(", ", 2);
|
|
writeString(apply_visitor(visitor, *it), wb);
|
|
}
|
|
writeChar(']', wb);
|
|
|
|
return res;
|
|
}
|
|
|
|
|
|
String FieldVisitorToString::formatFloat(const Float64 x)
|
|
{
|
|
char tmp[25];
|
|
double_conversion::StringBuilder builder{tmp, sizeof(tmp)};
|
|
|
|
const auto result = getDoubleToStringConverter().ToShortest(x, &builder);
|
|
|
|
if (!result)
|
|
throw Exception("Cannot print float or double number", ErrorCodes::CANNOT_PRINT_FLOAT_OR_DOUBLE_NUMBER);
|
|
|
|
return { tmp, tmp + builder.position() };
|
|
}
|
|
|
|
String FieldVisitorToString::operator() (const Array & x) const
|
|
{
|
|
String res;
|
|
WriteBufferFromString wb(res);
|
|
FieldVisitorToString visitor;
|
|
|
|
writeChar('[', wb);
|
|
for (Array::const_iterator it = x.begin(); it != x.end(); ++it)
|
|
{
|
|
if (it != x.begin())
|
|
wb.write(", ", 2);
|
|
writeString(apply_visitor(visitor, *it), wb);
|
|
}
|
|
writeChar(']', wb);
|
|
|
|
return res;
|
|
}
|
|
|
|
|
|
UInt64 stringToDateOrDateTime(const String & s)
|
|
{
|
|
ReadBufferFromString in(s);
|
|
|
|
if (s.size() == strlen("YYYY-MM-DD"))
|
|
{
|
|
DayNum_t date{};
|
|
readDateText(date, in);
|
|
return UInt64(date);
|
|
}
|
|
else
|
|
{
|
|
time_t date_time{};
|
|
readDateTimeText(date_time, in);
|
|
if (!in.eof())
|
|
throw Exception("String is too long for DateTime: " + s);
|
|
return UInt64(date_time);
|
|
}
|
|
}
|
|
|
|
|
|
}
|