12
12
namespace arcticdb {
13
13
14
14
template <AggregationOperator aggregation_operator, ResampleBoundary closed_boundary>
15
- Column SortedAggregator<aggregation_operator, closed_boundary>::aggregate(const std::vector<std::shared_ptr<Column>>& input_index_columns,
15
+ std::optional< Column> SortedAggregator<aggregation_operator, closed_boundary>::aggregate(const std::vector<std::shared_ptr<Column>>& input_index_columns,
16
16
const std::vector<std::optional<ColumnWithStrings>>& input_agg_columns,
17
17
const std::vector<timestamp>& bucket_boundaries,
18
18
const Column& output_index_column,
19
19
StringPool& string_pool) const {
20
20
using IndexTDT = ScalarTagType<DataTypeTag<DataType::NANOSECONDS_UTC64>>;
21
- auto common_input_type = generate_common_input_type (input_agg_columns);
22
- Column res (TypeDescriptor (generate_output_data_type (common_input_type), Dimension::Dim0), output_index_column.row_count (), AllocationType::PRESIZED, Sparsity::NOT_PERMITTED);
21
+ const std::optional<DataType> common_input_type = generate_common_input_type (input_agg_columns);
22
+ if (!common_input_type.has_value ()) {
23
+ return std::nullopt;
24
+ }
25
+ Column res (TypeDescriptor (generate_output_data_type (*common_input_type), Dimension::Dim0), output_index_column.row_count (), AllocationType::PRESIZED, Sparsity::NOT_PERMITTED);
23
26
details::visit_type (
24
27
res.type ().data_type (),
25
28
[this ,
@@ -128,11 +131,11 @@ Column SortedAggregator<aggregation_operator, closed_boundary>::aggregate(const
128
131
}
129
132
}
130
133
);
131
- return res;
134
+ return { std::move ( res)} ;
132
135
}
133
136
134
137
template <AggregationOperator aggregation_operator, ResampleBoundary closed_boundary>
135
- DataType SortedAggregator<aggregation_operator, closed_boundary>::generate_common_input_type(
138
+ std::optional< DataType> SortedAggregator<aggregation_operator, closed_boundary>::generate_common_input_type(
136
139
const std::vector<std::optional<ColumnWithStrings>>& input_agg_columns
137
140
) const {
138
141
std::optional<DataType> common_input_type;
@@ -141,17 +144,9 @@ DataType SortedAggregator<aggregation_operator, closed_boundary>::generate_commo
141
144
auto input_data_type = opt_input_agg_column->column_ ->type ().data_type ();
142
145
check_aggregator_supported_with_data_type (input_data_type);
143
146
add_data_type_impl (input_data_type, common_input_type);
144
- } else {
145
- // Column is missing from this row-slice due to dynamic schema, currently unsupported
146
- schema::raise <ErrorCode::E_UNSUPPORTED_COLUMN_TYPE>(" Resample: Cannot aggregate column '{}' as it is missing from some row slices" ,
147
- get_input_column_name ().value );
148
147
}
149
148
}
150
- // Column is missing from all row-slices due to dynamic schema, currently unsupported
151
- schema::check<ErrorCode::E_UNSUPPORTED_COLUMN_TYPE>(common_input_type.has_value (),
152
- " Resample: Cannot aggregate column '{}' as it is missing from some row slices" ,
153
- get_input_column_name ().value );
154
- return *common_input_type;
149
+ return common_input_type;
155
150
}
156
151
157
152
template <AggregationOperator aggregation_operator, ResampleBoundary closed_boundary>
0 commit comments