Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/admin/render_readmes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
let versions: Vec<(Version, String)> = versions::table
.inner_join(crates::table)
.filter(versions::id.eq_any(version_ids_chunk))
.select((versions::all_columns, crates::name))
.select((Version::as_select(), crates::name))

Check warning on line 103 in src/admin/render_readmes.rs

View check run for this annotation

Codecov / codecov/patch

src/admin/render_readmes.rs#L103

Added line #L103 was not covered by tests
.load(conn)
.context("error loading versions")?;

Expand Down
20 changes: 8 additions & 12 deletions src/controllers/krate/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
use crate::app::AppState;
use crate::controllers::helpers::pagination::PaginationOptions;
use crate::models::{
Category, Crate, CrateCategory, CrateKeyword, CrateVersions, Keyword, RecentCrateDownloads,
User, Version, VersionOwnerAction,
Category, Crate, CrateCategory, CrateKeyword, CrateName, CrateVersions, Keyword,
RecentCrateDownloads, User, Version, VersionOwnerAction,
};
use crate::schema::*;
use crate::tasks::spawn_blocking;
Expand Down Expand Up @@ -63,7 +63,7 @@ pub async fn show(app: AppState, Path(name): Path<String>, req: Parts) -> AppRes
let mut versions_and_publishers: Vec<(Version, Option<User>)> = krate
.all_versions()
.left_outer_join(users::table)
.select((versions::all_columns, users::all_columns.nullable()))
.select(<(Version, Option<User>)>::as_select())
.load(conn)?;
versions_and_publishers.sort_by_cached_key(|(version, _)| {
Reverse(semver::Version::parse(&version.num).ok())
Expand Down Expand Up @@ -92,7 +92,7 @@ pub async fn show(app: AppState, Path(name): Path<String>, req: Parts) -> AppRes
Some(
CrateKeyword::belonging_to(&krate)
.inner_join(keywords::table)
.select(keywords::all_columns)
.select(Keyword::as_select())
.load(conn)?,
)
} else {
Expand All @@ -102,7 +102,7 @@ pub async fn show(app: AppState, Path(name): Path<String>, req: Parts) -> AppRes
Some(
CrateCategory::belonging_to(&krate)
.inner_join(categories::table)
.select(categories::all_columns)
.select(Category::as_select())
.load(conn)?,
)
} else {
Expand Down Expand Up @@ -260,15 +260,11 @@ pub async fn reverse_dependencies(

let version_ids: Vec<i32> = rev_deps.iter().map(|dep| dep.version_id).collect();

let versions_and_publishers: Vec<(Version, String, Option<User>)> = versions::table
let versions_and_publishers: Vec<(Version, CrateName, Option<User>)> = versions::table
.filter(versions::id.eq_any(version_ids))
.inner_join(crates::table)
.left_outer_join(users::table)
.select((
versions::all_columns,
crates::name,
users::all_columns.nullable(),
))
.select(<(Version, CrateName, Option<User>)>::as_select())
.load(conn)?;
let versions = versions_and_publishers
.iter()
Expand All @@ -279,7 +275,7 @@ pub async fn reverse_dependencies(
.into_iter()
.zip(actions)
.map(|((version, krate_name, published_by), actions)| {
EncodableVersion::from(version, &krate_name, published_by, actions)
EncodableVersion::from(version, &krate_name.name, published_by, actions)
})
.collect::<Vec<_>>();

Expand Down
6 changes: 3 additions & 3 deletions src/controllers/krate/versions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ fn list_by_date(
let mut query = versions::table
.filter(versions::crate_id.eq(crate_id))
.left_outer_join(users::table)
.select((versions::all_columns, users::all_columns.nullable()))
.select(<(Version, Option<User>)>::as_select())
.into_boxed();

let mut release_tracks = None;
Expand Down Expand Up @@ -239,7 +239,7 @@ fn list_by_semver(
for result in versions::table
.filter(versions::crate_id.eq(crate_id))
.left_outer_join(users::table)
.select((versions::all_columns, users::all_columns.nullable()))
.select(<(Version, Option<User>)>::as_select())
.filter(versions::id.eq_any(ids))
.load_iter::<(Version, Option<User>), DefaultLoadingMode>(conn)?
{
Expand Down Expand Up @@ -267,7 +267,7 @@ fn list_by_semver(
let mut data: Vec<(Version, Option<User>)> = versions::table
.filter(versions::crate_id.eq(crate_id))
.left_outer_join(users::table)
.select((versions::all_columns, users::all_columns.nullable()))
.select(<(Version, Option<User>)>::as_select())
.load(conn)?;
data.sort_by_cached_key(|(version, _)| Reverse(semver::Version::parse(&version.num).ok()));
let total = data.len();
Expand Down
13 changes: 5 additions & 8 deletions src/controllers/user/me.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use std::collections::HashMap;
use crate::app::AppState;
use crate::controllers::helpers::pagination::{Paginated, PaginationOptions};
use crate::controllers::helpers::{ok_true, Paginate};
use crate::models::krate::CrateName;
use crate::models::{CrateOwner, Follow, OwnerKind, User, Version, VersionOwnerAction};
use crate::schema::{crate_owners, crates, emails, follows, users, versions};
use crate::tasks::spawn_blocking;
Expand All @@ -31,7 +32,7 @@ pub async fn me(app: AppState, req: Parts) -> AppResult<Json<EncodableMe>> {
.find(user_id)
.left_join(emails::table)
.select((
users::all_columns,
User::as_select(),
emails::verified.nullable(),
emails::email.nullable(),
emails::token_generated_at.nullable().is_not_null(),
Expand Down Expand Up @@ -77,13 +78,9 @@ pub async fn updates(app: AppState, req: Parts) -> AppResult<Json<Value>> {
.left_outer_join(users::table)
.filter(crates::id.eq_any(followed_crates))
.order(versions::created_at.desc())
.select((
versions::all_columns,
crates::name,
users::all_columns.nullable(),
))
.select(<(Version, CrateName, Option<User>)>::as_select())
.pages_pagination(PaginationOptions::builder().gather(&req)?);
let data: Paginated<(Version, String, Option<User>)> = query.load(conn)?;
let data: Paginated<(Version, CrateName, Option<User>)> = query.load(conn)?;
let more = data.next_page_params().is_some();
let versions = data.iter().map(|(v, ..)| v).collect::<Vec<_>>();
let actions = VersionOwnerAction::for_versions(conn, &versions)?;
Expand All @@ -95,7 +92,7 @@ pub async fn updates(app: AppState, req: Parts) -> AppResult<Json<Value>> {
let versions = data
.into_iter()
.map(|(version, crate_name, published_by, actions)| {
EncodableVersion::from(version, &crate_name, published_by, actions)
EncodableVersion::from(version, &crate_name.name, published_by, actions)
})
.collect::<Vec<_>>();

Expand Down
4 changes: 2 additions & 2 deletions src/index.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
//! index files.

use crate::models::{Crate, CrateVersions, Dependency, Version};
use crate::schema::{crates, dependencies};
use crate::schema::crates;
use anyhow::Context;
use crates_io_index::features::split_features;
use diesel::prelude::*;
Expand Down Expand Up @@ -68,7 +68,7 @@ pub async fn index_metadata(

let deps: Vec<(Dependency, String)> = Dependency::belonging_to(&versions)
.inner_join(crates::table)
.select((dependencies::all_columns, crates::name))
.select((Dependency::as_select(), crates::name))
.load(conn)
.await?;

Expand Down
2 changes: 1 addition & 1 deletion src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub use self::download::VersionDownload;
pub use self::email::{Email, NewEmail};
pub use self::follow::Follow;
pub use self::keyword::{CrateKeyword, Keyword};
pub use self::krate::{Crate, CrateVersions, NewCrate, RecentCrateDownloads};
pub use self::krate::{Crate, CrateName, CrateVersions, NewCrate, RecentCrateDownloads};
pub use self::owner::{CrateOwner, Owner, OwnerKind};
pub use self::rights::Rights;
pub use self::team::{NewTeam, Team};
Expand Down
2 changes: 1 addition & 1 deletion src/models/category.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::models::Crate;
use crate::schema::*;
use crate::util::diesel::Conn;

#[derive(Clone, Identifiable, Queryable, QueryableByName, Debug)]
#[derive(Clone, Identifiable, Queryable, QueryableByName, Debug, Selectable)]
#[diesel(table_name = categories, check_for_backend(diesel::pg::Pg))]
pub struct Category {
pub id: i32,
Expand Down
2 changes: 1 addition & 1 deletion src/models/dependency.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::schema::*;
use crate::sql::pg_enum;
use crates_io_index::DependencyKind as IndexDependencyKind;

#[derive(Identifiable, Associations, Debug, Queryable, QueryableByName)]
#[derive(Identifiable, Associations, Debug, Queryable, QueryableByName, Selectable)]
#[diesel(
table_name = dependencies,
check_for_backend(diesel::pg::Pg),
Expand Down
2 changes: 1 addition & 1 deletion src/models/keyword.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::schema::*;
use crate::sql::lower;
use crate::util::diesel::Conn;

#[derive(Clone, Identifiable, Queryable, Debug)]
#[derive(Clone, Identifiable, Queryable, Debug, Selectable)]
pub struct Keyword {
pub id: i32,
pub keyword: String,
Expand Down
10 changes: 8 additions & 2 deletions src/models/krate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ pub struct RecentCrateDownloads {
pub downloads: i32,
}

#[derive(Debug, Clone, Queryable, Selectable)]
#[diesel(table_name = crates, check_for_backend(diesel::pg::Pg))]
pub struct CrateName {
pub name: String,
}

#[derive(Debug, Clone, Queryable, Identifiable, AsChangeset, QueryableByName, Selectable)]
#[diesel(table_name = crates, check_for_backend(diesel::pg::Pg))]
pub struct Crate {
Expand Down Expand Up @@ -338,14 +344,14 @@ impl Crate {
let users = CrateOwner::by_owner_kind(OwnerKind::User)
.filter(crate_owners::crate_id.eq(self.id))
.inner_join(users::table)
.select(users::all_columns)
.select(User::as_select())
.load(conn)?
.into_iter()
.map(Owner::User);
let teams = CrateOwner::by_owner_kind(OwnerKind::Team)
.filter(crate_owners::crate_id.eq(self.id))
.inner_join(teams::table)
.select(teams::all_columns)
.select(Team::as_select())
.load(conn)?
.into_iter()
.map(Owner::Team);
Expand Down
4 changes: 2 additions & 2 deletions src/models/team.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use crate::util::diesel::Conn;

/// For now, just a Github Team. Can be upgraded to other teams
/// later if desirable.
#[derive(Queryable, Identifiable, Serialize, Deserialize, Debug)]
#[derive(Queryable, Identifiable, Serialize, Deserialize, Debug, Selectable)]
pub struct Team {
/// Unique table id
pub id: i32,
Expand Down Expand Up @@ -200,7 +200,7 @@ impl Team {
let base_query = CrateOwner::belonging_to(krate).filter(crate_owners::deleted.eq(false));
let teams = base_query
.inner_join(teams::table)
.select(teams::all_columns)
.select(Team::as_select())
.filter(crate_owners::owner_kind.eq(OwnerKind::Team))
.load(conn)?
.into_iter()
Expand Down
4 changes: 2 additions & 2 deletions src/models/user.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use crate::sql::lower;
use crate::util::diesel::Conn;

/// The model representing a row in the `users` database table.
#[derive(Clone, Debug, PartialEq, Eq, Queryable, Identifiable, AsChangeset)]
#[derive(Clone, Debug, PartialEq, Eq, Queryable, Identifiable, AsChangeset, Selectable)]
pub struct User {
pub id: i32,
pub gh_access_token: String,
Expand Down Expand Up @@ -43,7 +43,7 @@ impl User {
pub fn owning(krate: &Crate, conn: &mut impl Conn) -> QueryResult<Vec<Owner>> {
let users = CrateOwner::by_owner_kind(OwnerKind::User)
.inner_join(users::table)
.select(users::all_columns)
.select(User::as_select())
.filter(crate_owners::crate_id.eq(krate.id))
.load(conn)?
.into_iter()
Expand Down
4 changes: 2 additions & 2 deletions src/models/version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::schema::*;
use crate::util::diesel::Conn;

// Queryable has a custom implementation below
#[derive(Clone, Identifiable, Associations, Debug, Queryable)]
#[derive(Clone, Identifiable, Associations, Debug, Queryable, Selectable)]
#[diesel(belongs_to(Crate))]
pub struct Version {
pub id: i32,
Expand Down Expand Up @@ -39,7 +39,7 @@ impl Version {
pub fn dependencies(&self, conn: &mut impl Conn) -> QueryResult<Vec<(Dependency, String)>> {
Dependency::belonging_to(self)
.inner_join(crates::table)
.select((dependencies::all_columns, crates::name))
.select((Dependency::as_select(), crates::name))
.order((dependencies::optional, crates::name))
.load(conn)
}
Expand Down