aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/clickhouse/client/columns/string.h
blob: 19c41fcda35e1238cb8aafc89fed1b7ad95a01d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#pragma once

#include "column.h"

#include <util/generic/string.h>

namespace NClickHouse {
    /**
 * Represents column of fixed-length strings.
 */
    class TColumnFixedString: public TColumn {
    public:
        static TIntrusivePtr<TColumnFixedString> Create(size_t n);
        static TIntrusivePtr<TColumnFixedString> Create(size_t n, const TVector<TString>& data);

        /// Appends one element to the column.
        void Append(const TString& str);

        /// Returns element at given row number.
        const TString& At(size_t n) const;

        /// Returns element at given row number.
        const TString& operator[](size_t n) const;

        /// Set element at given row number.
        void SetAt(size_t n, const TString& value);

    public:
        /// Appends content of given column to the end of current one.
        void Append(TColumnRef column) override;

        /// Loads column data from input stream.
        bool Load(TCodedInputStream* input, size_t rows) override;

        /// Saves column data to output stream.
        void Save(TCodedOutputStream* output) override;

        /// Returns count of rows in the column.
        size_t Size() const override;

        /// Makes slice of the current column.
        TColumnRef Slice(size_t begin, size_t len) override;

    private:
        TColumnFixedString(size_t n);
        TColumnFixedString(size_t n, const TVector<TString>& data);

        const size_t StringSize_;
        TVector<TString> Data_;
    };

    /**
 * Represents column of variable-length strings.
 */
    class TColumnString: public TColumn {
    public:
        static TIntrusivePtr<TColumnString> Create();
        static TIntrusivePtr<TColumnString> Create(const TVector<TString>& data);
        static TIntrusivePtr<TColumnString> Create(TVector<TString>&& data);

        /// Appends one element to the column.
        void Append(const TString& str);

        /// Returns element at given row number.
        const TString& At(size_t n) const;

        /// Returns element at given row number.
        const TString& operator[](size_t n) const;

        /// Set element at given row number.
        void SetAt(size_t n, const TString& value);

    public:
        /// Appends content of given column to the end of current one.
        void Append(TColumnRef column) override;

        /// Loads column data from input stream.
        bool Load(TCodedInputStream* input, size_t rows) override;

        /// Saves column data to output stream.
        void Save(TCodedOutputStream* output) override;

        /// Returns count of rows in the column.
        size_t Size() const override;

        /// Makes slice of the current column.
        TColumnRef Slice(size_t begin, size_t len) override;

    private:
        TColumnString();
        TColumnString(const TVector<TString>& data);
        TColumnString(TVector<TString>&& data);

        TVector<TString> Data_;
    };

    /**
* Represents column of variable-length strings but use TStringBuf instead TString.
*/
    class TColumnStringBuf: public NClickHouse::TColumn {
    public:
        static TIntrusivePtr<TColumnStringBuf> Create();
        static TIntrusivePtr<TColumnStringBuf> Create(const TVector<TStringBuf>& data);
        static TIntrusivePtr<TColumnStringBuf> Create(TVector<TStringBuf>&& data);

        /// Appends one element to the column.
        void Append(TStringBuf str);

        /// Returns element at given row number.
        const TStringBuf& At(size_t n) const;

        /// Returns element at given row number.
        const TStringBuf& operator[](size_t n) const;

        /// Set element at given row number.
        void SetAt(size_t n, TStringBuf value);

    public:
        /// Appends content of given column to the end of current one.
        void Append(NClickHouse::TColumnRef column) override;

        /// Loads column data from input stream.
        bool Load(NClickHouse::TCodedInputStream* input, size_t rows) override;

        /// Saves column data to output stream.
        void Save(NClickHouse::TCodedOutputStream* output) override;

        /// Returns count of rows in the column.
        size_t Size() const override;

        /// Makes slice of the current column.
        NClickHouse::TColumnRef Slice(size_t begin, size_t len) override;

    private:
        TColumnStringBuf();
        TColumnStringBuf(const TVector<TStringBuf>& data);
        TColumnStringBuf(TVector<TStringBuf>&& data);

        TVector<TStringBuf> Data_;
    };

}