csv-query-cli 0.4.1

Make SQL queries on CSV files (cli)
use std::fs::File;
use std::io;

use csv_query::errors::{Result, ResultExt};
use csv_query::Executor;

use arguments;
use interactive::run_interactive;

pub(crate) fn process() -> Result<()> {
    let matches = arguments::build().get_matches();
    let mut input_buffers: Vec<io::BufReader<File>> = vec![];

    for f in matches
        .values_of("files")
        .unwrap()
        .map(|f| File::open(f).chain_err(|| format!("Opening file: {:?}", f)))
    {
        input_buffers.push(io::BufReader::new(f?));
    }

    let delimiter = {
        let delimiter = matches.value_of("delimiter").unwrap();
        if delimiter.len() > 1 {
            bail!("Invalid delimiter {:?}", delimiter);
        }
        delimiter.as_bytes()[0]
    };

    let mut executor = Executor::new(
        input_buffers,
        io::BufWriter::new(io::stdout()),
        delimiter,
        matches
            .value_of("insert-batch-size")
            .unwrap()
            .parse()
            .chain_err(|| "Batch size is not a valid integer")?,
    )?;
    if let Some(query) = matches.value_of("query") {
        executor.write_query_results(query)?;
    }
    if matches.is_present("interactive") {
        run_interactive(executor)?;
    }
    Ok(())
}