2017-04-01 09:19:00 +00:00
|
|
|
#include <IO/ReadHelpers.h>
|
|
|
|
#include <IO/WriteHelpers.h>
|
2017-03-12 10:13:45 +00:00
|
|
|
|
2017-04-01 09:19:00 +00:00
|
|
|
#include <Columns/ColumnsNumber.h>
|
|
|
|
#include <DataTypes/DataTypeDate.h>
|
2017-07-16 03:05:40 +00:00
|
|
|
#include <DataTypes/DataTypeFactory.h>
|
2017-03-12 10:13:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
void DataTypeDate::serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
writeDateText(DayNum_t(static_cast<const ColumnUInt16 &>(column).getData()[row_num]), ostr);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void deserializeText(IColumn & column, ReadBuffer & istr)
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
DayNum_t x;
|
|
|
|
readDateText(x, istr);
|
|
|
|
static_cast<ColumnUInt16 &>(column).getData().push_back(x);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataTypeDate::serializeTextEscaped(const IColumn & column, size_t row_num, WriteBuffer & ostr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
serializeText(column, row_num, ostr);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataTypeDate::deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
deserializeText(column, istr);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataTypeDate::serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
writeChar('\'', ostr);
|
|
|
|
serializeText(column, row_num, ostr);
|
|
|
|
writeChar('\'', ostr);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataTypeDate::deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
DayNum_t x;
|
|
|
|
assertChar('\'', istr);
|
|
|
|
readDateText(x, istr);
|
|
|
|
assertChar('\'', istr);
|
|
|
|
static_cast<ColumnUInt16 &>(column).getData().push_back(x); /// It's important to do this at the end - for exception safety.
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
2017-07-05 16:28:57 +00:00
|
|
|
void DataTypeDate::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const
|
2017-03-12 10:13:45 +00:00
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
writeChar('"', ostr);
|
|
|
|
serializeText(column, row_num, ostr);
|
|
|
|
writeChar('"', ostr);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataTypeDate::deserializeTextJSON(IColumn & column, ReadBuffer & istr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
DayNum_t x;
|
|
|
|
assertChar('"', istr);
|
|
|
|
readDateText(x, istr);
|
|
|
|
assertChar('"', istr);
|
|
|
|
static_cast<ColumnUInt16 &>(column).getData().push_back(x);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DataTypeDate::serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
writeChar('"', ostr);
|
|
|
|
serializeText(column, row_num, ostr);
|
|
|
|
writeChar('"', ostr);
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
2017-12-01 20:21:35 +00:00
|
|
|
void DataTypeDate::deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char /*delimiter*/) const
|
2017-03-12 10:13:45 +00:00
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
LocalDate value;
|
|
|
|
readCSV(value, istr);
|
|
|
|
static_cast<ColumnUInt16 &>(column).getData().push_back(value.getDayNum());
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|
|
|
|
|
2017-07-16 03:05:40 +00:00
|
|
|
|
|
|
|
void registerDataTypeDate(DataTypeFactory & factory)
|
|
|
|
{
|
2017-07-16 05:09:47 +00:00
|
|
|
factory.registerSimpleDataType("Date", [] { return DataTypePtr(std::make_shared<DataTypeDate>()); }, DataTypeFactory::CaseInsensitive);
|
2017-07-16 03:05:40 +00:00
|
|
|
}
|
|
|
|
|
2017-03-12 10:13:45 +00:00
|
|
|
}
|