11#![ feature( custom_derive, plugin, custom_attribute, test) ]
22#![ plugin( diesel_codegen, dotenv_macros) ]
3+
4+ #![ allow( non_snake_case) ]
5+
36#[ macro_use]
47extern crate diesel;
58extern crate test;
@@ -22,90 +25,103 @@ fn connection() -> TestConnection {
2225 schema:: connection ( )
2326}
2427
25- #[ bench]
26- fn bench_selecting_0_rows_with_trivial_query ( b : & mut Bencher ) {
27- let conn = connection ( ) ;
28-
29- b. iter ( || {
30- users:: table. load :: < User > ( & conn) . unwrap ( ) ;
31- } )
32- }
33-
34- #[ bench]
35- fn bench_selecting_10k_rows_with_trivial_query ( b : & mut Bencher ) {
36- let conn = connection ( ) ;
37- let data: Vec < _ > = ( 0 ..10_000 ) . map ( |i| {
38- NewUser :: new ( & format ! ( "User {}" , i) , None )
39- } ) . collect ( ) ;
40- batch_insert ( & data, users:: table, & conn) ;
41-
42- b. iter ( || {
43- users:: table. load :: < User > ( & conn) . unwrap ( )
44- } )
45- }
46-
47- #[ bench]
48- fn bench_selecting_10k_rows_with_trivial_query_boxed ( b : & mut Bencher ) {
49- let conn = connection ( ) ;
50- let data: Vec < _ > = ( 0 ..10_000 ) . map ( |i| {
51- NewUser :: new ( & format ! ( "User {}" , i) , None )
52- } ) . collect ( ) ;
53- batch_insert ( & data, users:: table, & conn) ;
54-
55- b. iter ( || {
56- users:: table. into_boxed ( ) . load :: < User > ( & conn) . unwrap ( )
57- } )
58- }
59-
60-
61- #[ bench]
62- fn bench_selecting_0_rows_with_medium_complex_query ( b : & mut Bencher ) {
63- let conn = connection ( ) ;
64-
65- b. iter ( || {
66- use schema:: users:: dsl:: * ;
67- let target = users. left_outer_join ( posts:: table)
68- . filter ( hair_color. eq ( "black" ) )
69- . order ( name. desc ( ) ) ;
70- target. load :: < ( User , Option < Post > ) > ( & conn) . unwrap ( )
71- } )
28+ macro_rules! bench_trivial_query {
29+ ( $n: expr, $name: ident, $name_boxed: ident) => {
30+ #[ bench]
31+ fn $name( b: & mut Bencher ) {
32+ let conn = connection( ) ;
33+
34+ let data: Vec <_> = ( 0 ..$n) . map( |i| {
35+ NewUser :: new( & format!( "User {}" , i) , None )
36+ } ) . collect( ) ;
37+ batch_insert( & data, users:: table, & conn) ;
38+
39+ b. iter( || {
40+ users:: table. load:: <User >( & conn) . unwrap( )
41+ } )
42+ }
43+
44+ #[ bench]
45+ fn $name_boxed( b: & mut Bencher ) {
46+ let conn = connection( ) ;
47+
48+ let data: Vec <_> = ( 0 ..$n) . map( |i| {
49+ NewUser :: new( & format!( "User {}" , i) , None )
50+ } ) . collect( ) ;
51+ batch_insert( & data, users:: table, & conn) ;
52+
53+ b. iter( || {
54+ users:: table. into_boxed( ) . load:: <User >( & conn) . unwrap( )
55+ } )
56+ }
57+ } ;
7258}
7359
74- #[ bench]
75- fn bench_selecting_10k_rows_with_medium_complex_query ( b : & mut Bencher ) {
76- let conn = connection ( ) ;
77-
78- let data: Vec < _ > = ( 0 ..10_000 ) . map ( |i| {
79- let hair_color = if i % 2 == 0 { "black" } else { "brown" } ;
80- NewUser :: new ( & format ! ( "User {}" , i) , Some ( hair_color) )
81- } ) . collect ( ) ;
82- batch_insert ( & data, users:: table, & conn) ;
83-
84- b. iter ( || {
85- use schema:: users:: dsl:: * ;
86- let target = users. left_outer_join ( posts:: table)
87- . filter ( hair_color. eq ( "black" ) )
88- . order ( name. desc ( ) ) ;
89- target. load :: < ( User , Option < Post > ) > ( & conn) . unwrap ( )
90- } )
60+ bench_trivial_query ! ( 0 ,
61+ bench_trivial_query_selecting______0_rows, bench_trivial_query_selecting______0_rows_boxed) ;
62+ bench_trivial_query ! ( 1 ,
63+ bench_trivial_query_selecting______1_row, bench_trivial_query_selecting______1_row_boxed) ;
64+ bench_trivial_query ! ( 10 ,
65+ bench_trivial_query_selecting_____10_rows, bench_trivial_query_selecting_____10_rows_boxed) ;
66+ bench_trivial_query ! ( 100 ,
67+ bench_trivial_query_selecting____100_rows, bench_trivial_query_selecting____100_rows_boxed) ;
68+ bench_trivial_query ! ( 1_000 ,
69+ bench_trivial_query_selecting__1_000_rows, bench_trivial_query_selecting__1_000_rows_boxed) ;
70+ bench_trivial_query ! ( 10_000 ,
71+ bench_trivial_query_selecting_10_000_rows, bench_trivial_query_selecting_10_000_rows_boxed) ;
72+
73+ macro_rules! bench_medium_complex_query {
74+ ( $n: expr, $name: ident, $name_boxed: ident) => {
75+ #[ bench]
76+ fn $name( b: & mut Bencher ) {
77+ let conn = connection( ) ;
78+
79+ let data: Vec <_> = ( 0 ..$n) . map( |i| {
80+ let hair_color = if i % 2 == 0 { "black" } else { "brown" } ;
81+ NewUser :: new( & format!( "User {}" , i) , Some ( hair_color) )
82+ } ) . collect( ) ;
83+ batch_insert( & data, users:: table, & conn) ;
84+
85+ b. iter( || {
86+ use schema:: users:: dsl:: * ;
87+ let target = users. left_outer_join( posts:: table)
88+ . filter( hair_color. eq( "black" ) )
89+ . order( name. desc( ) ) ;
90+ target. load:: <( User , Option <Post >) >( & conn) . unwrap( )
91+ } )
92+ }
93+
94+ #[ bench]
95+ fn $name_boxed( b: & mut Bencher ) {
96+ let conn = connection( ) ;
97+
98+ let data: Vec <_> = ( 0 ..$n) . map( |i| {
99+ let hair_color = if i % 2 == 0 { "black" } else { "brown" } ;
100+ NewUser :: new( & format!( "User {}" , i) , Some ( hair_color) )
101+ } ) . collect( ) ;
102+ batch_insert( & data, users:: table, & conn) ;
103+
104+ b. iter( || {
105+ use schema:: users:: dsl:: * ;
106+ let target = users. left_outer_join( posts:: table)
107+ . filter( hair_color. eq( "black" ) )
108+ . order( name. desc( ) )
109+ . into_boxed( ) ;
110+ target. load:: <( User , Option <Post >) >( & conn) . unwrap( )
111+ } )
112+ }
113+ } ;
91114}
92115
93- #[ bench]
94- fn bench_selecting_10k_rows_with_medium_complex_query_boxed ( b : & mut Bencher ) {
95- let conn = connection ( ) ;
96-
97- let data: Vec < _ > = ( 0 ..10_000 ) . map ( |i| {
98- let hair_color = if i % 2 == 0 { "black" } else { "brown" } ;
99- NewUser :: new ( & format ! ( "User {}" , i) , Some ( hair_color) )
100- } ) . collect ( ) ;
101- batch_insert ( & data, users:: table, & conn) ;
102-
103- b. iter ( || {
104- use schema:: users:: dsl:: * ;
105- let target = users. left_outer_join ( posts:: table)
106- . filter ( hair_color. eq ( "black" ) )
107- . order ( name. desc ( ) )
108- . into_boxed ( ) ;
109- target. load :: < ( User , Option < Post > ) > ( & conn) . unwrap ( )
110- } )
111- }
116+ bench_medium_complex_query ! ( 0 ,
117+ bench_medium_complex_query_selecting______0_rows, bench_medium_complex_query_selecting______0_rows_boxed) ;
118+ bench_medium_complex_query ! ( 1 ,
119+ bench_medium_complex_query_selecting______1_row, bench_medium_complex_query_selecting______1_row_boxed) ;
120+ bench_medium_complex_query ! ( 10 ,
121+ bench_medium_complex_query_selecting_____10_rows, bench_medium_complex_query_selecting_____10_rows_boxed) ;
122+ bench_medium_complex_query ! ( 100 ,
123+ bench_medium_complex_query_selecting____100_rows, bench_medium_complex_query_selecting____100_rows_boxed) ;
124+ bench_medium_complex_query ! ( 1_000 ,
125+ bench_medium_complex_query_selecting__1_000_rows, bench_medium_complex_query_selecting__1_000_rows_boxed) ;
126+ bench_medium_complex_query ! ( 10_000 ,
127+ bench_medium_complex_query_selecting_10_000_rows, bench_medium_complex_query_selecting_10_000_rows_boxed) ;
0 commit comments