from tht.mschema.models import Annotations, PhysicalSchema def find_orphans(physical: PhysicalSchema, annotations: Annotations) -> list[str]: """Annotazioni che puntano a oggetti spariti dal fisico. Non le rimuove mai.""" orphans: list[str] = [] for table_name, table_ann in annotations.tables.items(): table = physical.tables.get(table_name) if table is None: orphans.append(table_name) continue for column_name in table_ann.columns: if column_name not in table.columns: orphans.append(f"{table_name}.{column_name}") for fk in table_ann.foreign_keys: label = f"{table_name}.fk({','.join(fk.columns)})->{fk.ref_table}" ref = physical.tables.get(fk.ref_table) if ref is None: orphans.append(label) continue missing = [c for c in fk.columns if c not in table.columns] missing += [c for c in fk.ref_columns if c not in ref.columns] if missing: orphans.append(label) return orphans