From 2e9da53ed3fce705df82defec5944981aae1e74c Mon Sep 17 00:00:00 2001 From: Nickolay Ponomarev Date: Wed, 30 Jan 2019 15:41:50 +0300 Subject: [PATCH] Small CLI app that can be used to test parsing an external SQL file --- Cargo.toml | 3 +++ examples/cli.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 examples/cli.rs diff --git a/Cargo.toml b/Cargo.toml index 7106111a..99e49b17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,3 +21,6 @@ path = "src/lib.rs" log = "0.4.5" chrono = "0.4.6" uuid = "0.7.1" + +[dev-dependencies] +simple_logger = "1.0.1" diff --git a/examples/cli.rs b/examples/cli.rs new file mode 100644 index 00000000..545e8218 --- /dev/null +++ b/examples/cli.rs @@ -0,0 +1,46 @@ +extern crate simple_logger; +extern crate sqlparser; +///! A small command-line app to run the parser. +/// Run with `cargo run --example cli` +use std::fs; + +use sqlparser::dialect::GenericSqlDialect; +use sqlparser::sqlparser::Parser; + +fn main() { + simple_logger::init().unwrap(); + + let filename = std::env::args() + .nth(1) + .expect("No arguments provided!\n\nUsage: cargo run --example cli FILENAME.sql"); + + let contents = + fs::read_to_string(&filename).expect(&format!("Unable to read the file {}", &filename)); + let without_bom = if contents.chars().nth(0).unwrap() as u64 != 0xfeff { + contents.as_str() + } else { + let mut chars = contents.chars(); + chars.next(); + chars.as_str() + }; + println!("Input:\n'{}'", &without_bom); + let parse_result = Parser::parse_sql(&GenericSqlDialect {}, without_bom.to_owned()); + match parse_result { + Ok(statements) => { + println!( + "Round-trip:\n'{}'", + statements + .iter() + .map(|s| s.to_string()) + .collect::>() + .join("\n") + ); + println!("Parse results:\n{:#?}", statements); + std::process::exit(0); + } + Err(e) => { + println!("Error during parsing: {:?}", e); + std::process::exit(1); + } + } +}