Skip to content

Commit 879c1e2

Browse files
committed
db: Add default_versions.num_versions column
1 parent 223ccc1 commit 879c1e2

File tree

6 files changed

+35
-2
lines changed

6 files changed

+35
-2
lines changed

crates/crates_io_database/src/schema.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,8 @@ diesel::table! {
408408
crate_id -> Int4,
409409
/// Reference to the version in the `versions` table.
410410
version_id -> Int4,
411+
/// The total number of versions.
412+
num_versions -> Int4,
411413
}
412414
}
413415

crates/crates_io_database_dump/src/dump-db.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ dependencies = ["crates", "versions"]
105105
[default_versions.columns]
106106
crate_id = "public"
107107
version_id = "public"
108+
num_versions = "public"
108109

109110
[deleted_crates]
110111
dependencies = ["users"]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ BEGIN ISOLATION LEVEL REPEATABLE READ, READ ONLY;
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

2020
\copy "versions" ("bin_names", "categories", "checksum", "crate_id", "crate_size", "created_at", "description", "documentation", "downloads", "edition", "features", "has_lib", "homepage", "id", "keywords", "license", "links", "num", "num_no_build", "published_by", "repository", "rust_version", "updated_at", "yanked") TO 'data/versions.csv' WITH CSV HEADER
21-
\copy "default_versions" ("crate_id", "version_id") TO 'data/default_versions.csv' WITH CSV HEADER
21+
\copy "default_versions" ("crate_id", "num_versions", "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
2424
COMMIT;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ BEGIN;
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
6262
\copy "versions" ("bin_names", "categories", "checksum", "crate_id", "crate_size", "created_at", "description", "documentation", "downloads", "edition", "features", "has_lib", "homepage", "id", "keywords", "license", "links", "num", "num_no_build", "published_by", "repository", "rust_version", "updated_at", "yanked") FROM 'data/versions.csv' WITH CSV HEADER
63-
\copy "default_versions" ("crate_id", "version_id") FROM 'data/default_versions.csv' WITH CSV HEADER
63+
\copy "default_versions" ("crate_id", "num_versions", "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
6666

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE default_versions
2+
DROP COLUMN num_versions;
3+
4+
DROP FUNCTION IF EXISTS update_num_versions_from_versions CASCADE;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
ALTER TABLE default_versions
2+
ADD COLUMN num_versions INTEGER NOT NULL DEFAULT 0;
3+
4+
COMMENT ON COLUMN default_versions.num_versions IS 'The total number of versions.';
5+
6+
CREATE OR REPLACE FUNCTION update_num_versions_from_versions() RETURNS TRIGGER AS $$
7+
BEGIN
8+
IF (TG_OP = 'INSERT') THEN
9+
UPDATE default_versions
10+
SET num_versions = num_versions + 1
11+
WHERE crate_id = NEW.crate_id;
12+
RETURN NEW;
13+
ELSIF (TG_OP = 'DELETE') THEN
14+
UPDATE default_versions
15+
SET num_versions = num_versions - 1
16+
WHERE crate_id = OLD.crate_id;
17+
RETURN OLD;
18+
END IF;
19+
END
20+
$$ LANGUAGE plpgsql;
21+
22+
DROP TRIGGER IF EXISTS trigger_update_num_versions_from_versions ON versions;
23+
CREATE TRIGGER trigger_update_num_versions_from_versions
24+
AFTER INSERT OR DELETE ON versions
25+
FOR EACH ROW
26+
EXECUTE PROCEDURE update_num_versions_from_versions();

0 commit comments

Comments
 (0)