MCPcopy Create free account
hub / github.com/apache/arrow / Consume

Method Consume

cpp/src/arrow/compute/kernels/aggregate_pivot.cc:52–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

50 }
51
52 Status Consume(KernelContext*, const ExecSpan& batch) override {
53 DCHECK_EQ(batch.num_values(), 2);
54 if (batch[0].is_array()) {
55 ARROW_ASSIGN_OR_RAISE(auto keys_array, key_mapper_->MapKeys(batch[0].array));
56 DCHECK_EQ(keys_array->type->id(), Type::UINT32);
57 ArraySpan keys_span(*keys_array);
58 if (batch[1].is_array()) {
59 // Array keys, array values
60 auto values = batch[1].array.ToArray();
61 int64_t i = 0;
62 RETURN_NOT_OK(VisitArraySpanInline<UInt32Type>(
63 keys_span,
64 [&](uint32_t key) {
65 if (!values->IsNull(i)) {
66 if (ARROW_PREDICT_FALSE(values_[key]->is_valid)) {
67 return DuplicateValue();
68 }
69 ARROW_ASSIGN_OR_RAISE(values_[key], values->GetScalar(i));
70 }
71 ++i;
72 return Status::OK();
73 },
74 [&]() {
75 ++i;
76 return Status::OK();
77 }));
78 } else {
79 // Array keys, scalar value
80 const Scalar* value = batch[1].scalar;
81 if (value->is_valid) {
82 RETURN_NOT_OK(VisitArraySpanInline<UInt32Type>(
83 keys_span,
84 [&](uint32_t key) {
85 if (ARROW_PREDICT_FALSE(values_[key]->is_valid)) {
86 return DuplicateValue();
87 }
88 values_[key] = value->GetSharedPtr();
89 return Status::OK();
90 },
91 [] { return Status::OK(); }));
92 }
93 }
94 } else {
95 ARROW_ASSIGN_OR_RAISE(auto maybe_key, key_mapper_->MapKey(*batch[0].scalar));
96 if (maybe_key.has_value()) {
97 PivotWiderKeyIndex key = maybe_key.value();
98 if (batch[1].is_array()) {
99 // Scalar key, array values
100 auto values = batch[1].array.ToArray();
101 for (int64_t i = 0; i < batch.length; ++i) {
102 if (!values->IsNull(i)) {
103 if (ARROW_PREDICT_FALSE(values_[key]->is_valid)) {
104 return DuplicateValue();
105 }
106 ARROW_ASSIGN_OR_RAISE(values_[key], values->GetScalar(i));
107 DCHECK(values_[key]->is_valid);
108 }
109 }

Callers 1

HashAggregateConsumeFunction · 0.45

Calls 9

is_arrayMethod · 0.80
ARROW_ASSIGN_OR_RAISEFunction · 0.50
OKFunction · 0.50
num_valuesMethod · 0.45
idMethod · 0.45
ToArrayMethod · 0.45
IsNullMethod · 0.45
GetScalarMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected