Skip to content

Commit 3378e53

Browse files
Merge pull request #882 from jtgeibel/prefer-queryresult-over-cargoresult
Use QueryResult in place of CargoResult where possible and remove some unused code
2 parents c1c7efb + 5ce0e2d commit 3378e53

File tree

8 files changed

+14
-159
lines changed

8 files changed

+14
-159
lines changed

src/badge.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use krate::Crate;
22
use schema::badges;
3-
use util::CargoResult;
43

54
use diesel::pg::{Pg, PgConnection};
65
use diesel::prelude::*;
@@ -79,7 +78,7 @@ impl Badge {
7978
conn: &PgConnection,
8079
krate: &Crate,
8180
badges: Option<&'a HashMap<String, HashMap<String, String>>>,
82-
) -> CargoResult<Vec<&'a str>> {
81+
) -> QueryResult<Vec<&'a str>> {
8382
use diesel::{insert, delete};
8483

8584
#[derive(Insertable)]

src/category.rs

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ use conduit::{Request, Response};
44
use conduit_router::RequestParams;
55
use diesel::*;
66
use diesel::pg::PgConnection;
7-
use pg::GenericConnection;
87
use pg::rows::Row;
98

109
use db::RequestTransaction;
1110
use schema::*;
12-
use util::errors::NotFound;
13-
use util::{RequestUtils, CargoResult, ChainError};
11+
use util::{RequestUtils, CargoResult};
1412
use {Model, Crate};
1513

1614
#[derive(Clone, Identifiable, Queryable, Debug)]
@@ -56,17 +54,6 @@ pub struct EncodableCategoryWithSubcategories {
5654
}
5755

5856
impl Category {
59-
pub fn find_by_category(conn: &GenericConnection, name: &str) -> CargoResult<Category> {
60-
let stmt = conn.prepare(
61-
"SELECT * FROM categories \
62-
WHERE category = $1",
63-
)?;
64-
let rows = stmt.query(&[&name])?;
65-
rows.iter().next().chain_error(|| NotFound).map(|row| {
66-
Model::from_row(&row)
67-
})
68-
}
69-
7057
pub fn encodable(self) -> EncodableCategory {
7158
let Category {
7259
crates_cnt,
@@ -159,39 +146,6 @@ impl Category {
159146
))).load(conn)
160147
}
161148

