@@ -113,4 +113,69 @@ ItemView ColumnDateTime::GetItem(size_t index) const {
113113 return data_->GetItem (index);
114114}
115115
116+
117+ ColumnDateTime64::ColumnDateTime64 ()
118+ : Column(Type::CreateDateTime64(3ul ))
119+ , data_(std::make_shared<ColumnDecimal>(18ul , 3ul ))
120+ {}
121+
122+ ColumnDateTime64::ColumnDateTime64 (size_t precision)
123+ : Column(Type::CreateDateTime64(precision))
124+ , data_(std::make_shared<ColumnDecimal>(18ul , precision))
125+ {}
126+
127+
128+ void ColumnDateTime64::Append (const Int128& value) {
129+ data_->Append (value);
130+ }
131+
132+ void ColumnDateTime64::Append (const std::string& value) {
133+ data_->Append (value);
134+ }
135+
136+
137+ Int128 ColumnDateTime64::At (size_t n) const {
138+ return data_->At (n);
139+ }
140+
141+ void ColumnDateTime64::Append (ColumnRef column) {
142+ if (auto col = column->As <ColumnDateTime64>()) {
143+ data_->Append (col->data_ );
144+ }
145+ }
146+
147+ bool ColumnDateTime64::Load (CodedInputStream* input, size_t rows) {
148+ return data_->Load (input, rows);
149+ }
150+
151+ void ColumnDateTime64::Save (CodedOutputStream* output) {
152+ data_->Save (output);
153+ }
154+
155+ void ColumnDateTime64::Clear () {
156+ data_->Clear ();
157+ }
158+ size_t ColumnDateTime64::Size () const {
159+ return data_->Size ();
160+ }
161+
162+ ItemView ColumnDateTime64::GetItem (size_t index) const {
163+ return data_->GetItem (index);
164+ }
165+
166+ void ColumnDateTime64::Swap (Column& other) {
167+ auto & col = dynamic_cast <ColumnDateTime64&>(other);
168+ data_.swap (col.data_ );
169+ }
170+
171+ ColumnRef ColumnDateTime64::Slice (size_t begin, size_t len) {
172+ auto col = data_->Slice (begin, len)->As <ColumnDecimal>();
173+ size_t precision = col->Type ()->As <DateTime64Type>()->GetPrecision ();
174+ auto result = std::make_shared<ColumnDateTime64>(precision); // TODO FIXME
175+
176+ result->data_ ->Append (col);
177+
178+ return result;
179+ }
180+
116181}
0 commit comments