1+ use  core:: fmt; 
12use  std:: hint:: black_box; 
23
34use  criterion:: { Criterion ,  criterion_group,  criterion_main} ; 
@@ -10,7 +11,25 @@ pub enum Char {
1011    Character , 
1112} 
1213
13- fn  small_type ( value :  i32 )  -> SelectStatement  { 
14+ fn  small_raw ( value :  i32 )  -> Result < String ,  fmt:: Error >  { 
15+     let  mut  str = String :: new ( ) ; 
16+     str. write_str ( "SELECT " ) ?; 
17+     str. write_str ( & Char :: Id . into_iden ( ) . to_string ( ) ) ?; 
18+     str. write_str ( " FROM " ) ?; 
19+     str. write_str ( & Char :: Table . into_iden ( ) . to_string ( ) ) ?; 
20+     str. write_str ( " WHERE " ) ?; 
21+     for  _ in  black_box ( 0 ..9 )  { 
22+         str. write_str ( & Char :: Id . into_iden ( ) . to_string ( ) ) ?; 
23+         str. write_str ( " = " ) ?; 
24+         write ! ( str ,  "{value}" ) ?; 
25+         str. write_str ( " AND " ) ?; 
26+     } 
27+     str. write_str ( "1=1" ) ?; 
28+ 
29+     Ok ( str) 
30+ } 
31+ 
32+ fn  small_select ( value :  i32 )  -> SelectStatement  { 
1433    Query :: select ( ) 
1534        . column ( Char :: Character ) 
1635        . from ( Char :: Table ) 
@@ -27,7 +46,27 @@ fn small_type(value: i32) -> SelectStatement {
2746        . to_owned ( ) 
2847} 
2948
30- fn  large_type ( value :  jiff:: Zoned )  -> SelectStatement  { 
49+ fn  large_raw ( value :  & jiff:: Zoned )  -> Result < String ,  fmt:: Error >  { 
50+     let  mut  str = String :: new ( ) ; 
51+     str. write_str ( "SELECT " ) ?; 
52+     str. write_str ( & Char :: Character . into_iden ( ) . to_string ( ) ) ?; 
53+     str. write_str ( " FROM " ) ?; 
54+     str. write_str ( & Char :: Table . into_iden ( ) . to_string ( ) ) ?; 
55+     str. write_str ( " WHERE " ) ?; 
56+ 
57+     for  _ in  0 ..9  { 
58+         str. write_str ( & Char :: Character . into_iden ( ) . to_string ( ) ) ?; 
59+         str. write_str ( " = '" ) ?; 
60+         write ! ( str ,  "{value}" ) ?; 
61+         str. write_str ( "' AND " ) ?; 
62+     } 
63+ 
64+     str. write_str ( "1=1" ) ?; 
65+ 
66+     Ok ( str) 
67+ } 
68+ 
69+ fn  large_select ( value :  jiff:: Zoned )  -> SelectStatement  { 
3170    Query :: select ( ) 
3271        . column ( Char :: Character ) 
3372        . from ( Char :: Table ) 
@@ -49,14 +88,21 @@ fn criterion_benchmark(c: &mut Criterion) {
4988    let  value = black_box ( jiff:: Zoned :: now ( ) ) ; 
5089
5190    group. bench_function ( "select_construction/small" ,  |b| { 
52-         b. iter ( || small_type ( black_box ( 123 ) ) ) 
91+         b. iter ( || small_select ( black_box ( 123 ) ) ) 
92+     } ) ; 
93+     group. bench_function ( "select_construction/small/raw" ,  |b| { 
94+         b. iter ( || small_raw ( black_box ( 123 ) ) . unwrap ( ) ) 
5395    } ) ; 
5496
5597    group. bench_function ( "select_construction/large" ,  |b| { 
56-         b. iter ( || large_type ( value. clone ( ) ) ) 
98+         b. iter ( || large_select ( value. clone ( ) ) ) 
99+     } ) ; 
100+ 
101+     group. bench_function ( "select_construction/large/raw" ,  |b| { 
102+         b. iter ( || large_raw ( & value) . unwrap ( ) ) 
57103    } ) ; 
58104
59-     let  select_small = black_box ( small_type ( black_box ( 123 ) ) ) ; 
105+     let  select_small = black_box ( small_select ( black_box ( 123 ) ) ) ; 
60106    group. bench_function ( "select_and_build/small/mysql" ,  |b| { 
61107        b. iter ( || select_small. build ( MysqlQueryBuilder ) ) 
62108    } ) ; 
@@ -76,7 +122,7 @@ fn criterion_benchmark(c: &mut Criterion) {
76122        b. iter ( || select_small. to_string ( SqliteQueryBuilder ) ) 
77123    } ) ; 
78124
79-     let  select_large = black_box ( large_type ( value) ) ; 
125+     let  select_large = black_box ( large_select ( value) ) ; 
80126    group. bench_function ( "select_and_build/large/mysql" ,  |b| { 
81127        b. iter ( || select_large. build ( MysqlQueryBuilder ) ) 
82128    } ) ; 
0 commit comments