sqlite3-parser 0.16.0

SQL parser (as understood by SQLite)
Documentation
use std::{
    env,
    io::{stdin, IsTerminal as _, Read as _},
};

use fallible_iterator::FallibleIterator as _;
use sqlite3_parser::lexer::sql::Parser;

/// Parse args.
// RUST_LOG=sqlite3Parser=debug
fn main() {
    env_logger::init();
    let args = env::args();
    if args.len() == 1 && !stdin().is_terminal() {
        let mut str = String::with_capacity(1024);
        stdin().read_to_string(&mut str).unwrap();
        parse(str);
    }
    for arg in args.skip(1) {
        parse(arg);
    }
}

fn parse(arg: String) {
    let mut parser = Parser::new(arg.as_bytes());
    loop {
        match parser.next() {
            Ok(None) => break,
            Err(err) => {
                eprintln!("Err: {err} in {arg}");
                break;
            }
            Ok(Some(cmd)) => {
                println!("{cmd}");
            }
        }
    }
}