#include "date.h" namespace NClickHouse { TIntrusivePtr TColumnDate::Create() { return new TColumnDate(); } TIntrusivePtr TColumnDate::Create(const TVector& data) { return new TColumnDate(data); } TColumnDate::TColumnDate() : TColumn(TType::CreateDate()) , Data_(TColumnUInt16::Create()) { } TColumnDate::TColumnDate(const TVector& data) : TColumnDate() { for (const auto& value : data) { Append(value); } } void TColumnDate::Append(const TInstant& value) { Data_->Append(static_cast(value.Days())); } std::time_t TColumnDate::At(size_t n) const { return Data_->At(n) * 86400; } void TColumnDate::SetAt(size_t n, const TInstant& value) { Data_->SetAt(n, static_cast(value.Days())); } void TColumnDate::Append(TColumnRef column) { if (auto col = column->As()) { Data_->Append(col->Data_); } } bool TColumnDate::Load(TCodedInputStream* input, size_t rows) { return Data_->Load(input, rows); } void TColumnDate::Save(TCodedOutputStream* output) { Data_->Save(output); } size_t TColumnDate::Size() const { return Data_->Size(); } TColumnRef TColumnDate::Slice(size_t begin, size_t len) { auto col = Data_->Slice(begin, len)->As(); auto result = TColumnDate::Create(); result->Data_->Append(col); return result; } TColumnDateTime::TColumnDateTime() : TColumn(TType::CreateDateTime()) , Data_(TColumnUInt32::Create()) { } TColumnDateTime::TColumnDateTime(const TVector& data) : TColumnDateTime() { for (const auto& value : data) { Append(value); } } TIntrusivePtr TColumnDateTime::Create() { return new TColumnDateTime(); } TIntrusivePtr TColumnDateTime::Create(const TVector& data) { return new TColumnDateTime(data); } void TColumnDateTime::Append(const TInstant& value) { Data_->Append(static_cast(value.Seconds())); } std::time_t TColumnDateTime::At(size_t n) const { return Data_->At(n); } void TColumnDateTime::SetAt(size_t n, const TInstant& value) { Data_->SetAt(n, static_cast(value.Seconds())); } void TColumnDateTime::Append(TColumnRef column) { if (auto col = column->As()) { Data_->Append(col->Data_); } } bool TColumnDateTime::Load(TCodedInputStream* input, size_t rows) { return Data_->Load(input, rows); } void TColumnDateTime::Save(TCodedOutputStream* output) { Data_->Save(output); } size_t TColumnDateTime::Size() const { return Data_->Size(); } TColumnRef TColumnDateTime::Slice(size_t begin, size_t len) { auto col = Data_->Slice(begin, len)->As(); auto result = TColumnDateTime::Create(); result->Data_->Append(col); return result; } }