blob: a8c5730cdb3d70d58e8fa295e51beb95903eb73f (
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
|
#pragma once
#include <Processors/Merges/Algorithms/IMergingAlgorithm.h>
#include <Processors/Merges/Algorithms/RowRef.h>
#include <Core/SortDescription.h>
namespace DB
{
class IMergingAlgorithmWithDelayedChunk : public IMergingAlgorithm
{
public:
IMergingAlgorithmWithDelayedChunk(Block header_, size_t num_inputs, SortDescription description_);
protected:
SortingQueue<SortCursor> queue;
SortDescription description;
/// Previous row. May refer to last_chunk_sort_columns or row from source_chunks.
detail::RowRef last_key;
ColumnRawPtrs last_chunk_sort_columns; /// Point to last_chunk if valid.
void initializeQueue(Inputs inputs);
void updateCursor(Input & input, size_t source_num);
bool skipLastRowFor(size_t input_number) const { return current_inputs[input_number].skip_last_row; }
private:
Block header;
/// Inputs currently being merged.
Inputs current_inputs;
SortCursorImpls cursors;
/// In merging algorithm, we need to compare current sort key with the last one.
/// So, sorting columns for last row needed to be stored.
/// In order to do it, we extend lifetime of last chunk and it's sort columns (from corresponding sort cursor).
Chunk last_chunk;
};
}
|