userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
base_column.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/storages/clickhouse/io/columns/base_column.hpp
4
/// @brief @copybrief storages::clickhouse::io::columns::ClickhouseColumn
5
6
#
include
<
userver
/
storages
/
clickhouse
/
io
/
columns
/
column_iterator
.
hpp
>
7
#
include
<
userver
/
storages
/
clickhouse
/
io
/
columns
/
column_wrapper
.
hpp
>
8
9
USERVER_NAMESPACE_BEGIN
10
11
namespace
storages::
clickhouse
::
io
::
columns
{
12
13
/// @brief Base class for every typed ClickHouse column.
14
/// To add new columns one should derive from this class,
15
/// define types aliases:
16
/// - `cpp_type` - to what C++ types are column values mapped,
17
/// - `container_type` (being `std::vector<cpp_type>`)
18
///
19
/// and implement 3 methods:
20
/// - `ctor(ColumnRef)` - column constructor,
21
/// - `static ColumnRef Serialize(const container_type&)` - constructs a column from C++ container,
22
/// - `cpp_type ColumnIterator<YourColumnType>::DataHolder::Get()`
23
///
24
/// see implementation of any of the existing columns for better understanding.
25
template
<
typename
ColumnType>
26
class
ClickhouseColumn
{
27
public
:
28
using
iterator = ColumnIterator<ColumnType>;
29
30
ClickhouseColumn(ColumnRef column)
31
: column_{std::move(column)}
32
{}
33
34
iterator begin()
const
{
return
iterator{column_}; }
35
36
iterator end()
const
{
return
iterator::End(column_); }
37
38
size_t Size()
const
{
return
GetColumnSize(column_); }
39
40
private
:
41
ColumnRef column_;
42
};
43
44
}
// namespace storages::clickhouse::io::columns
45
46
USERVER_NAMESPACE_END
userver
storages
clickhouse
io
columns
base_column.hpp
Generated on
for userver by
Doxygen
1.17.0