Skip to content

Commit ded2537

Browse files
committed
Use User::as_select() to avoid column ordering issues
1 parent c0f8831 commit ded2537

File tree

9 files changed

+27
-3
lines changed

9 files changed

+27
-3
lines changed

crates/crates_io_database/src/models/action.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ impl VersionOwnerAction {
6666
version_owner_actions::table
6767
.filter(version_id.eq(version.id))
6868
.inner_join(users::table)
69+
.select((VersionOwnerAction::as_select(), User::as_select()))
6970
.order(version_owner_actions::dsl::id)
7071
.load(conn)
7172
.boxed()
@@ -77,6 +78,7 @@ impl VersionOwnerAction {
7778
) -> QueryResult<Vec<Vec<(Self, User)>>> {
7879
Ok(Self::belonging_to(versions)
7980
.inner_join(users::table)
81+
.select((VersionOwnerAction::as_select(), User::as_select()))
8082
.order(version_owner_actions::dsl::id)
8183
.load(conn)
8284
.await?

crates/crates_io_database/src/models/crate_owner_invitation.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ impl CrateOwnerInvitation {
103103
}
104104

105105
// Get the user and check if they have a verified email
106-
let user: User = users::table.find(self.invited_user_id).first(conn).await?;
106+
let user: User = users::table
107+
.find(self.invited_user_id)
108+
.select(User::as_select())
109+
.first(conn)
110+
.await?;
107111

108112
let verified_email = user.verified_email(conn).await?;
109113
if verified_email.is_none() {

crates/crates_io_database/src/models/user.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,18 @@ pub struct User {
3131

3232
impl User {
3333
pub async fn find(conn: &mut AsyncPgConnection, id: i32) -> QueryResult<User> {
34-
users::table.find(id).first(conn).await
34+
users::table
35+
.find(id)
36+
.select(User::as_select())
37+
.first(conn)
38+
.await
3539
}
3640

3741
pub async fn find_by_login(conn: &mut AsyncPgConnection, login: &str) -> QueryResult<User> {
3842
users::table
3943
.filter(lower(users::gh_login).eq(login.to_lowercase()))
4044
.filter(users::gh_id.ne(-1))
45+
.select(User::as_select())
4146
.order(users::gh_id.desc())
4247
.first(conn)
4348
.await
@@ -96,6 +101,7 @@ impl NewUser<'_> {
96101
pub async fn insert(&self, conn: &mut AsyncPgConnection) -> QueryResult<User> {
97102
diesel::insert_into(users::table)
98103
.values(self)
104+
.returning(User::as_returning())
99105
.get_result(conn)
100106
.await
101107
}
@@ -120,6 +126,7 @@ impl NewUser<'_> {
120126
users::gh_avatar.eq(excluded(users::gh_avatar)),
121127
users::gh_access_token.eq(excluded(users::gh_access_token)),
122128
))
129+
.returning(User::as_returning())
123130
.get_result(conn)
124131
.await
125132
}

crates/crates_io_database/src/models/version.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,12 @@ impl Version {
5959
/// Not for use when you have a group of versions you need the publishers for.
6060
pub async fn published_by(&self, conn: &mut AsyncPgConnection) -> QueryResult<Option<User>> {
6161
match self.published_by {
62-
Some(pb) => users::table.find(pb).first(conn).await.optional(),
62+
Some(pb) => users::table
63+
.find(pb)
64+
.select(User::as_select())
65+
.first(conn)
66+
.await
67+
.optional(),
6368
None => Ok(None),
6469
}
6570
}

src/bin/crates-admin/transfer_crates.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
2727
async fn transfer(opts: Opts, conn: &mut AsyncPgConnection) -> anyhow::Result<()> {
2828
let from: User = users::table
2929
.filter(users::gh_login.eq(opts.from_user))
30+
.select(User::as_select())
3031
.first(conn)
3132
.await?;
3233

3334
let to: User = users::table
3435
.filter(users::gh_login.eq(opts.to_user))
36+
.select(User::as_select())
3537
.first(conn)
3638
.await?;
3739

src/controllers/crate_owner_invitation.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ async fn prepare_list(
266266
if !missing_users.is_empty() {
267267
let new_users: Vec<User> = users::table
268268
.filter(users::id.eq_any(missing_users))
269+
.select(User::as_select())
269270
.load(conn)
270271
.await?;
271272
for user in new_users.into_iter() {

src/controllers/krate/downloads.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ fn load_actions<'a>(
187187
}
188188
VersionOwnerAction::belonging_to(versions)
189189
.inner_join(users::table)
190+
.select((VersionOwnerAction::as_select(), User::as_select()))
190191
.order(version_owner_actions::id)
191192
.load(conn)
192193
.boxed()

src/controllers/session.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ async fn create_or_update_user(
204204
async fn find_user_by_gh_id(conn: &mut AsyncPgConnection, gh_id: i32) -> QueryResult<Option<User>> {
205205
users::table
206206
.filter(users::gh_id.eq(gh_id))
207+
.select(User::as_select())
207208
.first(conn)
208209
.await
209210
.optional()

src/controllers/user/other.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub async fn find_user(
3737
let name = lower(&user_name);
3838
let user: User = users
3939
.filter(lower(gh_login).eq(name))
40+
.select(User::as_select())
4041
.order(id.desc())
4142
.first(&mut conn)
4243
.await?;

0 commit comments

Comments
 (0)