27 lines
1.3 KiB
Python
27 lines
1.3 KiB
Python
from ..connection import connect
|
|
from ..slugify import slugify
|
|
from ..definitions.definitions_referencing import definitions_referencing
|
|
from ..definitions.get_definition import get_definition
|
|
|
|
|
|
def rows_referencing(slug, definition_id, row_id):
|
|
"""Pour l'écran de suppression d'une ligne : liste, pour chaque objet
|
|
qui a une relation vers l'objet de cette ligne, combien de ses lignes
|
|
pointent vers CETTE ligne précise — pour avertir avant une suppression
|
|
qui laisserait des relations orphelines (aucune suppression en cascade
|
|
n'est faite automatiquement, par sécurité)."""
|
|
refs = []
|
|
for d in definitions_referencing(slug, definition_id):
|
|
full = get_definition(slug, d["id"])
|
|
for f in full["fields"]:
|
|
if f["type"] == "relation" and f["relation_definition_id"] == definition_id:
|
|
col = slugify(f["name"]).replace("-", "_") + "_id"
|
|
conn = connect(slug)
|
|
count = conn.execute(
|
|
f"SELECT COUNT(*) AS c FROM {full['table_name']} WHERE {col} = ?", (row_id,)
|
|
).fetchone()["c"]
|
|
conn.close()
|
|
if count:
|
|
refs.append({"definition_name": full["name"], "field_name": f["name"], "count": count})
|
|
return refs
|