ClickHouse
65 строк · 2.2 Кб
1#include <Processors/TTL/TTLDeleteAlgorithm.h>2
3namespace DB4{
5
6TTLDeleteAlgorithm::TTLDeleteAlgorithm(7const TTLExpressions & ttl_expressions_, const TTLDescription & description_, const TTLInfo & old_ttl_info_, time_t current_time_, bool force_)8: ITTLAlgorithm(ttl_expressions_, description_, old_ttl_info_, current_time_, force_)9{
10if (!isMinTTLExpired())11new_ttl_info = old_ttl_info;12
13if (isMaxTTLExpired())14new_ttl_info.ttl_finished = true;15}
16
17void TTLDeleteAlgorithm::execute(Block & block)18{
19if (!block || !isMinTTLExpired())20return;21
22auto ttl_column = executeExpressionAndGetColumn(ttl_expressions.expression, block, description.result_column);23auto where_column = executeExpressionAndGetColumn(ttl_expressions.where_expression, block, description.where_result_column);24
25MutableColumns result_columns;26const auto & column_names = block.getNames();27
28result_columns.reserve(column_names.size());29for (auto it = column_names.begin(); it != column_names.end(); ++it)30{31const IColumn * values_column = block.getByName(*it).column.get();32MutableColumnPtr result_column = values_column->cloneEmpty();33result_column->reserve(block.rows());34
35for (size_t i = 0; i < block.rows(); ++i)36{37UInt32 cur_ttl = getTimestampByIndex(ttl_column.get(), i);38bool where_filter_passed = !where_column || where_column->getBool(i);39
40if (!isTTLExpired(cur_ttl) || !where_filter_passed)41{42new_ttl_info.update(cur_ttl);43result_column->insertFrom(*values_column, i);44}45else if (it == column_names.begin())46++rows_removed;47}48
49result_columns.emplace_back(std::move(result_column));50}51
52block = block.cloneWithColumns(std::move(result_columns));53}
54
55void TTLDeleteAlgorithm::finalize(const MutableDataPartPtr & data_part) const56{
57if (ttl_expressions.where_expression)58data_part->ttl_infos.rows_where_ttl[description.result_column] = new_ttl_info;59else60data_part->ttl_infos.table_ttl = new_ttl_info;61
62data_part->ttl_infos.updatePartMinMaxTTL(new_ttl_info.min, new_ttl_info.max);63}
64
65}
66