Skip to content

Commit d9f54c1

Browse files
committed
refactor
1 parent d9c7af3 commit d9f54c1

1 file changed

Lines changed: 52 additions & 95 deletions

File tree

tpchgen-cli/bin/main.rs

Lines changed: 52 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ use std::io;
1414
use std::path::PathBuf;
1515
use std::str::FromStr;
1616
use 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)]
120145
struct 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

361367
impl 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

387374
impl 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

414386
impl 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

Comments
 (0)