Skip to content

Commit 9ca7e4c

Browse files
sypharjyn514
authored andcommitted
remove duplicate ref, improve update-owners statement
1 parent b4fc5ab commit 9ca7e4c

File tree

1 file changed

+23
-27
lines changed

1 file changed

+23
-27
lines changed

src/db/add_package.rs

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ fn add_keywords_into_database(
320320
let wanted_keywords: HashMap<String, String> = pkg
321321
.keywords
322322
.iter()
323-
.map(|kw| (slugify(&kw), kw.clone()))
323+
.map(|kw| (slugify(kw), kw.clone()))
324324
.collect();
325325

326326
let existing_keyword_slugs: HashSet<String> = conn
@@ -388,41 +388,37 @@ fn update_owners_in_database(
388388
SET
389389
avatar = EXCLUDED.avatar,
390390
name = EXCLUDED.name,
391-
email = EXCLUDED.email",
391+
email = EXCLUDED.email
392+
RETURNING id",
392393
)?;
393-
for owner in owners {
394-
conn.execute(
395-
&owner_upsert,
396-
&[&owner.login, &owner.avatar, &owner.name, &owner.email],
397-
)?;
398-
}
399394

400-
let updated_oids: Vec<i32> = conn
401-
.query(
402-
"INSERT INTO owner_rels (cid, oid)
403-
SELECT $1,id
404-
FROM owners
405-
WHERE login = ANY($2)
406-
ON CONFLICT (cid,oid)
407-
DO UPDATE -- we need this so the existing/updated records end
408-
-- up being in the returned OIDs
409-
SET oid=excluded.oid
410-
RETURNING oid",
411-
&[
412-
&crate_id,
413-
&owners.iter().map(|o| o.login.clone()).collect::<Vec<_>>(),
414-
],
415-
)?
395+
let oids: Vec<i32> = owners
416396
.iter()
417-
.map(|row| row.get(0))
418-
.collect();
397+
.map(|owner| -> Result<_> {
398+
Ok(conn
399+
.query_one(
400+
&owner_upsert,
401+
&[&owner.login, &owner.avatar, &owner.name, &owner.email],
402+
)?
403+
.get(0))
404+
})
405+
.collect::<Result<Vec<_>>>()?;
406+
407+
conn.execute(
408+
"INSERT INTO owner_rels (cid, oid)
409+
SELECT $1,oid
410+
FROM UNNEST($2::int[]) as oid
411+
ON CONFLICT (cid,oid)
412+
DO NOTHING",
413+
&[&crate_id, &oids],
414+
)?;
419415

420416
conn.execute(
421417
"DELETE FROM owner_rels
422418
WHERE
423419
cid = $1 AND
424420
NOT (oid = ANY($2))",
425-
&[&crate_id, &updated_oids],
421+
&[&crate_id, &oids],
426422
)?;
427423

428424
Ok(())

0 commit comments

Comments
 (0)