Skip to content

Commit 9d81de9

Browse files
committed
Cleanup inserting owners into database
1 parent c5be00c commit 9d81de9

File tree

1 file changed

+31
-46
lines changed

1 file changed

+31
-46
lines changed

src/db/add_package.rs

Lines changed: 31 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -349,20 +349,17 @@ fn update_owners_in_database(
349349
owners: &[CrateOwner],
350350
crate_id: i32,
351351
) -> Result<()> {
352-
let existing_owners: Vec<String> = conn
353-
.query(
354-
"
355-
SELECT login
356-
FROM owners
357-
INNER JOIN owner_rels
358-
ON owner_rels.oid = owners.id
359-
WHERE owner_rels.cid = $1
360-
",
361-
&[&crate_id],
362-
)?
363-
.into_iter()
364-
.map(|row| row.get(0))
365-
.collect();
352+
let rows = conn.query(
353+
"
354+
SELECT login
355+
FROM owners
356+
INNER JOIN owner_rels
357+
ON owner_rels.oid = owners.id
358+
WHERE owner_rels.cid = $1
359+
",
360+
&[&crate_id],
361+
)?;
362+
let existing_owners = rows.into_iter().map(|row| -> String { row.get(0) });
366363

367364
for owner in owners {
368365
debug!("Updating owner data for {}: {:?}", owner.login, owner);
@@ -372,54 +369,42 @@ fn update_owners_in_database(
372369
let owner_id: i32 = {
373370
conn.query(
374371
"
375-
INSERT INTO owners (login, avatar, name, email)
376-
VALUES ($1, $2, $3, $4)
377-
ON CONFLICT (login) DO UPDATE
378-
SET
379-
avatar = $2,
380-
name = $3,
381-
email = $4
382-
RETURNING id
383-
",
372+
INSERT INTO owners (login, avatar, name, email)
373+
VALUES ($1, $2, $3, $4)
374+
ON CONFLICT (login) DO UPDATE
375+
SET
376+
avatar = $2,
377+
name = $3,
378+
email = $4
379+
RETURNING id
380+
",
384381
&[&owner.login, &owner.avatar, &owner.name, &owner.email],
385382
)?
386383
.get(0)
387384
.get(0)
388385
};
389386

390387
// add relationship
391-
let updated = conn.query(
392-
"INSERT INTO owner_rels (cid, oid) VALUES ($1, $2)",
388+
conn.query(
389+
"INSERT INTO owner_rels (cid, oid) VALUES ($1, $2) ON CONFLICT DO NOTHING",
393390
&[&crate_id, &owner_id],
394-
);
395-
396-
match updated {
397-
Ok(_) => debug!("Added new owner relationship"),
398-
Err(e)
399-
if e.as_db().and_then(|e| e.constraint.as_deref())
400-
== Some("owner_rels_cid_oid_key") =>
401-
{
402-
debug!("Existing owner relationship");
403-
}
404-
Err(e) => return Err(e.into()),
405-
}
391+
)?;
406392
}
407393

408-
let to_remove = existing_owners
409-
.iter()
410-
.filter(|login| !owners.iter().any(|owner| &&owner.login == login));
394+
let to_remove =
395+
existing_owners.filter(|login| !owners.iter().any(|owner| &owner.login == login));
411396

412397
for login in to_remove {
413398
debug!("Removing owner relationship {}", login);
414399
// remove relationship
415400
conn.query(
416401
"
417-
DELETE FROM owner_rels
418-
USING owners
419-
WHERE owner_rels.cid = $1
420-
AND owner_rels.oid = owners.id
421-
AND owners.login = $2
422-
",
402+
DELETE FROM owner_rels
403+
USING owners
404+
WHERE owner_rels.cid = $1
405+
AND owner_rels.oid = owners.id
406+
AND owners.login = $2
407+
",
423408
&[&crate_id, &login],
424409
)?;
425410
}

0 commit comments

Comments
 (0)