aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/comp_nodes/mkql_match_recognize_measure_arg.h
blob: db143e9b306bdc052b27741b6ab7d479cd96f7c3 (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#pragma once

#include <yql/essentials/core/sql_types/match_recognize.h>
#include <yql/essentials/minikql/computation/mkql_computation_node_holders.h>
#include <yql/essentials/minikql/computation/mkql_computation_node_impl.h>
#include <yql/essentials/minikql/mkql_string_util.h>

namespace NKikimr::NMiniKQL::NMatchRecognize {

using TMeasureInputColumnOrder = TMKQLVector<std::pair<NYql::NMatchRecognize::EMeasureInputDataSpecialColumns, size_t>>;

class TRowForMeasureValue final : public TComputationValue<TRowForMeasureValue> {
public:
    TRowForMeasureValue(
        TMemoryUsageInfo* memInfo,
        NUdf::TUnboxedValue inputRow,
        ui64 rowIndex,
        const TMeasureInputColumnOrder& columnOrder,
        const NUdf::TUnboxedValue& matchedVars,
        const TUnboxedValueVector& varNames,
        ui64 matchNumber);

    NUdf::TUnboxedValue GetElement(ui32 index) const final;

private:
    const NUdf::TUnboxedValue InputRow;
    const ui64 RowIndex;
    const TMeasureInputColumnOrder& ColumnOrder;
    const NUdf::TUnboxedValue& MatchedVars;
    const TUnboxedValueVector& VarNames;
    ui64 MatchNumber;
};

class TMeasureInputDataValue final : public TComputationValue<TMeasureInputDataValue> {
public:
    TMeasureInputDataValue(
        TMemoryUsageInfo* memInfo,
        const NUdf::TUnboxedValue& inputData,
        const TMeasureInputColumnOrder& columnOrder,
        const NUdf::TUnboxedValue& matchedVars,
        const TUnboxedValueVector& varNames,
        ui64 matchNumber);

    bool HasFastListLength() const final;
    ui64 GetListLength() const final;
    ui64 GetEstimatedListLength() const final;
    NUdf::TUnboxedValue GetListIterator() const final;
    bool HasListItems() const final;

    NUdf::IBoxedValuePtr ToIndexDictImpl(const NUdf::IValueBuilder& builder) const final;

    ui64 GetDictLength() const final;
    NUdf::TUnboxedValue GetDictIterator() const final;
    NUdf::TUnboxedValue GetKeysIterator() const final;
    NUdf::TUnboxedValue GetPayloadsIterator() const final;
    bool Contains(const NUdf::TUnboxedValuePod& key) const final;
    NUdf::TUnboxedValue Lookup(const NUdf::TUnboxedValuePod& key) const final;
    bool HasDictItems() const final;

private:
    const NUdf::TUnboxedValue InputData;
    const TMeasureInputColumnOrder& ColumnOrder;
    const NUdf::TUnboxedValue MatchedVars;
    const TUnboxedValueVector& VarNames;
    const ui64 MatchNumber;
};

} // namespace NKikimr::NMiniKQL::NMatchRecognize