|
1 | 1 | use crate::storage::s3::{s3_client, S3_BUCKET_NAME};
|
2 | 2 | use failure::{Error, Fail};
|
3 |
| -use postgres::{transaction::Transaction, Connection}; |
| 3 | +use postgres::Connection; |
4 | 4 | use rusoto_s3::{DeleteObjectsRequest, ListObjectsV2Request, ObjectIdentifier, S3Client, S3};
|
5 | 5 |
|
6 | 6 | /// List of directories in docs.rs's underlying storage (either the database or S3) containing a
|
@@ -45,33 +45,22 @@ fn get_id(conn: &Connection, name: &str) -> Result<i32, Error> {
|
45 | 45 | }
|
46 | 46 | }
|
47 | 47 |
|
48 |
| -// metaprogramming! |
49 |
| -// NOTE: it is _crucial_ that table_name and column_name be hard-coded, i.e. NOT user input |
50 |
| -fn delete_metadata( |
51 |
| - transaction: &Transaction, |
52 |
| - crate_id: i32, |
53 |
| - version: &str, |
54 |
| - table_name: &'static str, |
55 |
| - column_name: &'static str, |
56 |
| -) -> Result<(), Error> { |
57 |
| - transaction.execute( |
58 |
| - &format!("DELETE FROM {} WHERE {} IN (SELECT id FROM releases WHERE crate_id = $1 AND version = $2)", table_name, column_name), |
59 |
| - &[&crate_id, &version], |
60 |
| - )?; |
61 |
| - Ok(()) |
62 |
| -} |
63 |
| - |
64 | 48 | fn delete_version_from_database(conn: &Connection, name: &str, version: &str) -> Result<(), Error> {
|
65 | 49 | let crate_id = get_id(conn, name)?;
|
66 | 50 | let transaction = conn.transaction()?;
|
67 |
| - let metadata = [ |
| 51 | + // metaprogramming! |
| 52 | + // WARNING: these must be hard-coded and NEVER user input. |
| 53 | + let metadata: [(&'static str, &'static str); 4] = [ |
68 | 54 | ("author_rels", "rid"),
|
69 | 55 | ("owner_rels", "cid"),
|
70 | 56 | ("keyword_rels", "rid"),
|
71 | 57 | ("builds", "rid"),
|
72 | 58 | ];
|
73 | 59 | for &(table, column) in &metadata {
|
74 |
| - delete_metadata(&transaction, crate_id, version, table, column)?; |
| 60 | + transaction.execute( |
| 61 | + &format!("DELETE FROM {} WHERE {} IN (SELECT id FROM releases WHERE crate_id = $1 AND version = $2)", table, column), |
| 62 | + &[&crate_id, &version], |
| 63 | + )?; |
75 | 64 | }
|
76 | 65 | transaction.execute(
|
77 | 66 | "DELETE FROM releases WHERE crate_id = $1 AND version = $2",
|
|
0 commit comments