mirror of
https://github.com/tursodatabase/libsql.git
synced 2025-05-25 18:00:35 +00:00
56 lines
1.9 KiB
Rust
56 lines
1.9 KiB
Rust
use fallible_iterator::FallibleIterator;
|
|
use std::env;
|
|
use std::fs::read;
|
|
use std::panic;
|
|
|
|
use sqlite3_parser::lexer::sql::Parser;
|
|
|
|
/// Parse specified files and check all commands.
|
|
fn main() {
|
|
env_logger::init();
|
|
let args = env::args();
|
|
for arg in args.skip(1) {
|
|
println!("{arg}");
|
|
let result = panic::catch_unwind(|| {
|
|
let input = read(arg.clone()).unwrap();
|
|
let mut parser = Parser::new(&input);
|
|
loop {
|
|
match parser.next() {
|
|
Ok(None) => break,
|
|
Err(err) => {
|
|
eprintln!("Err: {err} in {arg}");
|
|
break;
|
|
}
|
|
Ok(Some(cmd)) => {
|
|
let input = cmd.to_string();
|
|
let mut checker = Parser::new(input.as_bytes());
|
|
match checker.next() {
|
|
Err(err) => {
|
|
eprintln!(
|
|
"Check Err in {}:{}, {} in\n{}\n{:?}",
|
|
arg,
|
|
parser.line(),
|
|
err,
|
|
input,
|
|
cmd
|
|
);
|
|
}
|
|
Ok(None) => {
|
|
eprintln!("Check Err in {}:{}, {:?}", arg, parser.line(), cmd);
|
|
}
|
|
Ok(Some(check)) => {
|
|
if cmd != check {
|
|
eprintln!("{cmd:?}\n<>\n{check:?}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
if let Err(e) = result {
|
|
eprintln!("Panic: {e:?} in {arg}");
|
|
}
|
|
}
|
|
}
|