tuple.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "tuple.h"
  2. namespace NClickHouse {
  3. static TVector<TTypeRef> CollectTypes(const TVector<TColumnRef>& columns) {
  4. TVector<TTypeRef> types;
  5. for (const auto& col : columns) {
  6. types.push_back(col->Type());
  7. }
  8. return types;
  9. }
  10. TColumnTuple::TColumnTuple(const TVector<TColumnRef>& columns)
  11. : TColumn(TType::CreateTuple(CollectTypes(columns)))
  12. , Columns_(columns)
  13. {
  14. }
  15. TIntrusivePtr<TColumnTuple> TColumnTuple::Create(const TVector<TColumnRef>& columns) {
  16. return new TColumnTuple(columns);
  17. }
  18. size_t TColumnTuple::Size() const {
  19. return Columns_.empty() ? 0 : Columns_[0]->Size();
  20. }
  21. bool TColumnTuple::Load(TCodedInputStream* input, size_t rows) {
  22. for (auto ci = Columns_.begin(); ci != Columns_.end(); ++ci) {
  23. if (!(*ci)->Load(input, rows)) {
  24. return false;
  25. }
  26. }
  27. return true;
  28. }
  29. void TColumnTuple::Save(TCodedOutputStream* output) {
  30. for (auto ci = Columns_.begin(); ci != Columns_.end(); ++ci) {
  31. (*ci)->Save(output);
  32. }
  33. }
  34. }