Skip to content

Commit ccaf337

Browse files
jyn514Joshua Nelson
authored and
Joshua Nelson
committed
Reduce scope of metaprogramming
There is now less risk of misuse.
1 parent 71bef87 commit ccaf337

File tree

1 file changed

+8
-19
lines changed

1 file changed

+8
-19
lines changed

src/db/delete.rs

+8-19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::storage::s3::{s3_client, S3_BUCKET_NAME};
22
use failure::{Error, Fail};
3-
use postgres::{transaction::Transaction, Connection};
3+
use postgres::Connection;
44
use rusoto_s3::{DeleteObjectsRequest, ListObjectsV2Request, ObjectIdentifier, S3Client, S3};
55

66
/// 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> {
4545
}
4646
}
4747

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-
6448
fn delete_version_from_database(conn: &Connection, name: &str, version: &str) -> Result<(), Error> {
6549
let crate_id = get_id(conn, name)?;
6650
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] = [
6854
("author_rels", "rid"),
6955
("owner_rels", "cid"),
7056
("keyword_rels", "rid"),
7157
("builds", "rid"),
7258
];
7359
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+
)?;
7564
}
7665
transaction.execute(
7766
"DELETE FROM releases WHERE crate_id = $1 AND version = $2",

0 commit comments

Comments
 (0)