Skip to content

Commit 5419478

Browse files
committed
Update to Diesel master
Diesel's current master branch is likely to be reasonably representative of what 1.0 will look like from an API perspective. If there's any other parts of the code that we dislike and want to improve the API for, now is the time to speak up! The test changes are due to some deadlocks that I'm seeing now (which should have always been happening, I suspect some perf characteristic has changed somewhere)
1 parent 3bebaf1 commit 5419478

23 files changed

+337
-416
lines changed

Cargo.lock

Lines changed: 16 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,7 @@ diesel = { version = "0.16.0", features = ["postgres"] }
8787
[features]
8888
unstable = []
8989
lint = ["clippy"]
90+
91+
[replace]
92+
"diesel:0.16.0" = { git = "https://github.com/diesel-rs/diesel.git" }
93+
"diesel_codegen:0.16.0" = { git = "https://github.com/diesel-rs/diesel.git" }

src/badge.rs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,7 @@ impl Badge {
8080
krate: &Crate,
8181
badges: Option<&'a HashMap<String, HashMap<String, String>>>,
8282
) -> QueryResult<Vec<&'a str>> {
83-
use diesel::{delete, insert};
84-
85-
#[derive(Insertable, Debug)]
86-
#[table_name = "badges"]
87-
struct NewBadge<'a> {
88-
crate_id: i32,
89-
badge_type: &'a str,
90-
attributes: serde_json::Value,
91-
}
83+
use diesel::{delete, insert_into};
9284

9385
let mut invalid_badges = vec![];
9486
let mut new_badges = vec![];
@@ -99,20 +91,22 @@ impl Badge {
9991

10092
let json = json!({"badge_type": k, "attributes": attributes_json});
10193
if serde_json::from_value::<Badge>(json).is_ok() {
102-
new_badges.push(NewBadge {
103-
crate_id: krate.id,
104-
badge_type: &**k,
105-
attributes: attributes_json,
106-
});
94+
new_badges.push((
95+
badges::crate_id.eq(krate.id),
96+
badges::badge_type.eq(k),
97+
badges::attributes.eq(attributes_json),
98+
));
10799
} else {
108100
invalid_badges.push(&**k);
109101
}
110102
}
111103
}
112104

113105
conn.transaction(|| {
114-
delete(badges::table.filter(badges::crate_id.eq(krate.id))).execute(conn)?;
115-
insert(&new_badges).into(badges::table).execute(conn)?;
106+
delete(badges::table)
107+
.filter(badges::crate_id.eq(krate.id))
108+
.execute(conn)?;
109+
insert_into(badges::table).values(&new_badges).execute(conn)?;
116110
Ok(invalid_badges)
117111
})
118112
}

src/bin/populate.rs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,9 @@
77
#![deny(warnings)]
88

99
extern crate cargo_registry;
10-
extern crate chrono;
11-
#[macro_use]
1210
extern crate diesel;
13-
#[macro_use]
14-
extern crate diesel_codegen;
1511
extern crate rand;
1612

17-
use chrono::{Duration, NaiveDate, Utc};
1813
use diesel::prelude::*;
1914
use rand::{Rng, StdRng};
2015
use std::env;
@@ -27,6 +22,8 @@ fn main() {
2722
}
2823

2924
fn update(conn: &PgConnection) -> QueryResult<()> {
25+
use diesel::dsl::*;
26+
3027
let ids = env::args()
3128
.skip(1)
3229
.filter_map(|arg| arg.parse::<i32>().ok());
@@ -35,26 +32,16 @@ fn update(conn: &PgConnection) -> QueryResult<()> {
3532
let mut dls = rng.gen_range(5000i32, 10000);
3633

3734
for day in 0..90 {
38-
let moment = Utc::now().date().naive_utc() + Duration::days(-day);
3935
dls += rng.gen_range(-100, 100);
4036

41-
let version_download = VersionDownload {
42-
version_id: id,
43-
downloads: dls,
44-
date: moment,
45-
};
46-
diesel::insert(&version_download)
47-
.into(version_downloads::table)
37+
diesel::insert_into(version_downloads::table)
38+
.values((
39+
version_downloads::version_id.eq(id),
40+
version_downloads::downloads.eq(dls),
41+
version_downloads::date.eq(date(now - day.days())),
42+
))
4843
.execute(conn)?;
4944
}
5045
}
5146
Ok(())
5247
}
53-
54-
#[derive(Insertable)]
55-
#[table_name = "version_downloads"]
56-
struct VersionDownload {
57-
version_id: i32,
58-
downloads: i32,
59-
date: NaiveDate,
60-
}

src/bin/render-readmes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ extern crate url;
2222
use curl::easy::{Easy, List};
2323
use chrono::{TimeZone, Utc};
2424
use diesel::prelude::*;
25-
use diesel::expression::any;
25+
use diesel::dsl::any;
2626
use docopt::Docopt;
2727
use flate2::read::GzDecoder;
2828
use itertools::Itertools;

src/bin/update-downloads.rs

Lines changed: 36 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,9 @@
22

33
extern crate cargo_registry;
44
extern crate chrono;
5-
#[macro_use]
65
extern crate diesel;
7-
#[macro_use]
8-
extern crate diesel_codegen;
96

10-
use chrono::NaiveDate;
117
use diesel::prelude::*;
12-
use diesel::pg::upsert::*;
138
use std::env;
149
use std::time::Duration;
1510

@@ -18,14 +13,6 @@ use cargo_registry::schema::*;
1813

1914
static LIMIT: i64 = 1000;
2015

