2012-07-17 20:06:38 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <DB/Core/Block.h>
|
|
|
|
|
#include <DB/Core/SortDescription.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
2013-09-16 05:44:47 +00:00
|
|
|
|
/// Отсортировать один блок по описанию desc. Если limit != 0, то производится partial sort первых limit строк.
|
|
|
|
|
void sortBlock(Block & block, const SortDescription & description, size_t limit = 0);
|
2012-07-17 20:06:38 +00:00
|
|
|
|
|
2013-11-29 22:10:15 +00:00
|
|
|
|
|
|
|
|
|
/** Используется только в StorageMergeTree для сортировки данных при INSERT-е.
|
|
|
|
|
* Сортировка стабильная. Это важно для сохранения порядка записей в движке CollapsingMergeTree
|
|
|
|
|
* - так как на основе порядка записей определяется, удалять ли или оставлять группы строчек при коллапсировании.
|
|
|
|
|
* Не поддерживаются collations. Не поддерживается частичная сортировка.
|
2014-12-15 04:13:33 +00:00
|
|
|
|
*/
|
2013-11-29 22:10:15 +00:00
|
|
|
|
void stableSortBlock(Block & block, const SortDescription & description);
|
|
|
|
|
|
2015-08-14 02:45:40 +00:00
|
|
|
|
/** То же, что и stableSortBlock, но не сортировать блок, а только рассчитать перестановку значений,
|
|
|
|
|
* чтобы потом можно было переставить значения столбцов самостоятельно.
|
|
|
|
|
*/
|
|
|
|
|
void stableGetPermutation(const Block & block, const SortDescription & description, IColumn::Permutation & out_permutation);
|
|
|
|
|
|
2015-11-21 15:47:32 +00:00
|
|
|
|
|
|
|
|
|
/** Быстро проверить, является ли блок уже отсортированным. Если блок не отсортирован - возвращает false максимально быстро.
|
|
|
|
|
* Не поддерживаются collations.
|
|
|
|
|
*/
|
|
|
|
|
bool isAlreadySorted(const Block & block, const SortDescription & description);
|
|
|
|
|
|
2012-07-17 20:06:38 +00:00
|
|
|
|
}
|