@@ -26,7 +26,6 @@ use std::task::Poll;
2626
2727use datafusion_datasource:: decoder:: { deserialize_stream, DecoderDeserializer } ;
2828use datafusion_datasource:: file_compression_type:: FileCompressionType ;
29- use datafusion_datasource:: file_meta:: FileMeta ;
3029use datafusion_datasource:: file_stream:: { FileOpenFuture , FileOpener } ;
3130use datafusion_datasource:: {
3231 as_file_source, calculate_range, FileRange , ListingTableUrl , PartitionedFile ,
@@ -338,18 +337,11 @@ impl FileOpener for CsvOpener {
338337 /// A},1,2,3,4,5,6,7,8,9\n
339338 /// The lines read would be: [1, 2]
340339 fn open ( & self , file : PartitionedFile ) -> Result < FileOpenFuture > {
341- let file_meta = FileMeta {
342- object_meta : file. object_meta . clone ( ) ,
343- range : file. range . clone ( ) ,
344- extensions : file. extensions . clone ( ) ,
345- metadata_size_hint : file. metadata_size_hint ,
346- } ;
347-
348340 // `self.config.has_header` controls whether to skip reading the 1st line header
349341 // If the .csv file is read in parallel and this `CsvOpener` is only reading some middle
350342 // partition, then don't skip first line
351343 let mut csv_has_header = self . config . has_header ;
352- if let Some ( FileRange { start, .. } ) = file_meta . range {
344+ if let Some ( FileRange { start, .. } ) = file . range {
353345 if start != 0 {
354346 csv_has_header = false ;
355347 }
@@ -363,7 +355,7 @@ impl FileOpener for CsvOpener {
363355
364356 let file_compression_type = self . file_compression_type . to_owned ( ) ;
365357
366- if file_meta . range . is_some ( ) {
358+ if file . range . is_some ( ) {
367359 assert ! (
368360 !file_compression_type. is_compressed( ) ,
369361 "Reading compressed .csv in parallel is not supported"
@@ -376,8 +368,7 @@ impl FileOpener for CsvOpener {
376368 Ok ( Box :: pin ( async move {
377369 // Current partition contains bytes [start_byte, end_byte) (might contain incomplete lines at boundaries)
378370
379- let calculated_range =
380- calculate_range ( & file_meta, & store, terminator) . await ?;
371+ let calculated_range = calculate_range ( & file, & store, terminator) . await ?;
381372
382373 let range = match calculated_range {
383374 RangeCalculation :: Range ( None ) => None ,
@@ -394,19 +385,20 @@ impl FileOpener for CsvOpener {
394385 ..Default :: default ( )
395386 } ;
396387
397- let result = store. get_opts ( file_meta . location ( ) , options) . await ?;
388+ let result = store. get_opts ( & file . object_meta . location , options) . await ?;
398389
399390 match result. payload {
400391 #[ cfg( not( target_arch = "wasm32" ) ) ]
401- GetResultPayload :: File ( mut file , _) => {
402- let is_whole_file_scanned = file_meta . range . is_none ( ) ;
392+ GetResultPayload :: File ( mut result_file , _) => {
393+ let is_whole_file_scanned = file . range . is_none ( ) ;
403394 let decoder = if is_whole_file_scanned {
404395 // Don't seek if no range as breaks FIFO files
405- file_compression_type. convert_read ( file ) ?
396+ file_compression_type. convert_read ( result_file ) ?
406397 } else {
407- file . seek ( SeekFrom :: Start ( result. range . start as _ ) ) ?;
398+ result_file . seek ( SeekFrom :: Start ( result. range . start as _ ) ) ?;
408399 file_compression_type. convert_read (
409- file. take ( ( result. range . end - result. range . start ) as u64 ) ,
400+ result_file
401+ . take ( ( result. range . end - result. range . start ) as u64 ) ,
410402 ) ?
411403 } ;
412404
0 commit comments