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