Skip to content

Commit f66844d

Browse files
authored
Merge pull request diesel-rs#3111 from weiznich/bench_updates
Bench updates
2 parents 2476a76 + f1a8588 commit f66844d

7 files changed

Lines changed: 83 additions & 76 deletions

File tree

diesel/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ edition = "2018"
1616
byteorder = { version = "1.0", optional = true }
1717
chrono = { version = "0.4.19", optional = true, default-features = false, features = ["clock", "std"] }
1818
libc = { version = "0.2.0", optional = true }
19-
libsqlite3-sys = { version = ">=0.17.2, <0.24.0", optional = true, features = ["bundled_bindings"] }
19+
libsqlite3-sys = { version = ">=0.17.2, <0.25.0", optional = true, features = ["bundled_bindings"] }
2020
mysqlclient-sys = { version = "0.2.5", optional = true }
2121
pq-sys = { version = "0.4.0", optional = true }
2222
quickcheck = { version = "1.0.3", optional = true }

diesel_bench/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ sqlx = {version = "0.5.0", features = ["runtime-tokio-rustls"], optional = true}
1616
tokio = {version = "1", optional = true}
1717
rusqlite = {version = "0.26", optional = true}
1818
rust_postgres = {version = "0.19", optional = true, package = "postgres"}
19-
rust_mysql = {version = "21.0.1", optional = true, package = "mysql"}
19+
rust_mysql = {version = "22.1", optional = true, package = "mysql"}
2020
rustorm = {version = "0.20", optional = true}
2121
rustorm_dao = {version = "0.20", optional = true}
2222
quaint = {version = "=0.2.0-alpha.13", optional = true}
2323
serde = {version = "1", optional = true, features = ["derive"]}
24-
sea-orm = {version = "0.5", optional = true, features = ["runtime-tokio-rustls"]}
24+
sea-orm = {version = "0.7", optional = true, features = ["runtime-tokio-rustls"]}
2525
futures = {version = "0.3", optional = true}
2626
diesel-async = {git = "https://github.com/weiznich/diesel_async", rev = "7052fe7ab02045c21d8a4a7ea8554a28d486fe59", optional = true, default-features = false}
2727
criterion-perf-events = { version = "0.2", optional = true}

