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/encapsulated_message.hpp"
@@ -200,6 +201,50 @@ namespace sparrow_ipc
200201 )
201202 );
202203 break ;
204+ case org::apache::arrow::flatbuf::Type::Interval:
205+ {
206+ const auto interval_type = field->type_as_Interval ();
207+ org::apache::arrow::flatbuf::IntervalUnit interval_unit = interval_type->unit ();
208+ switch (interval_unit)
209+ {
210+ case org::apache::arrow::flatbuf::IntervalUnit::YEAR_MONTH:
211+ arrays.emplace_back (
212+ deserialize_non_owning_interval_array<sparrow::chrono::months>(
213+ record_batch,
214+ encapsulated_message.body (),
215+ name,
216+ metadata,
217+ buffer_index
218+ )
219+ );
220+ break ;
221+ case org::apache::arrow::flatbuf::IntervalUnit::DAY_TIME:
222+ arrays.emplace_back (
223+ deserialize_non_owning_interval_array<sparrow::days_time_interval>(
224+ record_batch,
225+ encapsulated_message.body (),
226+ name,
227+ metadata,
228+ buffer_index
229+ )
230+ );
231+ break ;
232+ case org::apache::arrow::flatbuf::IntervalUnit::MONTH_DAY_NANO:
233+ arrays.emplace_back (
234+ deserialize_non_owning_interval_array<sparrow::month_day_nanoseconds_interval>(
235+ record_batch,
236+ encapsulated_message.body (),
237+ name,
238+ metadata,
239+ buffer_index
240+ )
241+ );
242+ break ;
243+ default :
244+ throw std::runtime_error (" Unsupported interval unit." );
245+ }
246+ }
247+ break ;
203248 default :
204249 throw std::runtime_error (" Unsupported type." );
205250 }
@@ -217,7 +262,8 @@ namespace sparrow_ipc
217262 std::vector<std::optional<std::vector<sparrow::metadata_pair>>> fields_metadata;
218263 do
219264 {
220- // Check for end-of-stream marker here as data could contain only that (if no record batches present/written)
265+ // Check for end-of-stream marker here as data could contain only that (if no record batches
266+ // present/written)
221267 if (data.size () >= 8 && is_end_of_stream (data.subspan (0 , 8 )))
222268 {
223269 break ;
@@ -243,11 +289,12 @@ namespace sparrow_ipc
243289
244290 for (const auto field : *(schema->fields ()))
245291 {
246- if (field != nullptr && field->name () != nullptr )
292+ if (field != nullptr && field->name () != nullptr )
247293 {
248- field_names.emplace_back (field->name ()->str ());
294+ field_names.emplace_back (field->name ()->str ());
249295 }
250- else {
296+ else
297+ {
251298 field_names.emplace_back (" _unnamed_" );
252299 }
253300 fields_nullable.push_back (field->nullable ());
@@ -278,7 +325,8 @@ namespace sparrow_ipc
278325 encapsulated_message,
279326 fields_metadata
280327 );
281- auto names_copy = field_names; // TODO: Remove when issue with the to_vector of record_batch is fixed
328+ auto names_copy = field_names; // TODO: Remove when issue with the to_vector of
329+ // record_batch is fixed
282330 sparrow::record_batch sp_record_batch (std::move (names_copy), std::move (arrays));
283331 record_batches.emplace_back (std::move (sp_record_batch));
284332 }
0 commit comments