| 179 | } |
| 180 | |
| 181 | Status ExtractSegmenterValues(std::vector<Datum>* values_ptr, |
| 182 | const ExecBatch& input_batch, |
| 183 | const std::vector<int>& field_ids) { |
| 184 | DCHECK_GT(input_batch.length, 0); |
| 185 | std::vector<Datum>& values = *values_ptr; |
| 186 | DCHECK_EQ(values.size(), field_ids.size()); |
| 187 | int64_t row = input_batch.length - 1; |
| 188 | for (size_t i = 0; i < field_ids.size(); i++) { |
| 189 | const Datum& value = input_batch.values[field_ids[i]]; |
| 190 | if (value.is_scalar()) { |
| 191 | values[i] = value; |
| 192 | } else if (value.is_array()) { |
| 193 | ARROW_ASSIGN_OR_RAISE(auto scalar, value.make_array()->GetScalar(row)); |
| 194 | values[i] = scalar; |
| 195 | } else { |
| 196 | DCHECK(false); |
| 197 | } |
| 198 | } |
| 199 | return Status::OK(); |
| 200 | } |
| 201 | |
| 202 | void PlaceFields(ExecBatch& batch, size_t base, std::vector<Datum>& values) { |
| 203 | DCHECK_LE(base + values.size(), batch.values.size()); |
no test coverage detected