Accept &str in Parse::parse_sql (#182)

It is more generic to accept a `&str` than a `String` in an API,
and avoids having to convert a string to a `String` when not
needed, avoiding a copy.
This commit is contained in:
Daniël Heres 2020-06-03 22:31:41 +02:00 committed by GitHub
parent b4699bd4a7
commit d32df527e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 8 additions and 8 deletions

View file

@ -29,7 +29,7 @@ let sql = "SELECT a, b, 123, myfunc(b) \
let dialect = GenericDialect {}; // or AnsiDialect, or your own dialect ...
let ast = Parser::parse_sql(&dialect, sql.to_string()).unwrap();
let ast = Parser::parse_sql(&dialect, sql).unwrap();
println!("AST: {:?}", ast);
```
@ -122,4 +122,4 @@ resources.
[LocustDB]: https://github.com/cswinter/LocustDB
[Pratt Parser]: https://tdop.github.io/
[sql-2016-grammar]: https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html
[sql-standard]: https://en.wikipedia.org/wiki/ISO/IEC_9075
[sql-standard]: https://en.wikipedia.org/wiki/ISO/IEC_9075

View file

@ -45,7 +45,7 @@ fn main() {
chars.next();
chars.as_str()
};
let parse_result = Parser::parse_sql(&*dialect, without_bom.to_owned());
let parse_result = Parser::parse_sql(&*dialect, without_bom);
match parse_result {
Ok(statements) => {
println!(

View file

@ -23,7 +23,7 @@ fn main() {
let dialect = GenericDialect {};
let ast = Parser::parse_sql(&dialect, sql.to_string()).unwrap();
let ast = Parser::parse_sql(&dialect, sql).unwrap();
println!("AST: {:?}", ast);
}

View file

@ -28,7 +28,7 @@
//! WHERE a > b AND b < 100 \
//! ORDER BY a DESC, b";
//!
//! let ast = Parser::parse_sql(&dialect, sql.to_string()).unwrap();
//! let ast = Parser::parse_sql(&dialect, sql).unwrap();
//!
//! println!("AST: {:?}", ast);
//! ```

View file

@ -82,7 +82,7 @@ impl Parser {
}
/// Parse a SQL statement and produce an Abstract Syntax Tree (AST)
pub fn parse_sql(dialect: &dyn Dialect, sql: String) -> Result<Vec<Statement>, ParserError> {
pub fn parse_sql(dialect: &dyn Dialect, sql: &str) -> Result<Vec<Statement>, ParserError> {
let mut tokenizer = Tokenizer::new(dialect, &sql);
let tokens = tokenizer.tokenize()?;
let mut parser = Parser::new(tokens);

View file

@ -58,9 +58,9 @@ impl TestedDialects {
}
pub fn parse_sql_statements(&self, sql: &str) -> Result<Vec<Statement>, ParserError> {
self.one_of_identical_results(|dialect| Parser::parse_sql(dialect, sql.to_string()))
self.one_of_identical_results(|dialect| Parser::parse_sql(dialect, &sql))
// To fail the `ensure_multiple_dialects_are_tested` test:
// Parser::parse_sql(&**self.dialects.first().unwrap(), sql.to_string())
// Parser::parse_sql(&**self.dialects.first().unwrap(), sql)
}
/// Ensures that `sql` parses as a single statement, optionally checking