diff --git a/superset/migrations/versions/2023-08-09_14-17_8ace289026f3_add_on_delete_cascade_for_dashboard_slices.py b/superset/migrations/versions/2023-08-09_14-17_8ace289026f3_add_on_delete_cascade_for_dashboard_slices.py index caac489bd1b1a..42e3507f7ca83 100644 --- a/superset/migrations/versions/2023-08-09_14-17_8ace289026f3_add_on_delete_cascade_for_dashboard_slices.py +++ b/superset/migrations/versions/2023-08-09_14-17_8ace289026f3_add_on_delete_cascade_for_dashboard_slices.py @@ -14,7 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -"""add on delete cascade for dashboard slices +"""add on delete cascade for dashboard_slices Revision ID: 8ace289026f3 Revises: 2e826adca42c diff --git a/superset/migrations/versions/2023-08-09_15-39_4448fa6deeb1__dd_on_delete_cascade_for_embedded_dashboards.py.py b/superset/migrations/versions/2023-08-09_15-39_4448fa6deeb1__dd_on_delete_cascade_for_embedded_dashboards.py.py index b50f6375147c1..8d298863a6379 100644 --- a/superset/migrations/versions/2023-08-09_15-39_4448fa6deeb1__dd_on_delete_cascade_for_embedded_dashboards.py.py +++ b/superset/migrations/versions/2023-08-09_15-39_4448fa6deeb1__dd_on_delete_cascade_for_embedded_dashboards.py.py @@ -14,7 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -"""add on delete cascade for embedded dashboards +"""add on delete cascade for embedded_dashboards Revision ID: 4448fa6deeb1 Revises: 8ace289026f3 diff --git a/superset/migrations/versions/2023-09-15_12-58_4b85906e5b91_add_on_delete_cascade_for_dashboard_roles.py b/superset/migrations/versions/2023-09-15_12-58_4b85906e5b91_add_on_delete_cascade_for_dashboard_roles.py new file mode 100644 index 0000000000000..b712aca682528 --- /dev/null +++ b/superset/migrations/versions/2023-09-15_12-58_4b85906e5b91_add_on_delete_cascade_for_dashboard_roles.py @@ -0,0 +1,55 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""add on delete cascade for dashboard_roles + +Revision ID: 4b85906e5b91 +Revises: 317970b4400c +Create Date: 2023-09-15 12:58:26.772759 + +""" + +# revision identifiers, used by Alembic. +revision = "4b85906e5b91" +down_revision = "317970b4400c" + + +from superset.migrations.shared.constraints import ForeignKey, redefine + +foreign_keys = [ + ForeignKey( + table="dashboard_roles", + referent_table="dashboards", + local_cols=["dashboard_id"], + remote_cols=["id"], + ), + ForeignKey( + table="dashboard_roles", + referent_table="ab_role", + local_cols=["role_id"], + remote_cols=["id"], + ), +] + + +def upgrade(): + for foreign_key in foreign_keys: + redefine(foreign_key, on_delete="CASCADE") + + +def downgrade(): + for foreign_key in foreign_keys: + redefine(foreign_key) diff --git a/superset/models/dashboard.py b/superset/models/dashboard.py index 15dd600c120b0..c4e6f45c52533 100644 --- a/superset/models/dashboard.py +++ b/superset/models/dashboard.py @@ -127,8 +127,20 @@ def copy_dashboard(_mapper: Mapper, connection: Connection, target: Dashboard) - "dashboard_roles", metadata, Column("id", Integer, primary_key=True), - Column("dashboard_id", Integer, ForeignKey("dashboards.id"), nullable=False), - Column("role_id", Integer, ForeignKey("ab_role.id"), nullable=False), + Column( + "dashboard_id", + Integer, + ForeignKey("dashboards.id"), + nullable=False, + on_delete="CASCADE", + ), + Column( + "role_id", + Integer, + ForeignKey("ab_role.id"), + nullable=False, + on_delete="CASCADE", + ), )