mod error;
mod sql;
use clap::{Parser, Subcommand};
use std::process;
use crate::sql::{parse_sql, execute_query};
#[derive(Parser, Debug)]
#[command(author, version, about)]
struct SqlCommand {
#[arg(help = "SQL query to execute (e.g., \"SELECT * FROM ~/Documents WHERE extension = '.txt'\"")]
query: String,
#[arg(short, long, default_value = "text")]
format: String,
}
#[derive(Parser, Debug)]
#[command(author, version, about)]
struct AppArgs {
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand, Debug)]
enum Command {
Sql(SqlCommand),
}
fn main() {
let args = AppArgs::parse();
match args.command {
Command::Sql(sql_args) => {
run_sql_mode(&sql_args);
},
}
}
fn run_sql_mode(args: &SqlCommand) {
match parse_sql(&args.query) {
Ok(query) => {
match execute_query(&query) {
Ok(results) => {
match args.format.as_str() {
"json" => {
println!("{}", serde_json::to_string_pretty(&results).unwrap_or_else(|e| {
eprintln!("Error serializing results: {}", e);
process::exit(1);
}));
},
_ => {
println!("{} results found:", results.len());
for result in &results {
println!("{}: {} bytes", result.path.display(), result.size);
}
}
}
},
Err(err) => {
eprintln!("Error executing query: {}", err);
process::exit(1);
}
}
},
Err(err) => {
eprintln!("Error parsing SQL query: {}", err);
process::exit(1);
}
}
}