@@ -42,6 +42,46 @@ fn basic_queries(c: &mut Criterion) {
42
42
group. bench_function ( "sqlparser::with_select" , |b| {
43
43
b. iter ( || Parser :: parse_sql ( & dialect, with_query) . unwrap ( ) ) ;
44
44
} ) ;
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
+ } ) ;
45
85
}
46
86
47
87
criterion_group ! ( benches, basic_queries) ;
0 commit comments