Skip to content

Commit 929291a

Browse files
committed
Move readme_rendered_at off of the versions table
This column is never used in code other than for filtering/recording purposes. We do not put it on the `Version` struct, and don't need to be sending it over the wire every time we query that table.
1 parent 04ca810 commit 929291a

File tree

5 files changed

+44
-13
lines changed

5 files changed

+44
-13
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
ALTER TABLE versions ADD COLUMN readme_rendered_at TIMESTAMP;
2+
3+
UPDATE versions SET readme_rendered_at = readme_renderings.rendered_at
4+
FROM readme_renderings
5+
WHERE readme_renderings.version_id = versions.id;
6+
7+
DROP TABLE readme_renderings;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CREATE TABLE readme_renderings (
2+
version_id INTEGER NOT NULL PRIMARY KEY REFERENCES versions (id) ON DELETE CASCADE,
3+
rendered_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
4+
);
5+
6+
INSERT INTO readme_renderings (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;

src/bin/render-readmes.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,11 @@ fn main() {
7777

7878
let mut query = versions::table
7979
.inner_join(crates::table)
80+
.left_outer_join(readme_renderings::table)
8081
.filter(
81-
versions::readme_rendered_at
82+
readme_renderings::rendered_at
8283
.lt(older_than)
83-
.or(versions::readme_rendered_at.is_null()),
84+
.or(readme_renderings::version_id.is_null()),
8485
)
8586
.select(versions::id)
8687
.into_boxed();

src/schema.rs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,26 @@ table! {
527527
}
528528
}
529529

530+
table! {
531+
/// Representation of the `readme_renderings` table.
532+
///
533+
/// (Automatically generated by Diesel.)
534+
readme_renderings (version_id) {
535+
/// The `version_id` column of the `readme_renderings` table.
536+
///
537+
/// Its SQL type is `Int4`.
538+
///
539+
/// (Automatically generated by Diesel.)
540+
version_id -> Int4,
541+
/// The `rendered_at` column of the `readme_renderings` table.
542+
///
543+
/// Its SQL type is `Timestamp`.
544+
///
545+
/// (Automatically generated by Diesel.)
546+
rendered_at -> Timestamp,
547+
}
548+
}
549+
530550
table! {
531551
/// Representation of the `reserved_crate_names` table.
532552
///
@@ -764,12 +784,6 @@ table! {
764784
///
765785
/// (Automatically generated by Diesel.)
766786
license -> Nullable<Varchar>,
767-
/// The `readme_rendered_at` column of the `versions` table.
768-
///
769-
/// Its SQL type is `Nullable<Timestamp>`.
770-
///
771-
/// (Automatically generated by Diesel.)
772-
readme_rendered_at -> Nullable<Timestamp>,
773787
}
774788
}
775789

@@ -788,6 +802,7 @@ joinable!(dependencies -> versions (version_id));
788802
joinable!(emails -> users (user_id));
789803
joinable!(follows -> crates (crate_id));
790804
joinable!(follows -> users (user_id));
805+
joinable!(readme_renderings -> versions (version_id));
791806
joinable!(version_authors -> users (user_id));
792807
joinable!(version_authors -> versions (version_id));
793808
joinable!(version_downloads -> versions (version_id));
@@ -808,6 +823,7 @@ allow_tables_to_appear_in_same_query!(
808823
follows,
809824
keywords,
810825
metadata,
826+
readme_renderings,
811827
reserved_crate_names,
812828
teams,
813829
users,

src/version/mod.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,10 @@ impl Version {
128128
}
129129

130130
pub fn record_readme_rendering(&self, conn: &PgConnection) -> QueryResult<usize> {
131-
use schema::versions::dsl::readme_rendered_at;
132-
use diesel::dsl::now;
131+
use schema::readme_renderings::dsl::*;
133132

134-
diesel::update(self)
135-
.set(readme_rendered_at.eq(now.nullable()))
133+
diesel::insert_into(readme_renderings)
134+
.values(version_id.eq(self.id))
136135
.execute(conn)
137136
}
138137
}
@@ -227,7 +226,6 @@ impl Queryable<versions::SqlType, Pg> for Version {
227226
Option<String>,
228227
bool,
229228
Option<String>,
230-
Option<NaiveDateTime>,
231229
);
232230

233231
fn build(row: Self::Row) -> Self {

0 commit comments

Comments
 (0)