Skip to content

Commit 2b0fd55

Browse files
committed
fix: Add ON DELETE CASCADE to WebFeatures foreign keys
Fixes #513 Previously, deleting a record from the WebFeatures table would fail if it was referenced by other tables. This change updates all foreign key constraints that reference WebFeatures(ID) to include ON DELETE CASCADE. This ensures that when a feature is deleted, all its associated data in other tables is automatically removed. The constraints have also been given explicit names to improve schema manageability. An integration test has been added to verify the cascade behavior across all related tables and prevent regressions.
1 parent 961eb4b commit 2b0fd55

File tree

6 files changed

+455
-5
lines changed

6 files changed

+455
-5
lines changed

infra/storage/spanner/migrations/000001.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ CREATE TABLE IF NOT EXISTS WPTRunFeatureMetrics (
7070
BrowserName STRING(64) NOT NULL,
7171
TimeStart TIMESTAMP NOT NULL,
7272
-- End denormalized data.
73-
FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID),
73+
CONSTRAINT FK_WPTRunFeatureMetricsWebFeatureID FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID) ON DELETE CASCADE,
7474
FOREIGN KEY (ID) REFERENCES WPTRuns(ID)
7575
) PRIMARY KEY (ID, WebFeatureID)
7676
, INTERLEAVE IN PARENT WPTRuns ON DELETE CASCADE;
@@ -101,7 +101,7 @@ CREATE TABLE IF NOT EXISTS BrowserFeatureAvailabilities (
101101
BrowserName STRING(64) NOT NULL, -- From BCD not wpt.fyi.
102102
BrowserVersion STRING(8) NOT NULL, -- From BCD not wpt.fyi. Only contains major number.
103103
WebFeatureID STRING(36) NOT NULL, -- From web features table.
104-
FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID),
104+
CONSTRAINT FK_BrowserFeatureAvailabilitiesWebFeatureID FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID) ON DELETE CASCADE,
105105
FOREIGN KEY (BrowserName, BrowserVersion) REFERENCES BrowserReleases(BrowserName, BrowserVersion),
106106
) PRIMARY KEY (WebFeatureID, BrowserName);
107107

@@ -115,7 +115,7 @@ CREATE TABLE IF NOT EXISTS FeatureBaselineStatus (
115115
Status STRING(16),
116116
LowDate TIMESTAMP,
117117
HighDate TIMESTAMP,
118-
FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID),
118+
CONSTRAINT FK_FeatureBaselineStatusWebFeatureID FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID) ON DELETE CASCADE,
119119
-- Options come from https://github.com/web-platform-dx/web-features/blob/3d4d066c47c9f07514bf743b3955572a6073ff1e/packages/web-features/README.md?plain=1#L17-L24
120120
CHECK (Status IN ('none', 'low', 'high'))
121121
) PRIMARY KEY (WebFeatureID);

infra/storage/spanner/migrations/000003.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
CREATE TABLE IF NOT EXISTS FeatureSpecs (
1717
WebFeatureID STRING(36) NOT NULL,
1818
Links ARRAY<STRING(128)>,
19-
FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID),
19+
CONSTRAINT FK_FeatureSpecsWebFeatureID FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID) ON DELETE CASCADE,
2020
) PRIMARY KEY (WebFeatureID);

infra/storage/spanner/migrations/000011.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS LatestDailyChromiumHistogramMetrics (
1717
WebFeatureID STRING(36) NOT NULL,
1818
ChromiumHistogramEnumValueID STRING(36) NOT NULL,
1919
Day DATE NOT NULL,
20-
FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID),
20+
FOREIGN KEY (WebFeatureID) REFERENCES WebFeatures(ID) ON DELETE CASCADE,
2121
FOREIGN KEY (ChromiumHistogramEnumValueID) REFERENCES ChromiumHistogramEnumValues(ID) ON DELETE CASCADE,
2222
FOREIGN KEY (ChromiumHistogramEnumValueID, Day) REFERENCES DailyChromiumHistogramMetrics(ChromiumHistogramEnumValueID, Day) ON DELETE CASCADE,
2323
) PRIMARY KEY (WebFeatureID, ChromiumHistogramEnumValueID);

0 commit comments

Comments
 (0)