@@ -39,6 +39,8 @@ namespace sparrow_ipc
3939 m_deserializer_map[org::apache::arrow::flatbuf::Type::Time] = &deserialize_time;
4040 m_deserializer_map[org::apache::arrow::flatbuf::Type::Null] = &deserialize_null;
4141 m_deserializer_map[org::apache::arrow::flatbuf::Type::Decimal] = &deserialize_decimal;
42+ m_deserializer_map[org::apache::arrow::flatbuf::Type::BinaryView] = &deserialize_variable_size_binary_view<sparrow::binary_view_array>;
43+ m_deserializer_map[org::apache::arrow::flatbuf::Type::Utf8View] = &deserialize_variable_size_binary_view<sparrow::string_view_array>;
4244 }
4345
4446 sparrow::array array_deserializer::deserialize (const org::apache::arrow::flatbuf::RecordBatch& record_batch,
@@ -47,6 +49,7 @@ namespace sparrow_ipc
4749 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
4850 bool nullable,
4951 size_t & buffer_index,
52+ size_t & variadic_counts_idx,
5053 const org::apache::arrow::flatbuf::Field& field) const
5154 {
5255 auto it = m_deserializer_map.find (field.type_type ());
@@ -57,7 +60,7 @@ namespace sparrow_ipc
5760 + " for field '" + name + " '"
5861 );
5962 }
60- return it->second (record_batch, body, name, metadata, nullable, buffer_index, field);
63+ return it->second (record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
6164 }
6265
6366 sparrow::array array_deserializer::deserialize_int (const org::apache::arrow::flatbuf::RecordBatch& record_batch,
@@ -66,6 +69,7 @@ namespace sparrow_ipc
6669 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
6770 bool nullable,
6871 size_t & buffer_index,
72+ size_t & variadic_counts_idx,
6973 const org::apache::arrow::flatbuf::Field& field)
7074 {
7175 const auto * int_type = field.type_as_Int ();
@@ -76,21 +80,21 @@ namespace sparrow_ipc
7680 {
7781 switch (bit_width)
7882 {
79- case BIT_WIDTH_8: return deserialize_primitive<int8_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
80- case BIT_WIDTH_16: return deserialize_primitive<int16_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
81- case BIT_WIDTH_32: return deserialize_primitive<int32_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
82- case BIT_WIDTH_64: return deserialize_primitive<int64_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
83+ case BIT_WIDTH_8: return deserialize_primitive<int8_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
84+ case BIT_WIDTH_16: return deserialize_primitive<int16_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
85+ case BIT_WIDTH_32: return deserialize_primitive<int32_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
86+ case BIT_WIDTH_64: return deserialize_primitive<int64_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
8387 default : throw std::runtime_error (" Unsupported integer bit width: " + std::to_string (bit_width));
8488 }
8589 }
8690 else
8791 {
8892 switch (bit_width)
8993 {
90- case BIT_WIDTH_8: return deserialize_primitive<uint8_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
91- case BIT_WIDTH_16: return deserialize_primitive<uint16_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
92- case BIT_WIDTH_32: return deserialize_primitive<uint32_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
93- case BIT_WIDTH_64: return deserialize_primitive<uint64_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
94+ case BIT_WIDTH_8: return deserialize_primitive<uint8_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
95+ case BIT_WIDTH_16: return deserialize_primitive<uint16_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
96+ case BIT_WIDTH_32: return deserialize_primitive<uint32_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
97+ case BIT_WIDTH_64: return deserialize_primitive<uint64_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
9498 default : throw std::runtime_error (" Unsupported integer bit width: " + std::to_string (bit_width));
9599 }
96100 }
@@ -102,15 +106,16 @@ namespace sparrow_ipc
102106 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
103107 bool nullable,
104108 size_t & buffer_index,
109+ size_t & variadic_counts_idx,
105110 const org::apache::arrow::flatbuf::Field& field)
106111 {
107112 const auto * float_type = field.type_as_FloatingPoint ();
108113 const auto precision = float_type->precision ();
109114 switch (precision)
110115 {
111- case org::apache::arrow::flatbuf::Precision::HALF: return deserialize_primitive<sparrow::float16_t >(record_batch, body, name, metadata, nullable, buffer_index, field);
112- case org::apache::arrow::flatbuf::Precision::SINGLE: return deserialize_primitive<float >(record_batch, body, name, metadata, nullable, buffer_index, field);
113- case org::apache::arrow::flatbuf::Precision::DOUBLE: return deserialize_primitive<double >(record_batch, body, name, metadata, nullable, buffer_index, field);
116+ case org::apache::arrow::flatbuf::Precision::HALF: return deserialize_primitive<sparrow::float16_t >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
117+ case org::apache::arrow::flatbuf::Precision::SINGLE: return deserialize_primitive<float >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
118+ case org::apache::arrow::flatbuf::Precision::DOUBLE: return deserialize_primitive<double >(record_batch, body, name, metadata, nullable, buffer_index, variadic_counts_idx, field);
114119 default : throw std::runtime_error (" Unsupported floating point precision: " + std::to_string (static_cast <int >(precision)));
115120 }
116121 }
@@ -121,6 +126,7 @@ namespace sparrow_ipc
121126 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
122127 bool nullable,
123128 size_t & buffer_index,
129+ size_t &,
124130 const org::apache::arrow::flatbuf::Field& field)
125131 {
126132 const auto * fixed_size_binary_field = field.type_as_FixedSizeBinary ();
@@ -136,6 +142,7 @@ namespace sparrow_ipc
136142 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
137143 bool nullable,
138144 size_t & buffer_index,
145+ size_t &,
139146 const org::apache::arrow::flatbuf::Field& field)
140147 {
141148 const auto * decimal_field = field.type_as_Decimal ();
@@ -171,6 +178,7 @@ namespace sparrow_ipc
171178 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
172179 bool nullable,
173180 size_t & buffer_index,
181+ size_t &,
174182 const org::apache::arrow::flatbuf::Field&)
175183 {
176184 return sparrow::array (deserialize_null_array (
@@ -184,6 +192,7 @@ namespace sparrow_ipc
184192 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
185193 bool nullable,
186194 size_t & buffer_index,
195+ size_t &,
187196 const org::apache::arrow::flatbuf::Field& field)
188197 {
189198 const auto date_type = field.type_as_Date ();
@@ -202,6 +211,7 @@ namespace sparrow_ipc
202211 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
203212 bool nullable,
204213 size_t & buffer_index,
214+ size_t &,
205215 const org::apache::arrow::flatbuf::Field& field)
206216 {
207217 const auto * interval_type = field.type_as_Interval ();
@@ -221,6 +231,7 @@ namespace sparrow_ipc
221231 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
222232 bool nullable,
223233 size_t & buffer_index,
234+ size_t &,
224235 const org::apache::arrow::flatbuf::Field& field)
225236 {
226237 const auto * duration_type = field.type_as_Duration ();
@@ -241,6 +252,7 @@ namespace sparrow_ipc
241252 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
242253 bool nullable,
243254 size_t & buffer_index,
255+ size_t &,
244256 const org::apache::arrow::flatbuf::Field& field)
245257 {
246258 const auto time_type = field.type_as_Time ();
@@ -261,6 +273,7 @@ namespace sparrow_ipc
261273 const std::optional<std::vector<sparrow::metadata_pair>>& metadata,
262274 bool nullable,
263275 size_t & buffer_index,
276+ size_t &,
264277 const org::apache::arrow::flatbuf::Field& field)
265278 {
266279 const auto timestamp_type = field.type_as_Timestamp ();
0 commit comments