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 . quoted ( ) ) ?;
18+ str. write_str ( " FROM " ) ?;
19+ str. write_str ( & Char :: Table . quoted ( ) ) ?;
20+ str. write_str ( " WHERE " ) ?;
21+ for _ in black_box ( 0 ..9 ) {
22+ str. write_str ( & Char :: Id . quoted ( ) ) ?;
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 . quoted ( ) ) ?;
53+ str. write_str ( " FROM " ) ?;
54+ str. write_str ( & Char :: Table . quoted ( ) ) ?;
55+ str. write_str ( " WHERE " ) ?;
56+
57+ for _ in 0 ..9 {
58+ str. write_str ( & Char :: Character . quoted ( ) ) ?;
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