date.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #include "date.h"
  2. namespace NClickHouse {
  3. TIntrusivePtr<TColumnDate> TColumnDate::Create() {
  4. return new TColumnDate();
  5. }
  6. TIntrusivePtr<TColumnDate> TColumnDate::Create(const TVector<TInstant>& data) {
  7. return new TColumnDate(data);
  8. }
  9. TColumnDate::TColumnDate()
  10. : TColumn(TType::CreateDate())
  11. , Data_(TColumnUInt16::Create())
  12. {
  13. }
  14. TColumnDate::TColumnDate(const TVector<TInstant>& data)
  15. : TColumnDate()
  16. {
  17. for (const auto& value : data) {
  18. Append(value);
  19. }
  20. }
  21. void TColumnDate::Append(const TInstant& value) {
  22. Data_->Append(static_cast<ui16>(value.Days()));
  23. }
  24. std::time_t TColumnDate::At(size_t n) const {
  25. return Data_->At(n) * 86400;
  26. }
  27. void TColumnDate::SetAt(size_t n, const TInstant& value) {
  28. Data_->SetAt(n, static_cast<ui16>(value.Days()));
  29. }
  30. void TColumnDate::Append(TColumnRef column) {
  31. if (auto col = column->As<TColumnDate>()) {
  32. Data_->Append(col->Data_);
  33. }
  34. }
  35. bool TColumnDate::Load(TCodedInputStream* input, size_t rows) {
  36. return Data_->Load(input, rows);
  37. }
  38. void TColumnDate::Save(TCodedOutputStream* output) {
  39. Data_->Save(output);
  40. }
  41. size_t TColumnDate::Size() const {
  42. return Data_->Size();
  43. }
  44. TColumnRef TColumnDate::Slice(size_t begin, size_t len) {
  45. auto col = Data_->Slice(begin, len)->As<TColumnUInt16>();
  46. auto result = TColumnDate::Create();
  47. result->Data_->Append(col);
  48. return result;
  49. }
  50. TColumnDateTime::TColumnDateTime()
  51. : TColumn(TType::CreateDateTime())
  52. , Data_(TColumnUInt32::Create())
  53. {
  54. }
  55. TColumnDateTime::TColumnDateTime(const TVector<TInstant>& data)
  56. : TColumnDateTime()
  57. {
  58. for (const auto& value : data) {
  59. Append(value);
  60. }
  61. }
  62. TIntrusivePtr<TColumnDateTime> TColumnDateTime::Create() {
  63. return new TColumnDateTime();
  64. }
  65. TIntrusivePtr<TColumnDateTime> TColumnDateTime::Create(const TVector<TInstant>& data) {
  66. return new TColumnDateTime(data);
  67. }
  68. void TColumnDateTime::Append(const TInstant& value) {
  69. Data_->Append(static_cast<ui32>(value.Seconds()));
  70. }
  71. std::time_t TColumnDateTime::At(size_t n) const {
  72. return Data_->At(n);
  73. }
  74. void TColumnDateTime::SetAt(size_t n, const TInstant& value) {
  75. Data_->SetAt(n, static_cast<ui32>(value.Seconds()));
  76. }
  77. void TColumnDateTime::Append(TColumnRef column) {
  78. if (auto col = column->As<TColumnDateTime>()) {
  79. Data_->Append(col->Data_);
  80. }
  81. }
  82. bool TColumnDateTime::Load(TCodedInputStream* input, size_t rows) {
  83. return Data_->Load(input, rows);
  84. }
  85. void TColumnDateTime::Save(TCodedOutputStream* output) {
  86. Data_->Save(output);
  87. }
  88. size_t TColumnDateTime::Size() const {
  89. return Data_->Size();
  90. }
  91. TColumnRef TColumnDateTime::Slice(size_t begin, size_t len) {
  92. auto col = Data_->Slice(begin, len)->As<TColumnUInt32>();
  93. auto result = TColumnDateTime::Create();
  94. result->Data_->Append(col);
  95. return result;
  96. }
  97. }