1
1
#include " decimal.h"
2
2
3
- #include " numeric.h"
4
-
5
3
namespace clickhouse {
6
4
7
- ColumnDecimal::ColumnDecimal (size_t precision, size_t scale) : Column(Type::CreateDecimal(precision, scale)) {
5
+ ColumnDecimal::ColumnDecimal (size_t precision, size_t scale)
6
+ : Column(Type::CreateDecimal(precision, scale))
7
+ {
8
8
if (precision <= 9 ) {
9
- data_ = ColumnRef ( new ColumnInt32 () );
9
+ data_ = std::make_shared< ColumnInt32>( );
10
10
} else if (precision <= 18 ) {
11
- data_ = ColumnRef ( new ColumnInt64 () );
11
+ data_ = std::make_shared< ColumnInt64>( );
12
12
} else {
13
- data_ = ColumnRef ( new ColumnInt128 () );
13
+ data_ = std::make_shared< ColumnInt128>( );
14
14
}
15
15
}
16
16
17
+ ColumnDecimal::ColumnDecimal (TypeRef type)
18
+ : Column(type)
19
+ {
20
+ }
21
+
17
22
void ColumnDecimal::Append (const Int128& value) {
18
23
if (data_->Type ()->GetCode () == Type::Int32) {
19
24
data_->As <ColumnInt32>()->Append (static_cast <ColumnInt32::DataType>(value));
@@ -24,7 +29,7 @@ void ColumnDecimal::Append(const Int128& value) {
24
29
}
25
30
}
26
31
27
- void ColumnDecimal::Append (const std::string & value) {
32
+ void ColumnDecimal::Append (const std::string& value) {
28
33
Int128 int_value = 0 ;
29
34
auto c = value.begin ();
30
35
bool sign = true ;
@@ -62,13 +67,32 @@ Int128 ColumnDecimal::At(size_t i) const {
62
67
}
63
68
}
64
69
70
+ void ColumnDecimal::Append (ColumnRef column) {
71
+ if (auto col = column->As <ColumnDecimal>()) {
72
+ data_->Append (col->data_ );
73
+ }
74
+ }
75
+
76
+ bool ColumnDecimal::Load (CodedInputStream* input, size_t rows) {
77
+ return data_->Load (input, rows);
78
+ }
79
+
80
+ void ColumnDecimal::Save (CodedOutputStream* output) {
81
+ data_->Save (output);
82
+ }
83
+
84
+ void ColumnDecimal::Clear () {
85
+ data_->Clear ();
86
+ }
87
+
88
+ size_t ColumnDecimal::Size () const {
89
+ return data_->Size ();
90
+ }
91
+
65
92
ColumnRef ColumnDecimal::Slice (size_t begin, size_t len) {
66
- std::shared_ptr<ColumnDecimal> slice (new ColumnDecimal (Type () ));
93
+ std::shared_ptr<ColumnDecimal> slice (new ColumnDecimal (type_ ));
67
94
slice->data_ = data_->Slice (begin, len);
68
95
return slice;
69
96
}
70
97
71
- ColumnDecimal::ColumnDecimal (TypeRef type) : Column(type) {
72
98
}
73
-
74
- } // namespace clickhouse
0 commit comments