162-
pub fn toplevel_old(
163-
conn: &GenericConnection,
164-
sort: &str,
165-
limit: i64,
166-
offset: i64,
167-
) -> CargoResult<Vec<Category>> {
168-
169-
let sort_sql = match sort {
170-
"crates" => "ORDER BY crates_cnt DESC",
171-
_ => "ORDER BY category ASC",
172-
};
173-
174-
// Collect all the top-level categories and sum up the crates_cnt of
175-
// the crates in all subcategories
176-
let stmt = conn.prepare(&format!(
177-
"SELECT c.id, c.category, c.slug, c.description, c.created_at,
178-
sum(c2.crates_cnt)::int as crates_cnt
179-
FROM categories as c
180-
INNER JOIN categories c2 ON split_part(c2.slug, '::', 1) = c.slug
181-
WHERE split_part(c.slug, '::', 1) = c.slug
182-
GROUP BY c.id
183-
{} LIMIT $1 OFFSET $2",
184-
sort_sql
185-
))?;
186-
187-
let categories: Vec<_> = stmt.query(&[&limit, &offset])?
188-
.iter()
189-
.map(|row| Model::from_row(&row))
190-
.collect();
191-
192-
Ok(categories)
193-
}
194-
195149
pub fn subcategories(&self, conn: &PgConnection) -> QueryResult<Vec<Category>> {
196150
use diesel::expression::dsl::*;
197151
use diesel::types::Text;
@@ -221,7 +175,7 @@ pub struct NewCategory<'a> {
221175

222176
impl<'a> NewCategory<'a> {
223177
/// Inserts the category into the database, or updates an existing one.
224-
pub fn create_or_update(&self, conn: &PgConnection) -> CargoResult<Category> {
178+
pub fn create_or_update(&self, conn: &PgConnection) -> QueryResult<Category> {
225179
use diesel::insert;
226180
use diesel::pg::upsert::*;
227181

src/dependency.rs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use diesel::prelude::*;
22
use diesel::pg::{Pg, PgConnection};
33
use diesel::types::{Integer, Text};
4-
use pg::GenericConnection;
54
use pg::rows::Row;
65
use semver;
76

@@ -72,42 +71,6 @@ pub struct NewDependency<'a> {
7271
}
7372

7473
impl Dependency {
75-
// FIXME: Encapsulate this in a `NewDependency` struct
76-
#[cfg_attr(feature = "clippy", allow(too_many_arguments))]
77-
pub fn insert(
78-
conn: &GenericConnection,
79-
version_id: i32,
80-
crate_id: i32,
81-
req: &semver::VersionReq,
82-
kind: Kind,
83-
optional: bool,
84-
default_features: bool,
85-
features: &[String],
86-
target: &Option<String>,
87-
) -> CargoResult<Dependency> {
88-
let req = req.to_string();
89-
let stmt = conn.prepare(
90-
"INSERT INTO dependencies
91-
(version_id, crate_id, req, optional,
92-
default_features, features, target, kind)
93-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
94-
RETURNING *",
95-
)?;
96-
let rows = stmt.query(
97-
&[
98-
&version_id,
99-
&crate_id,
100-
&req,
101-
&optional,
102-
&default_features,
103-
&features,
104-
target,
105-
&(kind as i32),
106-
],
107-
)?;
108-
Ok(Model::from_row(&rows.iter().next().unwrap()))
109-
}
110-
11174
// `downloads` need only be specified when generating a reverse dependency
11275
pub fn encodable(self, crate_name: &str, downloads: Option<i32>) -> EncodableDependency {
11376
EncodableDependency {

src/krate.rs

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ impl<'a> NewCrate<'a> {
241241
}
242242
}
243243

244-
fn save_new_crate(&self, conn: &PgConnection, user_id: i32) -> CargoResult<Option<Crate>> {
244+
fn save_new_crate(&self, conn: &PgConnection, user_id: i32) -> QueryResult<Option<Crate>> {
245245
use schema::crates::dsl::*;
246246
use diesel::insert;
247247

@@ -554,19 +554,6 @@ impl Crate {
554554
Ok(Version::max(vs))
555555
}
556556

557-
pub fn max_version_old(&self, conn: &GenericConnection) -> CargoResult<semver::Version> {
558-
let stmt = conn.prepare(
559-
"SELECT num FROM versions WHERE crate_id = $1
560-
AND yanked = 'f'",
561-
)?;
562-
let rows = stmt.query(&[&self.id])?;
563-
Ok(Version::max(
564-
rows.iter().map(|r| r.get::<_, String>("num")).map(|s| {
565-
semver::Version::parse(&s).unwrap()
566-
}),
567-
))
568-
}
569-
570557
pub fn versions(&self, conn: &GenericConnection) -> CargoResult<Vec<Version>> {
571558
let stmt = conn.prepare(
572559
"SELECT * FROM versions \
@@ -600,6 +587,7 @@ impl Crate {
600587
Ok(users.chain(teams).collect())
601588
}
602589

590+
// TODO: Update bin/transfer_crates to use owners() then get rid of this
603591
pub fn owners_old(&self, conn: &GenericConnection) -> CargoResult<Vec<Owner>> {
604592
let stmt = conn.prepare(
605593
"SELECT * FROM users
@@ -687,44 +675,6 @@ impl Crate {
687675
Ok(())
688676
}
689677

690-
pub fn add_version(
691-
&mut self,
692-
conn: &GenericConnection,
693-
ver: &semver::Version,
694-
features: &HashMap<String, Vec<String>>,
695-
authors: &[String],
696-
) -> CargoResult<Version> {
697-
if Version::find_by_num(conn, self.id, ver)?.is_some() {
698-
return Err(human(
699-
&format_args!("crate version `{}` is already uploaded", ver),
700-
));
701-
}
702-
Version::insert(conn, self.id, ver, features, authors)
703-
}
704-
705-
pub fn keywords(&self, conn: &GenericConnection) -> CargoResult<Vec<Keyword>> {
706-
let stmt = conn.prepare(
707-
"SELECT keywords.* FROM keywords
708-
LEFT JOIN crates_keywords
709-
ON keywords.id = crates_keywords.keyword_id
710-
WHERE crates_keywords.crate_id = $1",
711-
)?;
712-
let rows = stmt.query(&[&self.id])?;
713-
Ok(rows.iter().map(|r| Model::from_row(&r)).collect())
714-
}
715-
716-
pub fn categories(&self, conn: &GenericConnection) -> CargoResult<Vec<Category>> {
717-
let stmt = conn.prepare(
718-
"SELECT categories.* FROM categories \
719-
LEFT JOIN crates_categories \
720-
ON categories.id = \
721-
crates_categories.category_id \
722-
WHERE crates_categories.crate_id = $1",
723-
)?;
724-
let rows = stmt.query(&[&self.id])?;
725-
Ok(rows.iter().map(|r| Model::from_row(&r)).collect())
726-
}
727-
728678
pub fn badges(&self, conn: &PgConnection) -> QueryResult<Vec<Badge>> {
729679
badges::table.filter(badges::crate_id.eq(self.id)).load(
730680
conn,
@@ -737,7 +687,7 @@ impl Crate {
737687
conn: &PgConnection,
738688
offset: i64,
739689
limit: i64,
740-
) -> CargoResult<(Vec<ReverseDependency>, i64)> {
690+
) -> QueryResult<(Vec<ReverseDependency>, i64)> {
741691
use diesel::expression::dsl::sql;
742692
use diesel::types::{Integer, Text, BigInt};
743693

src/token.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub struct EncodableApiTokenWithToken {
4545

4646
impl ApiToken {
4747
/// Generates a new named API token for a user
48-
pub fn insert(conn: &PgConnection, user_id: i32, name: &str) -> CargoResult<ApiToken> {
48+
pub fn insert(conn: &PgConnection, user_id: i32, name: &str) -> QueryResult<ApiToken> {
4949
#[table_name = "api_tokens"]
5050
#[derive(Insertable, AsChangeset)]
5151
struct NewApiToken<'a> {
@@ -62,14 +62,14 @@ impl ApiToken {
6262
}
6363

6464
/// Deletes the provided API token if it belongs to the provided user
65-
pub fn delete(conn: &PgConnection, user_id: i32, id: i32) -> CargoResult<()> {
65+
pub fn delete(conn: &PgConnection, user_id: i32, id: i32) -> QueryResult<()> {
6666
diesel::delete(api_tokens::table.find(id).filter(
6767
api_tokens::user_id.eq(user_id),
6868
)).execute(conn)?;
6969
Ok(())
7070
}
7171

72-
pub fn find_for_user(conn: &PgConnection, user_id: i32) -> CargoResult<Vec<ApiToken>> {
72+
pub fn find_for_user(conn: &PgConnection, user_id: i32) -> QueryResult<Vec<ApiToken>> {
7373
api_tokens::table
7474
.filter(api_tokens::user_id.eq(user_id))
7575
.order(api_tokens::created_at.desc())

src/uploaders.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ impl Uploader {
153153
}
154154
}
155155

156-
pub fn delete(&self, app: Arc<App>, path: &str) -> CargoResult<()> {
156+
fn delete(&self, app: Arc<App>, path: &str) -> CargoResult<()> {
157157
match *self {
158158
Uploader::S3 { ref bucket, .. } => {
159159
let mut handle = app.handle();

src/user/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl<'a> NewUser<'a> {
6767
}
6868

6969
/// Inserts the user into the database, or updates an existing one.
70-
pub fn create_or_update(&self, conn: &PgConnection) -> CargoResult<User> {
70+
pub fn create_or_update(&self, conn: &PgConnection) -> QueryResult<User> {
7171
use diesel::insert;
7272
use diesel::expression::dsl::sql;
7373
use diesel::types::Integer;

src/version.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use diesel;
66
use diesel::pg::{Pg, PgConnection};
77
use diesel::prelude::*;
88
use pg::GenericConnection;
9+
use pg::Result as PgResult;
910
use pg::rows::Row;
1011
use semver;
1112
use serde_json;
@@ -76,7 +77,7 @@ impl Version {
7677
conn: &GenericConnection,
7778
crate_id: i32,
7879
num: &semver::Version,
79-
) -> CargoResult<Option<Version>> {
80+
) -> PgResult<Option<Version>> {
8081
let num = num.to_string();
8182
let stmt = conn.prepare(
8283
"SELECT * FROM versions \
@@ -111,10 +112,6 @@ impl Version {
111112
Ok(ret)
112113
}
113114

114-
pub fn valid(version: &str) -> bool {
115-
semver::Version::parse(version).is_ok()
116-
}
117-
118115
pub fn encodable(self, crate_name: &str) -> EncodableVersion {
119116
let Version {
120117
id,
@@ -156,7 +153,7 @@ impl Version {
156153
.load(conn)
157154
}
158155

159-
pub fn add_author(&self, conn: &GenericConnection, name: &str) -> CargoResult<()> {
156+
pub fn add_author(&self, conn: &GenericConnection, name: &str) -> PgResult<()> {
160157
conn.execute(
161158
"INSERT INTO version_authors (version_id, name)
162159
VALUES ($1, $2)",
@@ -165,14 +162,6 @@ impl Version {
165162
Ok(())
166163
}
167164

168-
pub fn yank(&self, conn: &GenericConnection, yanked: bool) -> CargoResult<()> {
169-
conn.execute(
170-
"UPDATE versions SET yanked = $1 WHERE id = $2",
171-
&[&yanked, &self.id],
172-
)?;
173-
Ok(())
174-
}
175-
176165
pub fn max<T>(versions: T) -> semver::Version
177166
where
178167
T: IntoIterator<Item = semver::Version>,

0 commit comments

Comments
 (0)