1 | #pragma once |
---|---|
2 | #include <IO/WriteBufferFromFile.h> |
3 | #include <IO/ReadBufferFromFile.h> |
4 | |
5 | #include <unordered_map> |
6 | |
7 | namespace DB |
8 | { |
9 | |
10 | /// Minimal and maximal ttl for column or table |
11 | struct MergeTreeDataPartTTLInfo |
12 | { |
13 | time_t min = 0; |
14 | time_t max = 0; |
15 | |
16 | void update(time_t time) |
17 | { |
18 | if (time && (!min || time < min)) |
19 | min = time; |
20 | |
21 | max = std::max(time, max); |
22 | } |
23 | |
24 | void update(const MergeTreeDataPartTTLInfo & other_info) |
25 | { |
26 | if (other_info.min && (!min || other_info.min < min)) |
27 | min = other_info.min; |
28 | |
29 | max = std::max(other_info.max, max); |
30 | } |
31 | }; |
32 | |
33 | /// PartTTLInfo for all columns and table with minimal ttl for whole part |
34 | struct MergeTreeDataPartTTLInfos |
35 | { |
36 | std::unordered_map<String, MergeTreeDataPartTTLInfo> columns_ttl; |
37 | MergeTreeDataPartTTLInfo table_ttl; |
38 | |
39 | /// `part_min_ttl` and `part_max_ttl` are TTLs which are used for selecting parts |
40 | /// to merge in order to remove expired rows. |
41 | time_t part_min_ttl = 0; |
42 | time_t part_max_ttl = 0; |
43 | |
44 | std::unordered_map<String, MergeTreeDataPartTTLInfo> moves_ttl; |
45 | |
46 | void read(ReadBuffer & in); |
47 | void write(WriteBuffer & out) const; |
48 | void update(const MergeTreeDataPartTTLInfos & other_infos); |
49 | |
50 | void updatePartMinMaxTTL(time_t time_min, time_t time_max) |
51 | { |
52 | if (time_min && (!part_min_ttl || time_min < part_min_ttl)) |
53 | part_min_ttl = time_min; |
54 | |
55 | if (time_max && (!part_max_ttl || time_max > part_max_ttl)) |
56 | part_max_ttl = time_max; |
57 | } |
58 | |
59 | bool empty() |
60 | { |
61 | return !part_min_ttl && moves_ttl.empty(); |
62 | } |
63 | }; |
64 | |
65 | } |
66 |