(&mut self)
| 153 | } |
| 154 | |
| 155 | fn consume_batch(&mut self) -> Result<ArrayRef> { |
| 156 | let target_type = &self.data_type; |
| 157 | |
| 158 | // Convert physical data to equivalent arrow type, and then perform |
| 159 | // coercion as needed |
| 160 | let record_data = self |
| 161 | .record_reader |
| 162 | .consume_record_data() |
| 163 | .into_buffer(target_type); |
| 164 | |
| 165 | let len = self.record_reader.num_values(); |
| 166 | let nulls = self |
| 167 | .record_reader |
| 168 | .consume_bitmap_buffer() |
| 169 | .and_then(|b| NullBuffer::from_unsliced_buffer(b, len)); |
| 170 | |
| 171 | let array: ArrayRef = match T::get_physical_type() { |
| 172 | PhysicalType::BOOLEAN => Arc::new(BooleanArray::new( |
| 173 | BooleanBuffer::new(record_data, 0, len), |
| 174 | nulls, |
| 175 | )), |
| 176 | PhysicalType::INT32 => Arc::new(Int32Array::new( |
| 177 | ScalarBuffer::new(record_data, 0, len), |
| 178 | nulls, |
| 179 | )), |
| 180 | PhysicalType::INT64 => Arc::new(Int64Array::new( |
| 181 | ScalarBuffer::new(record_data, 0, len), |
| 182 | nulls, |
| 183 | )), |
| 184 | PhysicalType::FLOAT => Arc::new(Float32Array::new( |
| 185 | ScalarBuffer::new(record_data, 0, len), |
| 186 | nulls, |
| 187 | )), |
| 188 | PhysicalType::DOUBLE => Arc::new(Float64Array::new( |
| 189 | ScalarBuffer::new(record_data, 0, len), |
| 190 | nulls, |
| 191 | )), |
| 192 | PhysicalType::INT96 => Arc::new(Int64Array::new( |
| 193 | ScalarBuffer::new(record_data, 0, len), |
| 194 | nulls, |
| 195 | )), |
| 196 | PhysicalType::BYTE_ARRAY | PhysicalType::FIXED_LEN_BYTE_ARRAY => { |
| 197 | unreachable!("PrimitiveArrayReaders don't support complex physical types"); |
| 198 | } |
| 199 | }; |
| 200 | |
| 201 | // Coerce the arrow type to the desired array type |
| 202 | let array = coerce_array(array, target_type)?; |
| 203 | |
| 204 | // save definition and repetition buffers |
| 205 | self.def_levels_buffer = self.record_reader.consume_def_levels(); |
| 206 | self.rep_levels_buffer = self.record_reader.consume_rep_levels(); |
| 207 | self.record_reader.reset(); |
| 208 | Ok(array) |
| 209 | } |
| 210 | |
| 211 | fn skip_records(&mut self, num_records: usize) -> Result<usize> { |
| 212 | skip_records(&mut self.record_reader, self.pages.as_mut(), num_records) |
nothing calls this directly
no test coverage detected