mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
Add benchmarks using cargo bench / criterion (#190)
This commit is contained in:
parent
d32df527e6
commit
6e6fae73a0
4 changed files with 73 additions and 0 deletions
6
docs/benchmarking.md
Normal file
6
docs/benchmarking.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Benchmarking
|
||||
|
||||
Run `cargo bench` in the project `sqlparser_bench` execute the queries.
|
||||
It will report results using the `criterion` library to perform the benchmarking.
|
||||
|
||||
The bench project lives in another crate, to avoid the negative impact on building the `sqlparser` crate.
|
17
sqlparser_bench/Cargo.toml
Normal file
17
sqlparser_bench/Cargo.toml
Normal file
|
@ -0,0 +1,17 @@
|
|||
[package]
|
||||
name = "sqlparser_bench"
|
||||
version = "0.1.0"
|
||||
authors = ["Dandandan <danielheres@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
sqlparser = { path = "../", version = "0.5.1-alpha-0" }
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = {version = "0.3"}
|
||||
|
||||
[[bench]]
|
||||
name = "sqlparser_bench"
|
||||
harness = false
|
43
sqlparser_bench/benches/sqlparser_bench.rs
Normal file
43
sqlparser_bench/benches/sqlparser_bench.rs
Normal file
|
@ -0,0 +1,43 @@
|
|||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use criterion::{criterion_group, criterion_main, Criterion};
|
||||
use sqlparser::dialect::GenericDialect;
|
||||
use sqlparser::parser::Parser;
|
||||
|
||||
fn basic_queries(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("sqlparser-rs parsing benchmark");
|
||||
let dialect = GenericDialect {};
|
||||
|
||||
let string = "SELECT * FROM table WHERE 1 = 1";
|
||||
group.bench_function("sqlparser::select", |b| {
|
||||
b.iter(|| Parser::parse_sql(&dialect, string));
|
||||
});
|
||||
|
||||
let with_query = "
|
||||
WITH derived AS (
|
||||
SELECT MAX(a) AS max_a,
|
||||
COUNT(b) AS b_num,
|
||||
user_id
|
||||
FROM TABLE
|
||||
GROUP BY user_id
|
||||
)
|
||||
SELECT * FROM table
|
||||
LEFT JOIN derived USING (user_id)
|
||||
";
|
||||
group.bench_function("sqlparser::with_select", |b| {
|
||||
b.iter(|| Parser::parse_sql(&dialect, with_query));
|
||||
});
|
||||
}
|
||||
|
||||
criterion_group!(benches, basic_queries);
|
||||
criterion_main!(benches);
|
7
sqlparser_bench/src/lib.rs
Normal file
7
sqlparser_bench/src/lib.rs
Normal file
|
@ -0,0 +1,7 @@
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn it_works() {
|
||||
assert_eq!(2 + 2, 4);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue