Skip to content

Commit 9219e5a

Browse files
898: Port `bin/delete-version` to use Diesel r=carols10cents The changes here were broadly similar to those in `delete-crate`. The child row deletions are no longer needed here, as they cascade in the database. (Arguably neither of these binaries are really needed anymore since it can just be done in the database)
2 parents 8fb4001 + f6ca970 commit 9219e5a

File tree

1 file changed

+16
-27
lines changed

1 file changed

+16
-27
lines changed

src/bin/delete-version.rs

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,29 @@
88
#![deny(warnings)]
99

1010
extern crate cargo_registry;
11-
extern crate postgres;
11+
extern crate diesel;
1212
extern crate time;
1313
extern crate semver;
1414

15+
use diesel::prelude::*;
16+
use diesel::pg::PgConnection;
1517
use std::env;
1618
use std::io;
1719
use std::io::prelude::*;
1820

1921
use cargo_registry::{Crate, Version};
22+
use cargo_registry::schema::versions;
2023

2124
#[allow(dead_code)]
2225
fn main() {
23-
let conn = cargo_registry::db::connect_now_old();
24-
{
25-
let tx = conn.transaction().unwrap();
26-
delete(&tx);
27-
tx.set_commit();
28-
tx.finish().unwrap();
29-
}
26+
let conn = cargo_registry::db::connect_now().unwrap();
27+
conn.transaction::<_, diesel::result::Error, _>(|| {
28+
delete(&conn);
29+
Ok(())
30+
}).unwrap()
3031
}
3132

32-
fn delete(tx: &postgres::transaction::Transaction) {
33+
fn delete(conn: &PgConnection) {
3334
let name = match env::args().nth(1) {
3435
None => {
3536
println!("needs a crate-name argument");
@@ -44,11 +45,11 @@ fn delete(tx: &postgres::transaction::Transaction) {
4445
}
4546
Some(s) => s,
4647
};
47-
let version = semver::Version::parse(&version).unwrap();
4848

49-
let krate = Crate::find_by_name(tx, &name).unwrap();
50-
let v = Version::find_by_num(tx, krate.id, &version)
51-
.unwrap()
49+
let krate = Crate::by_name(&name).first::<Crate>(conn).unwrap();
50+
let v = Version::belonging_to(&krate)
51+
.filter(versions::num.eq(&version))
52+
.first::<Version>(conn)
5253
.unwrap();
5354
print!(
5455
"Are you sure you want to delete {}#{} ({}) [y/N]: ",
@@ -64,20 +65,8 @@ fn delete(tx: &postgres::transaction::Transaction) {
6465
}
6566

6667
println!("deleting version {} ({})", v.num, v.id);
67-
let n = tx.execute(
68-
"DELETE FROM version_downloads WHERE version_id = $1",
69-
&[&v.id],
70-
).unwrap();
71-
println!(" {} download records deleted", n);
72-
let n = tx.execute(
73-
"DELETE FROM version_authors WHERE version_id = $1",
74-
&[&v.id],
75-
).unwrap();
76-
println!(" {} author records deleted", n);
77-
let n = tx.execute("DELETE FROM dependencies WHERE version_id = $1", &[&v.id])
78-
.unwrap();
79-
println!(" {} dependencies deleted", n);
80-
tx.execute("DELETE FROM versions WHERE id = $1", &[&v.id])
68+
diesel::delete(versions::table.find(&v.id))
69+
.execute(conn)
8170
.unwrap();
8271

8372
print!("commit? [y/N]: ");

0 commit comments

Comments
 (0)