query-forge 0.2.0

Run SQL queries on XLSX/XML/CSV/JSON/JSONL/Markdown inputs and export results as text, CSV, JSONL, Markdown, XML, or XLSX
Documentation
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,
                &params,
                !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(())
}