diesel_bench/benches/diesel_async_benches.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,19 +123,24 @@ async fn connection() -> TestConnection {
123123
let mut conn = diesel_async::AsyncMysqlConnection::establish(&connection_url)
124124
.await
125125
.unwrap();
126-
AsyncConnection::execute(&mut conn, "SET FOREIGN_KEY_CHECKS = 0;")
126+
diesel::sql_query("SET FOREIGN_KEY_CHECKS = 0;")
127+
.execute(&mut conn)
127128
.await
128129
.unwrap();
129-
AsyncConnection::execute(&mut conn, "TRUNCATE TABLE comments")
130+
diesel::sql_query("TRUNCATE TABLE comments")
131+
.execute(&mut conn)
130132
.await
131133
.unwrap();
132-
AsyncConnection::execute(&mut conn, "TRUNCATE TABLE posts")
134+
diesel::sql_query("TRUNCATE TABLE posts")
135+
.execute(&mut conn)
133136
.await
134137
.unwrap();
135-
AsyncConnection::execute(&mut conn, "TRUNCATE TABLE users")
138+
diesel::sql_query("TRUNCATE TABLE users")
139+
.execute(&mut conn)
136140
.await
137141
.unwrap();
138-
AsyncConnection::execute(&mut conn, "SET FOREIGN_KEY_CHECKS = 1;")
142+
diesel::sql_query("SET FOREIGN_KEY_CHECKS = 1;")
143+
.execute(&mut conn)
139144
.await
140145
.unwrap();
141146
conn
@@ -150,13 +155,16 @@ async fn connection() -> TestConnection {
150155
let mut conn = diesel_async::AsyncPgConnection::establish(&connection_url)
151156
.await
152157
.unwrap();
153-
AsyncConnection::execute(&mut conn, "TRUNCATE TABLE comments CASCADE")
158+
diesel::sql_query("TRUNCATE TABLE comments CASCADE")
159+
.execute(&mut conn)
154160
.await
155161
.unwrap();
156-
AsyncConnection::execute(&mut conn, "TRUNCATE TABLE posts CASCADE")
162+
diesel::sql_query("TRUNCATE TABLE posts CASCADE")
163+
.execute(&mut conn)
157164
.await
158165
.unwrap();
159-
AsyncConnection::execute(&mut conn, "TRUNCATE TABLE users CASCADE")
166+
diesel::sql_query("TRUNCATE TABLE users CASCADE")
167+
.execute(&mut conn)
160168
.await
161169
.unwrap();
162170
conn

diesel_bench/benches/rusqlite_benches.rs

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -77,35 +77,50 @@ fn connection() -> Connection {
7777
conn
7878
}
7979

80-
fn insert_users(
80+
fn insert_users<'a>(
8181
size: usize,
82-
conn: &mut Connection,
82+
conn: &'a Connection,
83+
stmt_handle: &mut Option<rusqlite::Statement<'a>>,
8384
hair_color_init: impl Fn(usize) -> Option<String>,
8485
) {
8586
if size == 0 {
8687
return;
8788
}
89+
let mut params = Vec::<(String, Option<String>)>::with_capacity(size);
8890

89-
let conn = conn.transaction().unwrap();
91+
let stmt = if let Some(stmt) = stmt_handle {
92+
for x in 0..size {
93+
params.push((format!("User {}", x), hair_color_init(x)));
94+
}
9095

91-
{
92-
let mut query = conn
93-
.prepare("INSERT INTO users (name, hair_color) VALUES (?, ?)")
94-
.unwrap();
96+
stmt
97+
} else {
98+
let mut query = String::from("INSERT INTO users (name, hair_color) VALUES");
9599

96100
for x in 0..size {
97-
query
98-
.execute(params!(format!("User {}", x), hair_color_init(x)))
99-
.unwrap();
101+
if x != 0 {
102+
query += ",";
103+
}
104+
query += "(?, ?)";
105+
params.push((format!("User {}", x), hair_color_init(x)));
100106
}
101-
}
107+
let query = conn.prepare(&query).unwrap();
102108

103-
conn.commit().unwrap();
109+
*stmt_handle = Some(query);
110+
stmt_handle.as_mut().unwrap()
111+
};
112+
113+
let params: Vec<_> = params
114+
.iter()
115+
.flat_map(|&(ref name, ref hair_color)| [name as &dyn rusqlite::ToSql, hair_color as _])
116+
.collect();
117+
stmt.execute(&params as &[_]).unwrap();
104118
}
105119

106120
pub fn bench_trivial_query_by_id(b: &mut Bencher, size: usize) {
107-
let mut conn = connection();
108-
insert_users(size, &mut conn, |_| None);
121+
let conn = connection();
122+
let mut insert_stmt = None;
123+
insert_users(size, &conn, &mut insert_stmt, |_| None);
109124

110125
let mut query = conn
111126
.prepare("SELECT id, name, hair_color FROM users")
@@ -120,8 +135,9 @@ pub fn bench_trivial_query_by_id(b: &mut Bencher, size: usize) {
120135
}
121136

122137
pub fn bench_trivial_query_by_name(b: &mut Bencher, size: usize) {
123-
let mut conn = connection();
124-
insert_users(size, &mut conn, |_| None);
138+
let conn = connection();
139+
let mut insert_stmt = None;
140+
insert_users(size, &conn, &mut insert_stmt, |_| None);
125141

126142
let mut query = conn
127143
.prepare("SELECT id, name, hair_color FROM users")
@@ -136,8 +152,9 @@ pub fn bench_trivial_query_by_name(b: &mut Bencher, size: usize) {
136152
}
137153

138154
pub fn bench_medium_complex_query_by_id(b: &mut Bencher, size: usize) {
139-
let mut conn = connection();
140-
insert_users(size, &mut conn, |i| {
155+
let conn = connection();
156+
let mut insert_stmt = None;
157+
insert_users(size, &conn, &mut insert_stmt, |i| {
141158
Some(if i % 2 == 0 { "black" } else { "brown" }.into())
142159
});
143160

@@ -168,8 +185,9 @@ pub fn bench_medium_complex_query_by_id(b: &mut Bencher, size: usize) {
168185
}
169186

170187
pub fn bench_medium_complex_query_by_name(b: &mut Bencher, size: usize) {
171-
let mut conn = connection();
172-
insert_users(size, &mut conn, |i| {
188+
let conn = connection();
189+
let mut insert_stmt = None;
190+
insert_users(size, &conn, &mut insert_stmt, |i| {
173191
Some(if i % 2 == 0 { "black" } else { "brown" }.into())
174192
});
175193

@@ -204,15 +222,20 @@ pub fn bench_medium_complex_query_by_name(b: &mut Bencher, size: usize) {
204222
}
205223

206224
pub fn bench_insert(b: &mut Bencher, size: usize) {
207-
let mut conn = connection();
225+
let conn = connection();
208226

209-
b.iter(|| insert_users(size, &mut conn, |_| Some(String::from("hair_color"))))
227+
let mut insert_stmt = None;
228+
b.iter(|| {
229+
insert_users(size, &conn, &mut insert_stmt, |_| {
230+
Some(String::from("hair_color"))
231+
})
232+
})
210233
}
211234

212235
pub fn loading_associations_sequentially(b: &mut Bencher) {
213-
let mut conn = connection();
214-
215-
insert_users(9, &mut conn, |i| {
236+
let conn = connection();
237+
let mut insert_stmt = None;
238+
insert_users(9, &conn, &mut insert_stmt, |i| {
216239
Some(if i % 2 == 0 {
217240
String::from("black")
218241
} else {
@@ -231,7 +254,6 @@ pub fn loading_associations_sequentially(b: &mut Bencher) {
231254
};
232255

233256
{
234-
let conn = conn.transaction().unwrap();
235257
{
236258
let mut insert_posts = conn
237259
.prepare("INSERT INTO posts(title, user_id, body) VALUES (?, ?, ?)")
@@ -249,8 +271,6 @@ pub fn loading_associations_sequentially(b: &mut Bencher) {
249271
}
250272
}
251273
}
252-
253-
conn.commit().unwrap();
254274
}
255275

256276
let all_posts = {
@@ -264,7 +284,6 @@ pub fn loading_associations_sequentially(b: &mut Bencher) {
264284
};
265285

266286
{
267-
let conn = conn.transaction().unwrap();
268287
{
269288
let mut insert_comments = conn
270289
.prepare("INSERT INTO comments(text, post_id) VALUES (?, ?)")
@@ -281,8 +300,6 @@ pub fn loading_associations_sequentially(b: &mut Bencher) {
281300
}
282301
}
283302
}
284-
285-
conn.commit().unwrap();
286303
}
287304

288305
let mut user_query = conn

diesel_bench/benches/sqlx_benches.rs

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -178,46 +178,28 @@ async fn insert_users(
178178
conn: &mut Connection,
179179
hair_color_init: impl Fn(usize) -> Option<String>,
180180
) {
181-
use sqlx::Connection;
182-
183181
if size == 0 {
184182
return;
185183
}
186184

187-
if cfg!(feature = "sqlite") {
188-
let query = String::from("INSERT INTO users (name, hair_color) VALUES(?, ?)");
189-
190-
let mut conn = Connection::begin(conn).await.unwrap();
191-
for x in 0..size {
192-
sqlx::query(&query)
193-
.bind(format!("User {}", x))
194-
.bind(hair_color_init(x))
195-
.execute(&mut *conn)
196-
.await
197-
.unwrap();
198-
}
199-
200-
conn.commit().await.unwrap();
201-
} else {
202-
let mut query = String::from("INSERT INTO users (name, hair_color) VALUES");
185+
let mut query = String::from("INSERT INTO users (name, hair_color) VALUES");
203186

204-
for x in 0..size {
205-
let (bind_a, bind_b) = if cfg!(feature = "mysql") {
206-
("?".into(), "?".into())
207-
} else {
208-
(format!("${}", 2 * x + 1), format!("${}", 2 * x + 2))
209-
};
210-
query += &format!("{} ({}, {})", if x == 0 { "" } else { "," }, bind_a, bind_b);
211-
}
212-
213-
let mut query = sqlx::query(&query);
187+
for x in 0..size {
188+
let (bind_a, bind_b) = if cfg!(any(feature = "mysql", feature = "sqlite")) {
189+
("?".into(), "?".into())
190+
} else {
191+
(format!("${}", 2 * x + 1), format!("${}", 2 * x + 2))
192+
};
193+
query += &format!("{} ({}, {})", if x == 0 { "" } else { "," }, bind_a, bind_b);
194+
}
214195

215-
for x in 0..size {
216-
query = query.bind(format!("User {}", x)).bind(hair_color_init(x));
217-
}
196+
let mut query = sqlx::query(&query);
218197

219-
query.execute(conn).await.unwrap();
198+
for x in 0..size {
199+
query = query.bind(format!("User {}", x)).bind(hair_color_init(x));
220200
}
201+
202+
query.execute(conn).await.unwrap();
221203
}
222204

223205
pub fn bench_trivial_query_query_as_macro(b: &mut Bencher, size: usize) {

diesel_cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ heck = "0.3.1"
2727
serde = { version = "1.0.0", features = ["derive"] }
2828
toml = "0.5"
2929
url = { version = "2.1.0", optional = true }
30-
libsqlite3-sys = { version = ">=0.17.2, <0.24.0", optional = true, features = ["min_sqlite_version_3_7_16"] }
30+
libsqlite3-sys = { version = ">=0.17.2, <0.25.0", optional = true }
3131
diffy = "0.2.0"
3232
regex = "1.0.6"
3333
serde_regex = "1.1"

diesel_tests/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ serde_json = { version=">=0.9, <2.0" }
1919
ipnetwork = ">=0.12.2, <0.19.0"
2020
bigdecimal = ">= 0.0.13, < 0.4.0"
2121
rand = "0.8.4"
22-
libsqlite3-sys = { version = "0.23", optional = true }
22+
libsqlite3-sys = { version = "0.24", optional = true }
2323

2424
[features]
2525
default = []

0 commit comments

Comments
 (0)