From fa2bb1c0daaef1c394111f71c495d99ce8be477d Mon Sep 17 00:00:00 2001 From: Matthew Turner Date: Tue, 22 Feb 2022 16:24:28 -0700 Subject: [PATCH 1/4] Add new option to run and keep df open --- datafusion-cli/src/exec.rs | 15 +++++++++++++++ datafusion-cli/src/main.rs | 30 ++++++++++++++++++------------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/datafusion-cli/src/exec.rs b/datafusion-cli/src/exec.rs index 17b329b86d9b..27bc667f9136 100644 --- a/datafusion-cli/src/exec.rs +++ b/datafusion-cli/src/exec.rs @@ -72,6 +72,21 @@ pub async fn exec_from_lines( } } +pub async fn exec_from_files( + files: Vec, + ctx: &mut Context, + print_options: &PrintOptions, +) { + let files = files + .into_iter() + .map(|file_path| File::open(file_path).unwrap()) + .collect::>(); + for file in files { + let mut reader = BufReader::new(file); + exec_from_lines(ctx, &mut reader, &print_options).await; + } +} + /// run and execute SQL statements and commands against a context with the given print options pub async fn exec_from_repl(ctx: &mut Context, print_options: &mut PrintOptions) { let mut rl = Editor::::new(); diff --git a/datafusion-cli/src/main.rs b/datafusion-cli/src/main.rs index 1d91f13665ab..955b0b796722 100644 --- a/datafusion-cli/src/main.rs +++ b/datafusion-cli/src/main.rs @@ -24,8 +24,6 @@ use datafusion_cli::{ }; use mimalloc::MiMalloc; use std::env; -use std::fs::File; -use std::io::BufReader; use std::path::Path; #[global_allocator] @@ -59,6 +57,16 @@ struct Args { )] file: Vec, + #[clap( + short, + long, + multiple_values = true, + help = "Execute commands from file(s)", + validator(is_valid_file), + conflicts_with = "file" + )] + run: Vec, + #[clap(long, arg_enum, default_value_t = PrintFormat::Table)] format: PrintFormat, @@ -106,17 +114,15 @@ pub async fn main() -> Result<()> { quiet: args.quiet, }; - let files = args.file; - if !files.is_empty() { - let files = files - .into_iter() - .map(|file_path| File::open(file_path).unwrap()) - .collect::>(); - for file in files { - let mut reader = BufReader::new(file); - exec::exec_from_lines(&mut ctx, &mut reader, &print_options).await; - } + let files_to_run_then_quit = args.file; + let files_to_run = args.run; + if !files_to_run_then_quit.is_empty() { + exec::exec_from_files(files_to_run_then_quit, &mut ctx, &print_options).await } else { + if !files_to_run.is_empty() { + println!("Running files: {}", &files_to_run.join(",")); + exec::exec_from_files(files_to_run, &mut ctx, &print_options).await + } exec::exec_from_repl(&mut ctx, &mut print_options).await; } From cf43b1739d04ae3ac47dfcb519cb870d4d4eead6 Mon Sep 17 00:00:00 2001 From: Matthew Turner Date: Wed, 23 Feb 2022 18:41:59 -0500 Subject: [PATCH 2/4] Rename options and clippy --- datafusion-cli/src/exec.rs | 2 +- datafusion-cli/src/main.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/datafusion-cli/src/exec.rs b/datafusion-cli/src/exec.rs index 27bc667f9136..dc3c73e5ab43 100644 --- a/datafusion-cli/src/exec.rs +++ b/datafusion-cli/src/exec.rs @@ -83,7 +83,7 @@ pub async fn exec_from_files( .collect::>(); for file in files { let mut reader = BufReader::new(file); - exec_from_lines(ctx, &mut reader, &print_options).await; + exec_from_lines(ctx, &mut reader, print_options).await; } } diff --git a/datafusion-cli/src/main.rs b/datafusion-cli/src/main.rs index 955b0b796722..f9af94eb4fd6 100644 --- a/datafusion-cli/src/main.rs +++ b/datafusion-cli/src/main.rs @@ -55,7 +55,7 @@ struct Args { help = "Execute commands from file(s), then exit", validator(is_valid_file) )] - file: Vec, + file_exit: Vec, #[clap( short, @@ -65,7 +65,7 @@ struct Args { validator(is_valid_file), conflicts_with = "file" )] - run: Vec, + file_run: Vec, #[clap(long, arg_enum, default_value_t = PrintFormat::Table)] format: PrintFormat, @@ -114,8 +114,8 @@ pub async fn main() -> Result<()> { quiet: args.quiet, }; - let files_to_run_then_quit = args.file; - let files_to_run = args.run; + let files_to_run_then_quit = args.file_exit; + let files_to_run = args.file_run; if !files_to_run_then_quit.is_empty() { exec::exec_from_files(files_to_run_then_quit, &mut ctx, &print_options).await } else { From 5597e4c15d3579a49703957b6b8621f4e99ffeea Mon Sep 17 00:00:00 2001 From: Matthew Turner Date: Tue, 1 Mar 2022 23:56:13 -0500 Subject: [PATCH 3/4] Move to .datafusionrc --- datafusion-cli/Cargo.toml | 3 ++- datafusion-cli/src/main.rs | 40 +++++++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/datafusion-cli/Cargo.toml b/datafusion-cli/Cargo.toml index 04349e57cea5..ba1c6e332dc9 100644 --- a/datafusion-cli/Cargo.toml +++ b/datafusion-cli/Cargo.toml @@ -35,4 +35,5 @@ datafusion = { path = "../datafusion", version = "7.0.0" } arrow = { version = "9.1" } ballista = { path = "../ballista/rust/client", version = "0.6.0", optional=true } env_logger = "0.9" -mimalloc = { version = "*", default-features = false } \ No newline at end of file +mimalloc = { version = "*", default-features = false } +dirs = "4.0.0" diff --git a/datafusion-cli/src/main.rs b/datafusion-cli/src/main.rs index f9af94eb4fd6..dc3797fbf31e 100644 --- a/datafusion-cli/src/main.rs +++ b/datafusion-cli/src/main.rs @@ -22,6 +22,7 @@ use datafusion_cli::{ context::Context, exec, print_format::PrintFormat, print_options::PrintOptions, DATAFUSION_CLI_VERSION, }; +use dirs; use mimalloc::MiMalloc; use std::env; use std::path::Path; @@ -55,17 +56,17 @@ struct Args { help = "Execute commands from file(s), then exit", validator(is_valid_file) )] - file_exit: Vec, + file: Vec, #[clap( - short, + short = 'r', long, multiple_values = true, - help = "Execute commands from file(s)", + help = "Run the provided files on startup instead of ~/.datafusionrc", validator(is_valid_file), conflicts_with = "file" )] - file_run: Vec, + rc: Option>, #[clap(long, arg_enum, default_value_t = PrintFormat::Table)] format: PrintFormat, @@ -114,14 +115,31 @@ pub async fn main() -> Result<()> { quiet: args.quiet, }; - let files_to_run_then_quit = args.file_exit; - let files_to_run = args.file_run; - if !files_to_run_then_quit.is_empty() { - exec::exec_from_files(files_to_run_then_quit, &mut ctx, &print_options).await + let files = args.file; + let rc = match args.rc { + Some(file) => file, + None => { + let mut files = Vec::new(); + let home = dirs::home_dir(); + match home { + Some(p) => { + let home_rc = p.join(".datafusionrc"); + if home_rc.exists() { + files.push(String::from( + home_rc.into_os_string().into_string().unwrap(), + )); + } + } + None => (), + } + files + } + }; + if !files.is_empty() { + exec::exec_from_files(files, &mut ctx, &print_options).await } else { - if !files_to_run.is_empty() { - println!("Running files: {}", &files_to_run.join(",")); - exec::exec_from_files(files_to_run, &mut ctx, &print_options).await + if !rc.is_empty() { + exec::exec_from_files(rc, &mut ctx, &print_options).await } exec::exec_from_repl(&mut ctx, &mut print_options).await; } From aa9a4c92a5df964644eb83a0416c4c6d421f53aa Mon Sep 17 00:00:00 2001 From: Matthew Turner Date: Wed, 2 Mar 2022 02:00:47 -0500 Subject: [PATCH 4/4] Clippy --- datafusion-cli/src/main.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/datafusion-cli/src/main.rs b/datafusion-cli/src/main.rs index dc3797fbf31e..08878f9c70eb 100644 --- a/datafusion-cli/src/main.rs +++ b/datafusion-cli/src/main.rs @@ -22,7 +22,6 @@ use datafusion_cli::{ context::Context, exec, print_format::PrintFormat, print_options::PrintOptions, DATAFUSION_CLI_VERSION, }; -use dirs; use mimalloc::MiMalloc; use std::env; use std::path::Path; @@ -121,16 +120,11 @@ pub async fn main() -> Result<()> { None => { let mut files = Vec::new(); let home = dirs::home_dir(); - match home { - Some(p) => { - let home_rc = p.join(".datafusionrc"); - if home_rc.exists() { - files.push(String::from( - home_rc.into_os_string().into_string().unwrap(), - )); - } + if let Some(p) = home { + let home_rc = p.join(".datafusionrc"); + if home_rc.exists() { + files.push(home_rc.into_os_string().into_string().unwrap()); } - None => (), } files }