ClickHouse/src/Interpreters/FillingRow.h

45 lines
1.5 KiB
C++
Raw Normal View History

#pragma once
#include <Core/SortDescription.h>
#include <Columns/IColumn.h>
2020-06-14 18:42:10 +00:00
namespace DB
{
/// Compares fields in terms of sorting order, considering direction.
bool less(const Field & lhs, const Field & rhs, int direction);
bool equals(const Field & lhs, const Field & rhs);
2019-09-02 17:18:44 +00:00
/** Helps to implement modifier WITH FILL for ORDER BY clause.
2019-09-02 15:22:27 +00:00
* Stores row as array of fields and provides functions to generate next row for filling gaps and for comparing rows.
* Used in FillingBlockInputStream and in FillingTransform.
*/
class FillingRow
{
public:
FillingRow(const SortDescription & sort_description);
/// Generates next row according to fill 'from', 'to' and 'step' values.
bool next(const FillingRow & to_row);
void initFromDefaults(size_t from_pos = 0);
2021-09-11 23:55:53 +00:00
Field & operator[](size_t index) { return row[index]; }
const Field & operator[](size_t index) const { return row[index]; }
size_t size() const { return row.size(); }
bool operator<(const FillingRow & other) const;
bool operator==(const FillingRow & other) const;
2021-09-11 23:55:53 +00:00
int getDirection(size_t index) const { return description[index].direction; }
FillColumnDescription & getFillDescription(size_t index) { return description[index].fill_description; }
private:
2021-05-21 01:17:18 +00:00
Row row;
SortDescription description;
};
void insertFromFillingRow(MutableColumns & filling_columns, MutableColumns & other_columns, const FillingRow & filling_row);
void copyRowFromColumns(MutableColumns & dest, const Columns & source, size_t row_num);
2019-09-02 17:18:44 +00:00
}