21-
#[derive(Insertable)]
22-
#[table_name = "crate_downloads"]
23-
struct CrateDownload {
24-
crate_id: i32,
25-
downloads: i32,
26-
date: NaiveDate,
27-
}
28-
2916
#[allow(dead_code)] // dead in tests
3017
fn main() {
3118
let daemon = env::args().nth(1).as_ref().map(|s| &s[..]) == Some("daemon");
@@ -62,7 +49,7 @@ fn update(conn: &PgConnection) -> QueryResult<()> {
6249
}
6350

6451
fn collect(conn: &PgConnection, rows: &[VersionDownload]) -> QueryResult<()> {
65-
use diesel::{insert, update};
52+
use diesel::{insert_into, update};
6653

6754
// Anything older than 24 hours ago will be frozen and will not be queried
6855
// against again.
@@ -93,23 +80,23 @@ fn collect(conn: &PgConnection, rows: &[VersionDownload]) -> QueryResult<()> {
9380
let crate_id = update(versions::table.find(download.version_id))
9481
.set(versions::downloads.eq(versions::downloads + amt))
9582
.returning(versions::crate_id)
96-
.get_result(conn)?;
83+
.get_result::<i32>(conn)?;
9784

9885
// Update the total number of crate downloads
9986
update(crates::table.find(crate_id))
10087
.set(crates::downloads.eq(crates::downloads + amt))
10188
.execute(conn)?;
10289

10390
// Update the total number of crate downloads for today
104-
let crate_download = CrateDownload {
105-
crate_id: crate_id,
106-
downloads: amt,
107-
date: download.date,
108-
};
109-
insert(&crate_download.on_conflict(
110-
(crate_downloads::crate_id, crate_downloads::date),
111-
do_update().set(crate_downloads::downloads.eq(crate_downloads::downloads + amt)),
112-
)).into(crate_downloads::table)
91+
insert_into(crate_downloads::table)
92+
.values((
93+
crate_downloads::crate_id.eq(crate_id),
94+
crate_downloads::downloads.eq(amt),
95+
crate_downloads::date.eq(download.date),
96+
))
97+
.on_conflict(crate_downloads::table.primary_key())
98+
.do_update()
99+
.set(crate_downloads::downloads.eq(crate_downloads::downloads + amt))
113100
.execute(conn)?;
114101
}
115102

@@ -128,7 +115,8 @@ mod test {
128115

129116
use std::collections::HashMap;
130117

131-
use diesel::expression::dsl::sql;
118+
use diesel::dsl::sql;
119+
use diesel::insert_into;
132120
use diesel::types::Integer;
133121
use super::*;
134122
use cargo_registry::env;
@@ -177,35 +165,24 @@ mod test {
177165

178166
#[test]
179167
fn increment() {
168+
use diesel::dsl::*;
169+
180170
let conn = conn();
181171
let user = user(&conn);
182172
let (krate, version) = crate_and_version(&conn, user.id);
183-
// FIXME: Diesel 1.0 can do this:
184-
// insert((version_id.eq(version.id),))
185-
// .into(version_downloads)
186-
// .execute(&conn)
187-
// .unwrap();
188-
// insert((
189-
// version_id.eq(version.id),
190-
// date.eq(now - 1.day()),
191-
// processed.eq(true)
192-
// )).into(version_downloads)
193-
// .execute(&conn)
194-
// .unwrap();
195-
sql::<Integer>(
196-
"INSERT INTO version_downloads \
197-
(version_id)
198-
VALUES ($1)",
199-
).bind::<Integer, _>(version.id)
173+
insert_into(version_downloads::table)
174+
.values(version_downloads::version_id.eq(version.id))
200175
.execute(&conn)
201176
.unwrap();
202-
sql::<Integer>(
203-
"INSERT INTO version_downloads \
204-
(version_id, date, processed)
205-
VALUES ($1, current_date - interval '1 day', true)",
206-
).bind::<Integer, _>(version.id)
177+
insert_into(version_downloads::table)
178+
.values((
179+
version_downloads::version_id.eq(version.id),
180+
version_downloads::date.eq(date(now - 1.day())),
181+
version_downloads::processed.eq(true),
182+
))
207183
.execute(&conn)
208184
.unwrap();
185+
209186
::update(&conn).unwrap();
210187
let version_downloads = versions::table
211188
.find(version.id)
@@ -228,14 +205,19 @@ mod test {
228205

229206
#[test]
230207
fn set_processed_true() {
208+
use diesel::dsl::*;
209+
231210
let conn = conn();
232211
let user = user(&conn);
233212
let (_, version) = crate_and_version(&conn, user.id);
234-
sql::<Integer>(
235-
"INSERT INTO version_downloads \
236-
(version_id, downloads, counted, date, processed)
237-
VALUES ($1, 2, 2, current_date - interval '2 days', false)",
238-
).bind::<Integer, _>(version.id)
213+
insert_into(version_downloads::table)
214+
.values((
215+
version_downloads::version_id.eq(version.id),
216+
version_downloads::downloads.eq(2),
217+
version_downloads::counted.eq(2),
218+
version_downloads::date.eq(date(now - 2.days())),
219+
version_downloads::processed.eq(false),
220+
))
239221
.execute(&conn)
240222
.unwrap();
241223
::update(&conn).unwrap();
@@ -268,7 +250,7 @@ mod test {
268250

269251
#[test]
270252
fn increment_a_little() {
271-
use diesel::expression::dsl::*;
253+
use diesel::dsl::*;
272254
use diesel::update;
273255

274256
let conn = conn();
@@ -330,7 +312,7 @@ mod test {
330312
#[test]
331313
fn set_processed_no_set_updated_at() {
332314
use diesel::update;
333-
use diesel::expression::dsl::*;
315+
use diesel::dsl::*;
334316

335317
let conn = conn();
336318
let user = user(&conn);

0 commit comments

Comments
 (0)