@@ -14,7 +14,8 @@ use std::io;
1414use std:: path:: PathBuf ;
1515use std:: str:: FromStr ;
1616use tpchgen_cli:: {
17- Compression , OutputFormat , Table , TpchGenerator , DEFAULT_PARQUET_ROW_GROUP_BYTES ,
17+ Compression , OutputFormat , Table , TpchGenerator , TpchGeneratorBuilder ,
18+ DEFAULT_PARQUET_ROW_GROUP_BYTES ,
1819} ;
1920
2021#[ derive( Parser ) ]
@@ -116,6 +117,30 @@ struct CommonArgs {
116117 stdout : bool ,
117118}
118119
120+ impl CommonArgs {
121+ /// Create a [`TpchGeneratorBuilder`] pre-configured with the common options.
122+ fn builder ( self , format : OutputFormat ) -> TpchGeneratorBuilder {
123+ let mut builder = TpchGenerator :: builder ( )
124+ . with_scale_factor ( self . scale_factor )
125+ . with_output_dir ( self . output_dir )
126+ . with_format ( format)
127+ . with_num_threads ( self . num_threads )
128+ . with_stdout ( self . stdout ) ;
129+
130+ if let Some ( tables) = self . tables {
131+ builder = builder. with_tables ( tables) ;
132+ }
133+ if let Some ( parts) = self . parts {
134+ builder = builder. with_parts ( parts) ;
135+ }
136+ if let Some ( part) = self . part {
137+ builder = builder. with_part ( part) ;
138+ }
139+
140+ builder
141+ }
142+ }
143+
119144#[ derive( clap:: Args ) ]
120145struct TopLevelArgs {
121146 #[ command( flatten) ]
@@ -289,19 +314,8 @@ impl Cli {
289314 #[ allow( deprecated) ]
290315 async fn run ( self ) -> io:: Result < ( ) > {
291316 let format = self . args . format . unwrap_or ( OutputFormat :: Tbl ) ;
292- let scale_factor = self . args . common . scale_factor ;
293- let output_dir = self . args . common . output_dir ;
294- let num_threads = self . args . common . num_threads ;
295- let verbose = self . args . common . verbose ;
296- let quiet = self . args . common . quiet ;
297- let stdout = self . args . common . stdout ;
298- let parquet_compression = self . args . parquet_compression . unwrap_or ( Compression :: SNAPPY ) ;
299- let parquet_row_group_bytes = self
300- . args
301- . parquet_row_group_bytes
302- . unwrap_or ( DEFAULT_PARQUET_ROW_GROUP_BYTES ) ;
303317
304- configure_logging ( verbose, quiet) ;
318+ configure_logging ( self . args . common . verbose , self . args . common . quiet ) ;
305319
306320 // Warn about --format migration to subcommands (only when explicitly provided)
307321 if self . args . format . is_some ( ) {
@@ -318,13 +332,19 @@ impl Cli {
318332 }
319333 }
320334
335+ let parquet_compression = self . args . parquet_compression . unwrap_or ( Compression :: SNAPPY ) ;
321336 if self . args . parquet_compression . is_some ( ) {
322337 if format == OutputFormat :: Parquet {
323338 log:: warn!( "The --parquet-compression flag is deprecated. Use 'tpchgen-cli parquet --compression=...' instead" ) ;
324339 } else {
325340 log:: warn!( "Parquet compression option set but not generating Parquet files" ) ;
326341 }
327342 }
343+
344+ let parquet_row_group_bytes = self
345+ . args
346+ . parquet_row_group_bytes
347+ . unwrap_or ( DEFAULT_PARQUET_ROW_GROUP_BYTES ) ;
328348 if self . args . parquet_row_group_bytes . is_some ( ) {
329349 if format == OutputFormat :: Parquet {
330350 log:: warn!( "The --parquet-row-group-bytes flag is deprecated. Use 'tpchgen-cli parquet --row-group-bytes=...' instead" ) ;
@@ -333,109 +353,46 @@ impl Cli {
333353 }
334354 }
335355
336- // Build the generator using the library API
337- let mut builder = TpchGenerator :: builder ( )
338- . with_scale_factor ( scale_factor)
339- . with_output_dir ( output_dir)
340- . with_format ( format)
341- . with_num_threads ( num_threads)
356+ self . args
357+ . common
358+ . builder ( format)
342359 . with_parquet_compression ( parquet_compression)
343360 . with_parquet_row_group_bytes ( parquet_row_group_bytes)
344- . with_stdout ( stdout) ;
345-
346- if let Some ( tables) = self . args . common . tables {
347- builder = builder. with_tables ( tables) ;
348- }
349-
350- if let Some ( parts) = self . args . common . parts {
351- builder = builder. with_parts ( parts) ;
352- }
353- if let Some ( part) = self . args . common . part {
354- builder = builder. with_part ( part) ;
355- }
356-
357- builder. build ( ) . generate ( ) . await
361+ . build ( )
362+ . generate ( )
363+ . await
358364 }
359365}
360366
361367impl TblArgs {
362368 async fn run ( self ) -> io:: Result < ( ) > {
363369 configure_logging ( self . common . verbose , self . common . quiet ) ;
364-
365- let mut builder = TpchGenerator :: builder ( )
366- . with_scale_factor ( self . common . scale_factor )
367- . with_output_dir ( self . common . output_dir )
368- . with_format ( OutputFormat :: Tbl )
369- . with_num_threads ( self . common . num_threads )
370- . with_stdout ( self . common . stdout ) ;
371-
372- if let Some ( tables) = self . common . tables {
373- builder = builder. with_tables ( tables) ;
374- }
375-
376- if let Some ( parts) = self . common . parts {
377- builder = builder. with_parts ( parts) ;
378- }
379- if let Some ( part) = self . common . part {
380- builder = builder. with_part ( part) ;
381- }
382-
383- builder. build ( ) . generate ( ) . await
370+ self . common . builder ( OutputFormat :: Tbl ) . build ( ) . generate ( ) . await
384371 }
385372}
386373
387374impl CsvArgs {
388375 async fn run ( self ) -> io:: Result < ( ) > {
389376 configure_logging ( self . common . verbose , self . common . quiet ) ;
390-
391- let mut builder = TpchGenerator :: builder ( )
392- . with_scale_factor ( self . common . scale_factor )
393- . with_output_dir ( self . common . output_dir )
394- . with_format ( OutputFormat :: Csv )
395- . with_num_threads ( self . common . num_threads )
396- . with_stdout ( self . common . stdout )
397- . with_csv_delimiter ( self . delimiter ) ;
398-
399- if let Some ( tables) = self . common . tables {
400- builder = builder. with_tables ( tables) ;
401- }
402-
403- if let Some ( parts) = self . common . parts {
404- builder = builder. with_parts ( parts) ;
405- }
406- if let Some ( part) = self . common . part {
407- builder = builder. with_part ( part) ;
408- }
409-
410- builder. build ( ) . generate ( ) . await
377+ self . common
378+ . builder ( OutputFormat :: Csv )
379+ . with_csv_delimiter ( self . delimiter )
380+ . build ( )
381+ . generate ( )
382+ . await
411383 }
412384}
413385
414386impl ParquetArgs {
415387 async fn run ( self ) -> io:: Result < ( ) > {
416388 configure_logging ( self . common . verbose , self . common . quiet ) ;
417-
418- let mut builder = TpchGenerator :: builder ( )
419- . with_scale_factor ( self . common . scale_factor )
420- . with_output_dir ( self . common . output_dir )
421- . with_format ( OutputFormat :: Parquet )
422- . with_num_threads ( self . common . num_threads )
423- . with_stdout ( self . common . stdout )
389+ self . common
390+ . builder ( OutputFormat :: Parquet )
424391 . with_parquet_compression ( self . compression )
425- . with_parquet_row_group_bytes ( self . row_group_bytes ) ;
426-
427- if let Some ( tables) = self . common . tables {
428- builder = builder. with_tables ( tables) ;
429- }
430-
431- if let Some ( parts) = self . common . parts {
432- builder = builder. with_parts ( parts) ;
433- }
434- if let Some ( part) = self . common . part {
435- builder = builder. with_part ( part) ;
436- }
437-
438- builder. build ( ) . generate ( ) . await
392+ . with_parquet_row_group_bytes ( self . row_group_bytes )
393+ . build ( )
394+ . generate ( )
395+ . await
439396 }
440397}
441398
0 commit comments