Skip to content

Commit 9c6412f

Browse files
committed
Move the readme_rendering table onto versions
Every row in versions had at most a single row in the `readme_rendering` table, and the table had only a single column. There is no reason for this table to live separately.
1 parent b79e874 commit 9c6412f

File tree

5 files changed

+38
-54
lines changed

5 files changed

+38
-54
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CREATE TABLE readme_rendering (
2+
version_id INTEGER NOT NULL PRIMARY KEY REFERENCES versions (id) ON DELETE CASCADE,
3+
rendered_at TIMESTAMP NOT NULL
4+
);
5+
6+
INSERT INTO readme_rendering (version_id, rendered_at)
7+
SELECT id, readme_rendered_at FROM versions WHERE readme_rendered_at IS NOT NULL;
8+
9+
ALTER TABLE versions DROP COLUMN readme_rendered_at;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE versions ADD COLUMN readme_rendered_at TIMESTAMP;
2+
UPDATE versions SET readme_rendered_at = readme_rendering.rendered_at
3+
FROM readme_rendering WHERE readme_rendering.version_id = versions.id;
4+
DROP TABLE readme_rendering;

src/bin/render-readmes.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,8 @@ fn main() {
7979

8080
let mut query = versions::table
8181
.inner_join(crates::table)
82-
.left_join(readme_rendering::table)
83-
.filter(readme_rendering::rendered_at.lt(older_than).or(
84-
readme_rendering::rendered_at.is_null(),
82+
.filter(versions::readme_rendered_at.lt(older_than).or(
83+
versions::readme_rendered_at.is_null(),
8584
))
8685
.select(versions::id)
8786
.into_boxed();

src/schema.rs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -506,26 +506,6 @@ table! {
506506
}
507507
}
508508

509-
table! {
510-
/// Representation of the `readme_rendering` table.
511-
///
512-
/// (Automatically generated by Diesel.)
513-
readme_rendering (version_id) {
514-
/// The `version_id` column of the `readme_rendering` table.
515-
///
516-
/// Its SQL type is `Int4`.
517-
///
518-
/// (Automatically generated by Diesel.)
519-
version_id -> Int4,
520-
/// The `rendered_at` column of the `readme_rendering` table.
521-
///
522-
/// Its SQL type is `Nullable<Timestamp>`.
523-
///
524-
/// (Automatically generated by Diesel.)
525-
rendered_at -> Nullable<Timestamp>,
526-
}
527-
}
528-
529509
table! {
530510
/// Representation of the `reserved_crate_names` table.
531511
///
@@ -795,6 +775,12 @@ table! {
795775
///
796776
/// (Automatically generated by Diesel.)
797777
license -> Nullable<Varchar>,
778+
/// The `readme_rendered_at` column of the `versions` table.
779+
///
780+
/// Its SQL type is `Nullable<Timestamp>`.
781+
///
782+
/// (Automatically generated by Diesel.)
783+
readme_rendered_at -> Nullable<Timestamp>,
798784
}
799785
}
800786

@@ -815,6 +801,5 @@ joinable!(version_authors -> versions (version_id));
815801
joinable!(version_downloads -> versions (version_id));
816802
joinable!(crate_owners -> teams (owner_id));
817803
joinable!(crate_owners -> users (owner_id));
818-
joinable!(readme_rendering -> versions (version_id));
819804
joinable!(crate_owner_invitations -> crates (crate_id));
820805
joinable!(tokens -> emails (email_id));

src/version.rs

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use conduit::{Request, Response};
44
use conduit_router::RequestParams;
55
use diesel;
66
use diesel::pg::Pg;
7-
use diesel::pg::upsert::*;
87
use diesel::prelude::*;
98
use semver;
109
use serde_json;
@@ -24,10 +23,6 @@ use util::errors::CargoError;
2423
use util::{RequestUtils, CargoResult, human};
2524
use license_exprs;
2625

27-
// This is necessary to allow joining version to both crates and readme_rendering
28-
// in the render-readmes script.
29-
enable_multi_table_joins!(crates, readme_rendering);
30-
3126
// Queryable has a custom implementation below
3227
#[derive(Clone, Identifiable, Associations, Debug)]
3328
#[belongs_to(Crate)]
@@ -76,15 +71,6 @@ pub struct VersionLinks {
7671
pub authors: String,
7772
}
7873

79-
#[derive(Insertable, Identifiable, Queryable, Associations, Debug, Clone, Copy)]
80-
#[belongs_to(Version)]
81-
#[table_name = "readme_rendering"]
82-
#[primary_key(version_id)]
83-
struct ReadmeRendering {
84-
version_id: i32,
85-
rendered_at: Timespec,
86-
}
87-
8874
impl Version {
8975
pub fn encodable(self, crate_name: &str) -> EncodableVersion {
9076
let Version {
@@ -143,22 +129,13 @@ impl Version {
143129
})
144130
}
145131

146-
pub fn record_readme_rendering(&self, conn: &PgConnection) -> CargoResult<()> {
147-
let rendered = ReadmeRendering {
148-
version_id: self.id,
149-
rendered_at: ::now(),
150-
};
132+
pub fn record_readme_rendering(&self, conn: &PgConnection) -> QueryResult<usize> {
133+
use schema::versions::dsl::readme_rendered_at;
134+
use diesel::expression::now;
151135

152-
diesel::insert(&rendered.on_conflict(
153-
readme_rendering::version_id,
154-
do_update().set(readme_rendering::rendered_at.eq(
155-
excluded(
156-
readme_rendering::rendered_at,
157-
),
158-
)),
159-
)).into(readme_rendering::table)
160-
.execute(&*conn)?;
161-
Ok(())
136+
diesel::update(self)
137+
.set(readme_rendered_at.eq(now.nullable()))
138+
.execute(conn)
162139
}
163140
}
164141

@@ -250,7 +227,17 @@ struct NewAuthor<'a> {
250227
}
251228

252229
impl Queryable<versions::SqlType, Pg> for Version {
253-
type Row = (i32, i32, String, Timespec, Timespec, i32, Option<String>, bool, Option<String>);
230+
#[cfg_attr(feature = "clippy", allow(type_complexity))]
231+
type Row = (i32,
232+
i32,
233+
String,
234+
Timespec,
235+
Timespec,
236+
i32,
237+
Option<String>,
238+
bool,
239+
Option<String>,
240+
Option<Timespec>);
254241

255242
fn build(row: Self::Row) -> Self {
256243
let features = row.6

0 commit comments

Comments
 (0)