@@ -42,6 +42,46 @@ fn basic_queries(c: &mut Criterion) {
4242 group. bench_function ( "sqlparser::with_select" , |b| {
4343 b. iter ( || Parser :: parse_sql ( & dialect, with_query) . unwrap ( ) ) ;
4444 } ) ;
45+
46+ let large_statement = {
47+ let expressions = ( 0 ..1000 )
48+ . map ( |n| format ! ( "FN_{}(COL_{})" , n, n) )
49+ . collect :: < Vec < _ > > ( )
50+ . join ( ", " ) ;
51+ let tables = ( 0 ..1000 )
52+ . map ( |n| format ! ( "TABLE_{}" , n) )
53+ . collect :: < Vec < _ > > ( )
54+ . join ( " JOIN " ) ;
55+ let where_condition = ( 0 ..1000 )
56+ . map ( |n| format ! ( "COL_{} = {}" , n, n) )
57+ . collect :: < Vec < _ > > ( )
58+ . join ( " OR " ) ;
59+ let order_condition = ( 0 ..1000 )
60+ . map ( |n| format ! ( "COL_{} DESC" , n) )
61+ . collect :: < Vec < _ > > ( )
62+ . join ( ", " ) ;
63+
64+ format ! (
65+ "SELECT {} FROM {} WHERE {} ORDER BY {}" ,
66+ expressions, tables, where_condition, order_condition
67+ )
68+ } ;
69+
70+ group. bench_function ( "parse_large_statement" , |b| {
71+ b. iter ( || Parser :: parse_sql ( & dialect, criterion:: black_box ( large_statement. as_str ( ) ) ) ) ;
72+ } ) ;
73+
74+ let large_statement = Parser :: parse_sql ( & dialect, large_statement. as_str ( ) )
75+ . unwrap ( )
76+ . pop ( )
77+ . unwrap ( ) ;
78+
79+ group. bench_function ( "format_large_statement" , |b| {
80+ b. iter ( || {
81+ let formatted_query = large_statement. to_string ( ) ;
82+ assert_eq ! ( formatted_query, large_statement) ;
83+ } ) ;
84+ } ) ;
4585}
4686
4787criterion_group ! ( benches, basic_queries) ;
0 commit comments