use anyhow::Result;
use clap::Parser;
mod cli;
mod input;
mod inspect;
mod output;
mod query;
use crate::cli::{Cli, Commands};
fn main() -> Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::Query(cmd) => {
let sql = query::load_query(&cmd)?;
let params = query::parse_query_params(&cmd.params)?;
let input_specs = input::parse_input_specs(&cmd.input, None)?;
let workbook_inputs = input_specs
.iter()
.map(|input| query_forge::WorkbookInput {
path: input.path.as_path(),
sheet_name: input.sheet_name.as_deref(),
table_name: input.table_name.as_deref(),
})
.collect::<Vec<_>>();
let result = query_forge::run_query_with_params_multi_inputs(
&workbook_inputs,
&sql,
¶ms,
!cmd.no_headers,
)?;
output::write_query_result(&result, cmd.output.as_deref(), cmd.format)?;
}
Commands::Tables(cmd) => inspect::run_tables_command(cmd)?,
Commands::Schema(cmd) => inspect::run_schema_command(cmd)?,
Commands::Inspect(cmd) => inspect::run_inspect_command(cmd)?,
}
Ok(())
}