33#include < sparrow/types/data_type.hpp>
44
55#include " sparrow_ipc/deserialize_fixedsizebinary_array.hpp"
6+ #include " sparrow_ipc/deserialize_interval_array.hpp"
67#include " sparrow_ipc/deserialize_primitive_array.hpp"
78#include " sparrow_ipc/deserialize_variable_size_binary_array.hpp"
89#include " sparrow_ipc/magic_values.hpp"
@@ -191,6 +192,50 @@ namespace sparrow_ipc
191192 )
192193 );
193194 break ;
195+ case org::apache::arrow::flatbuf::Type::Interval:
196+ {
197+ const auto interval_type = field->type_as_Interval ();
198+ org::apache::arrow::flatbuf::IntervalUnit interval_unit = interval_type->unit ();
199+ switch (interval_unit)
200+ {
201+ case org::apache::arrow::flatbuf::IntervalUnit::YEAR_MONTH:
202+ arrays.emplace_back (
203+ deserialize_non_owning_interval_array<sparrow::chrono::months>(
204+ record_batch,
205+ encapsulated_message.body (),
206+ name,
207+ metadata,
208+ buffer_index
209+ )
210+ );
211+ break ;
212+ case org::apache::arrow::flatbuf::IntervalUnit::DAY_TIME:
213+ arrays.emplace_back (
214+ deserialize_non_owning_interval_array<sparrow::days_time_interval>(
215+ record_batch,
216+ encapsulated_message.body (),
217+ name,
218+ metadata,
219+ buffer_index
220+ )
221+ );
222+ break ;
223+ case org::apache::arrow::flatbuf::IntervalUnit::MONTH_DAY_NANO:
224+ arrays.emplace_back (
225+ deserialize_non_owning_interval_array<sparrow::month_day_nanoseconds_interval>(
226+ record_batch,
227+ encapsulated_message.body (),
228+ name,
229+ metadata,
230+ buffer_index
231+ )
232+ );
233+ break ;
234+ default :
235+ throw std::runtime_error (" Unsupported interval unit." );
236+ }
237+ }
238+ break ;
194239 default :
195240 throw std::runtime_error (" Unsupported type." );
196241 }
@@ -208,7 +253,8 @@ namespace sparrow_ipc
208253 std::vector<std::optional<std::vector<sparrow::metadata_pair>>> fields_metadata;
209254 do
210255 {
211- // Check for end-of-stream marker here as data could contain only that (if no record batches present/written)
256+ // Check for end-of-stream marker here as data could contain only that (if no record batches
257+ // present/written)
212258 if (data.size () >= 8 && is_end_of_stream (data.subspan (0 , 8 )))
213259 {
214260 break ;
@@ -234,11 +280,12 @@ namespace sparrow_ipc
234280
235281 for (const auto field : *(schema->fields ()))
236282 {
237- if (field != nullptr && field->name () != nullptr )
283+ if (field != nullptr && field->name () != nullptr )
238284 {
239- field_names.emplace_back (field->name ()->str ());
285+ field_names.emplace_back (field->name ()->str ());
240286 }
241- else {
287+ else
288+ {
242289 field_names.emplace_back (" _unnamed_" );
243290 }
244291 fields_nullable.push_back (field->nullable ());
@@ -269,7 +316,8 @@ namespace sparrow_ipc
269316 encapsulated_message,
270317 fields_metadata
271318 );
272- auto names_copy = field_names; // TODO: Remove when issue with the to_vector of record_batch is fixed
319+ auto names_copy = field_names; // TODO: Remove when issue with the to_vector of
320+ // record_batch is fixed
273321 sparrow::record_batch sp_record_batch (std::move (names_copy), std::move (arrays));
274322 record_batches.emplace_back (std::move (sp_record_batch));
275323 }
0 commit comments