diff options
author | galaxycrab <UgnineSirdis@ydb.tech> | 2023-11-23 11:26:33 +0300 |
---|---|---|
committer | galaxycrab <UgnineSirdis@ydb.tech> | 2023-11-23 12:01:57 +0300 |
commit | 44354d0fc55926c1d4510d1d2c9c9f6a1a5e9300 (patch) | |
tree | cb4d75cd1c6dbc3da0ed927337fd8d1b6ed9da84 /library/cpp/clickhouse/client/columns/string.cpp | |
parent | 0e69bf615395fdd48ecee032faaec81bc468b0b8 (diff) | |
download | ydb-44354d0fc55926c1d4510d1d2c9c9f6a1a5e9300.tar.gz |
YQ Connector:test INNER JOIN
Diffstat (limited to 'library/cpp/clickhouse/client/columns/string.cpp')
-rw-r--r-- | library/cpp/clickhouse/client/columns/string.cpp | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/library/cpp/clickhouse/client/columns/string.cpp b/library/cpp/clickhouse/client/columns/string.cpp new file mode 100644 index 0000000000..92053aadc8 --- /dev/null +++ b/library/cpp/clickhouse/client/columns/string.cpp @@ -0,0 +1,241 @@ +#include "string.h" +#include "utils.h" + +#include <library/cpp/clickhouse/client/base/wire_format.h> + +#include <util/memory/tempbuf.h> + +namespace NClickHouse { + TColumnFixedString::TColumnFixedString(size_t n) + : TColumn(TType::CreateString(n)) + , StringSize_(n) + { + } + + TColumnFixedString::TColumnFixedString(size_t n, const TVector<TString>& data) + : TColumnFixedString(n) + { + Data_.reserve(data.size()); + for (const auto& value : data) { + Append(value); + } + } + + TIntrusivePtr<TColumnFixedString> TColumnFixedString::Create(size_t n) { + return new TColumnFixedString(n); + } + + TIntrusivePtr<TColumnFixedString> TColumnFixedString::Create(size_t n, const TVector<TString>& data) { + return new TColumnFixedString(n, data); + } + + void TColumnFixedString::Append(const TString& str) { + Data_.push_back(str); + Data_.back().resize(StringSize_); + } + + const TString& TColumnFixedString::At(size_t n) const { + return Data_.at(n); + } + + const TString& TColumnFixedString::operator[](size_t n) const { + return Data_[n]; + } + + void TColumnFixedString::SetAt(size_t n, const TString& value) { + TString stringResized(value); + stringResized.resize(StringSize_); + Data_.at(n) = stringResized; + } + + void TColumnFixedString::Append(TColumnRef column) { + if (auto col = column->As<TColumnFixedString>()) { + if (StringSize_ == col->StringSize_) { + Data_.insert(Data_.end(), col->Data_.begin(), col->Data_.end()); + } + } + } + + bool TColumnFixedString::Load(TCodedInputStream* input, size_t rows) { + for (size_t i = 0; i < rows; ++i) { + TTempBuf s(StringSize_); + + if (!TWireFormat::ReadBytes(input, s.Data(), StringSize_)) { + return false; + } + + Data_.push_back(TString(s.Data(), StringSize_)); + } + + return true; + } + + void TColumnFixedString::Save(TCodedOutputStream* output) { + for (size_t i = 0; i < Data_.size(); ++i) { + TWireFormat::WriteBytes(output, Data_[i].data(), StringSize_); + } + } + + size_t TColumnFixedString::Size() const { + return Data_.size(); + } + + TColumnRef TColumnFixedString::Slice(size_t begin, size_t len) { + auto result = new TColumnFixedString(StringSize_); + + if (begin < Data_.size()) { + result->Data_ = SliceVector(Data_, begin, len); + } + + return result; + } + + TColumnString::TColumnString() + : TColumn(TType::CreateString()) + { + } + + TColumnString::TColumnString(const TVector<TString>& data) + : TColumn(TType::CreateString()) + , Data_(data) + { + } + + TColumnString::TColumnString(TVector<TString>&& data) + : TColumn(TType::CreateString()) + , Data_(std::move(data)) + { + } + + TIntrusivePtr<TColumnString> TColumnString::Create() { + return new TColumnString(); + } + + TIntrusivePtr<TColumnString> TColumnString::Create(const TVector<TString>& data) { + return new TColumnString(data); + } + + TIntrusivePtr<TColumnString> TColumnString::Create(TVector<TString>&& data) { + return new TColumnString(std::move(data)); + } + + void TColumnString::Append(const TString& str) { + Data_.push_back(str); + } + + const TString& TColumnString::At(size_t n) const { + return Data_.at(n); + } + + const TString& TColumnString::operator[](size_t n) const { + return Data_[n]; + } + + void TColumnString::SetAt(size_t n, const TString& value) { + Data_.at(n) = value; + } + + void TColumnString::Append(TColumnRef column) { + if (auto col = column->As<TColumnString>()) { + Data_.insert(Data_.end(), col->Data_.begin(), col->Data_.end()); + } + } + + bool TColumnString::Load(TCodedInputStream* input, size_t rows) { + for (size_t i = 0; i < rows; ++i) { + TString s; + + if (!TWireFormat::ReadString(input, &s)) { + return false; + } + + Data_.push_back(s); + } + + return true; + } + + void TColumnString::Save(TCodedOutputStream* output) { + for (auto si = Data_.begin(); si != Data_.end(); ++si) { + TWireFormat::WriteString(output, *si); + } + } + + size_t TColumnString::Size() const { + return Data_.size(); + } + + TColumnRef TColumnString::Slice(size_t begin, size_t len) { + return new TColumnString(SliceVector(Data_, begin, len)); + } + + TColumnStringBuf::TColumnStringBuf() + : TColumn(TType::CreateString()) + { + } + + TColumnStringBuf::TColumnStringBuf(const TVector<TStringBuf>& data) + : TColumn(TType::CreateString()) + , Data_(data) + { + } + + TColumnStringBuf::TColumnStringBuf(TVector<TStringBuf>&& data) + : TColumn(TType::CreateString()) + , Data_(std::move(data)) + { + } + + TIntrusivePtr<TColumnStringBuf> TColumnStringBuf::Create() { + return new TColumnStringBuf(); + } + + TIntrusivePtr<TColumnStringBuf> TColumnStringBuf::Create(const TVector<TStringBuf>& data) { + return new TColumnStringBuf(data); + } + + TIntrusivePtr<TColumnStringBuf> TColumnStringBuf::Create(TVector<TStringBuf>&& data) { + return new TColumnStringBuf(std::move(data)); + } + + void TColumnStringBuf::Append(TStringBuf str) { + Data_.push_back(str); + } + + const TStringBuf& TColumnStringBuf::At(size_t n) const { + return Data_.at(n); + } + + const TStringBuf& TColumnStringBuf::operator[](size_t n) const { + return Data_[n]; + } + + void TColumnStringBuf::SetAt(size_t n, TStringBuf value) { + Data_.at(n) = value; + } + + void TColumnStringBuf::Append(TColumnRef column) { + if (auto col = column->As<TColumnStringBuf>()) { + Data_.insert(Data_.end(), col->Data_.begin(), col->Data_.end()); + } + } + + bool TColumnStringBuf::Load(TCodedInputStream*, size_t) { + ythrow yexception() << "load not implemented"; + } + + void TColumnStringBuf::Save(TCodedOutputStream* output) { + for (auto si = Data_.begin(); si != Data_.end(); ++si) { + TWireFormat::WriteStringBuf(output, *si); + } + } + + size_t TColumnStringBuf::Size() const { + return Data_.size(); + } + + TColumnRef TColumnStringBuf::Slice(size_t begin, size_t len) { + return new TColumnStringBuf(SliceVector(Data_, begin, len)); + } + +} |