-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #33 from artpaul/enums
#32 add support of enums
- Loading branch information
Showing
15 changed files
with
410 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#include "enum.h" | ||
#include "utils.h" | ||
|
||
namespace clickhouse { | ||
|
||
template <typename T> | ||
ColumnEnum<T>::ColumnEnum(TypeRef type) | ||
: Column(type) | ||
{ | ||
} | ||
|
||
template <typename T> | ||
ColumnEnum<T>::ColumnEnum(TypeRef type, const std::vector<T>& data) | ||
: Column(type) | ||
, data_(data) | ||
{ | ||
} | ||
|
||
template <typename T> | ||
void ColumnEnum<T>::Append(const T& value, bool checkValue) { | ||
if (checkValue) { | ||
// TODO type_->HasEnumValue(value), "Enum type doesn't have value " + std::to_string(value); | ||
} | ||
data_.push_back(value); | ||
} | ||
|
||
template <typename T> | ||
void ColumnEnum<T>::Append(const std::string& name) { | ||
data_.push_back(EnumType(type_).GetEnumValue(name)); | ||
} | ||
|
||
template <typename T> | ||
const T& ColumnEnum<T>::At(size_t n) const { | ||
return data_.at(n); | ||
} | ||
|
||
template <typename T> | ||
const std::string ColumnEnum<T>::NameAt(size_t n) const { | ||
return EnumType(type_).GetEnumName(data_.at(n)); | ||
} | ||
|
||
template <typename T> | ||
const T& ColumnEnum<T>::operator[] (size_t n) const { | ||
return data_[n]; | ||
} | ||
|
||
template <typename T> | ||
void ColumnEnum<T>::SetAt(size_t n, const T& value, bool checkValue) { | ||
if (checkValue) { | ||
// TODO: type_->HasEnumValue(value), "Enum type doesn't have value " + std::to_string(value); | ||
} | ||
data_.at(n) = value; | ||
} | ||
|
||
template <typename T> | ||
void ColumnEnum<T>::SetNameAt(size_t n, const std::string& name) { | ||
data_.at(n) = EnumType(type_).GetEnumValue(name); | ||
} | ||
|
||
template <typename T> | ||
void ColumnEnum<T>::Append(ColumnRef column) { | ||
if (auto col = column->As<ColumnEnum<T>>()) { | ||
data_.insert(data_.end(), col->data_.begin(), col->data_.end()); | ||
} | ||
} | ||
|
||
template <typename T> | ||
bool ColumnEnum<T>::Load(CodedInputStream* input, size_t rows) { | ||
data_.resize(rows); | ||
return input->ReadRaw(data_.data(), data_.size() * sizeof(T)); | ||
} | ||
|
||
template <typename T> | ||
void ColumnEnum<T>::Save(CodedOutputStream* output) { | ||
output->WriteRaw(data_.data(), data_.size() * sizeof(T)); | ||
} | ||
|
||
template <typename T> | ||
size_t ColumnEnum<T>::Size() const { | ||
return data_.size(); | ||
} | ||
|
||
template <typename T> | ||
ColumnRef ColumnEnum<T>::Slice(size_t begin, size_t len) { | ||
return std::make_shared<ColumnEnum<T>>(type_, SliceVector(data_, begin, len)); | ||
} | ||
|
||
template class ColumnEnum<int8_t>; | ||
template class ColumnEnum<int16_t>; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#pragma once | ||
|
||
#include "column.h" | ||
|
||
namespace clickhouse { | ||
|
||
|
||
template <typename T> | ||
class ColumnEnum : public Column { | ||
public: | ||
ColumnEnum(TypeRef type); | ||
ColumnEnum(TypeRef type, const std::vector<T>& data); | ||
|
||
/// Appends one element to the end of column. | ||
void Append(const T& value, bool checkValue = false); | ||
void Append(const std::string& name); | ||
|
||
/// Returns element at given row number. | ||
const T& At(size_t n) const; | ||
const std::string NameAt(size_t n) const; | ||
|
||
/// Returns element at given row number. | ||
const T& operator[] (size_t n) const; | ||
|
||
/// Set element at given row number. | ||
void SetAt(size_t n, const T& value, bool checkValue = false); | ||
void SetNameAt(size_t n, const std::string& name); | ||
|
||
public: | ||
/// Appends content of given column to the end of current one. | ||
void Append(ColumnRef column) override; | ||
|
||
/// Loads column data from input stream. | ||
bool Load(CodedInputStream* input, size_t rows) override; | ||
|
||
/// Saves column data to output stream. | ||
void Save(CodedOutputStream* output) override; | ||
|
||
/// Returns count of rows in the column. | ||
size_t Size() const override; | ||
|
||
/// Makes slice of the current column. | ||
ColumnRef Slice(size_t begin, size_t len) override; | ||
|
||
private: | ||
std::vector<T> data_; | ||
}; | ||
|
||
using ColumnEnum8 = ColumnEnum<int8_t>; | ||
using ColumnEnum16 = ColumnEnum<int16_t>; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.