Skip to content

Commit 101076a

Browse files
authored
Merge pull request #9766 from Turbo87/num_no_build1
database: Add `versions.num_no_build` column
2 parents 7bce876 + 084d46d commit 101076a

File tree

7 files changed

+37
-2
lines changed

7 files changed

+37
-2
lines changed

crates/crates_io_database/src/schema.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,8 @@ diesel::table! {
989989
bin_names -> Nullable<Array<Nullable<Text>>>,
990990
/// message associated with a yanked version
991991
yank_message -> Nullable<Text>,
992+
/// This is the same as `num` without the optional "build metadata" part (except for some versions that were published before we started validating this).
993+
num_no_build -> Nullable<Varchar>,
992994
}
993995
}
994996

crates/crates_io_database_dump/src/dump-db.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ dependencies = ["crates", "users"]
220220
id = "public"
221221
crate_id = "public"
222222
num = "public"
223+
num_no_build = "public"
223224
updated_at = "public"
224225
created_at = "public"
225226
downloads = "public"

crates/crates_io_database_dump/src/snapshots/[email protected]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ BEGIN ISOLATION LEVEL REPEATABLE READ, READ ONLY;
1717
\copy "crates_keywords" ("crate_id", "keyword_id") TO 'data/crates_keywords.csv' WITH CSV HEADER
1818
\copy (SELECT "crate_id", "created_at", "created_by", "owner_id", "owner_kind" FROM "crate_owners" WHERE NOT deleted) TO 'data/crate_owners.csv' WITH CSV HEADER
1919

20-
\copy "versions" ("bin_names", "checksum", "crate_id", "crate_size", "created_at", "downloads", "features", "has_lib", "id", "license", "links", "num", "published_by", "rust_version", "updated_at", "yanked") TO 'data/versions.csv' WITH CSV HEADER
20+
\copy "versions" ("bin_names", "checksum", "crate_id", "crate_size", "created_at", "downloads", "features", "has_lib", "id", "license", "links", "num", "num_no_build", "published_by", "rust_version", "updated_at", "yanked") TO 'data/versions.csv' WITH CSV HEADER
2121
\copy "default_versions" ("crate_id", "version_id") TO 'data/default_versions.csv' WITH CSV HEADER
2222
\copy "dependencies" ("crate_id", "default_features", "explicit_name", "features", "id", "kind", "optional", "req", "target", "version_id") TO 'data/dependencies.csv' WITH CSV HEADER
2323
\copy "version_downloads" ("date", "downloads", "version_id") TO 'data/version_downloads.csv' WITH CSV HEADER

crates/crates_io_database_dump/src/snapshots/[email protected]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ BEGIN;
5959
\copy "crates_categories" ("category_id", "crate_id") FROM 'data/crates_categories.csv' WITH CSV HEADER
6060
\copy "crates_keywords" ("crate_id", "keyword_id") FROM 'data/crates_keywords.csv' WITH CSV HEADER
6161
\copy "crate_owners" ("crate_id", "created_at", "created_by", "owner_id", "owner_kind") FROM 'data/crate_owners.csv' WITH CSV HEADER
62-
\copy "versions" ("bin_names", "checksum", "crate_id", "crate_size", "created_at", "downloads", "features", "has_lib", "id", "license", "links", "num", "published_by", "rust_version", "updated_at", "yanked") FROM 'data/versions.csv' WITH CSV HEADER
62+
\copy "versions" ("bin_names", "checksum", "crate_id", "crate_size", "created_at", "downloads", "features", "has_lib", "id", "license", "links", "num", "num_no_build", "published_by", "rust_version", "updated_at", "yanked") FROM 'data/versions.csv' WITH CSV HEADER
6363
\copy "default_versions" ("crate_id", "version_id") FROM 'data/default_versions.csv' WITH CSV HEADER
6464
\copy "dependencies" ("crate_id", "default_features", "explicit_name", "features", "id", "kind", "optional", "req", "target", "version_id") FROM 'data/dependencies.csv' WITH CSV HEADER
6565
\copy "version_downloads" ("date", "downloads", "version_id") FROM 'data/version_downloads.csv' WITH CSV HEADER
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
alter table versions
2+
drop num_no_build;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
alter table versions
2+
add num_no_build varchar;
3+
4+
comment on column versions.num_no_build is 'This is the same as `num` without the optional "build metadata" part (except for some versions that were published before we started validating this).';
5+
6+
-- to be run manually:
7+
8+
-- update versions
9+
-- set num_no_build = split_part(num, '+', 1);
10+
--
11+
-- with duplicates as (
12+
-- -- find all versions that have the same `crate_id` and `num_no_build`
13+
-- select crate_id, num_no_build, array_agg(num ORDER BY id) as nums
14+
-- from versions
15+
-- group by crate_id, num_no_build
16+
-- having count(*) > 1
17+
-- ),
18+
-- duplicates_to_update as (
19+
-- -- for each group of duplicates, update all versions except the one that
20+
-- -- doesn't have "build metadata", or the first one that was published if
21+
-- -- all versions have "build metadata"
22+
-- select crate_id, num_no_build, unnest(case when array_position(nums, num_no_build) IS NOT NULL then array_remove(nums, num_no_build) else nums[2:] end) as num
23+
-- from duplicates
24+
-- )
25+
-- update versions
26+
-- set num_no_build = duplicates_to_update.num
27+
-- from duplicates_to_update
28+
-- where versions.crate_id = duplicates_to_update.crate_id
29+
-- and versions.num = duplicates_to_update.num;

src/models/version.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub struct Version {
3434
pub has_lib: Option<bool>,
3535
pub bin_names: Option<Vec<Option<String>>>,
3636
pub yank_message: Option<String>,
37+
pub num_no_build: Option<String>,
3738
}
3839

3940
impl Version {

0 commit comments

Comments
 (0)