summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/computation/mkql_external_node_invalidator.cpp
blob: 8f3b95c8d5855d6b003926cea6f5d14a55e9970b (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
#include "mkql_external_node_invalidator.h"

#include <yql/essentials/public/udf/udf_value.h>

#include <set>

namespace NKikimr::NMiniKQL {

TComputationExternalNodeInvalidator::TComputationExternalNodeInvalidator(std::span<const IComputationExternalNode* const> nodes) {
    std::set<ui32> merged;
    for (const IComputationExternalNode* const node : nodes) {
        node->CollectInvalidationIndexes(merged);
    }
    MergedIndexes_.assign(merged.begin(), merged.end());
}

TComputationExternalNodeInvalidator::TComputationExternalNodeInvalidator() = default;

void TComputationExternalNodeInvalidator::InvalidateMutables(TComputationContext& compCtx) const {
    for (ui32 index : MergedIndexes_) {
        compCtx.MutableValues[index] = NUdf::TUnboxedValuePod::Invalid();
    }
}

} // namespace NKikimr::NMiniKQL