@@ -707,3 +707,87 @@ def get_investigation_dataset_polyp_algorithm_size(
707707 df = OracleDB ().execute_query (query , bind_vars )
708708 polyp_algorithm_size = df ["polyp_algorithm_size" ].iloc [0 ] if not df .empty else None
709709 return polyp_algorithm_size
710+
711+
712+ def delete_organisation_relationships_created_for_test (org_codes : list [str ]) -> None :
713+ """
714+ Deletes organisation relationships for the given org codes.
715+ Must be run first due to foreign key constraints.
716+ """
717+ placeholders = ", " .join ([f":org{ i } " for i in range (len (org_codes ))])
718+ subquery = f"SELECT ORG_ID FROM ORG WHERE ORG_CODE IN ({ placeholders } )"
719+
720+ query = f"""
721+ DELETE FROM ORG_RELATIONSHIPS
722+ WHERE CHILD_ORG_ID IN ({ subquery } )
723+ OR PARENT_ORG_ID IN ({ subquery } )
724+ """
725+
726+ params = {f"org{ i } " : code for i , code in enumerate (org_codes )}
727+ OracleDB ().update_or_insert_data_to_table (query , params )
728+
729+
730+ def delete_people_in_org_created_for_test (org_codes : list [str ]) -> None :
731+ """
732+ Deletes people in organisations for the given org codes.
733+ Must be run before deleting organisations due to foreign key constraints.
734+ """
735+ placeholders = ", " .join ([f":org{ i } " for i in range (len (org_codes ))])
736+ subquery = f"SELECT ORG_ID FROM ORG WHERE ORG_CODE IN ({ placeholders } )"
737+
738+ query = f"""
739+ DELETE FROM PERSON_IN_ORG
740+ WHERE ORG_ID IN ({ subquery } )
741+ """
742+
743+ params = {f"org{ i } " : code for i , code in enumerate (org_codes )}
744+ OracleDB ().update_or_insert_data_to_table (query , params )
745+
746+
747+ def delete_orgs_created_for_test (org_codes : list [str ]) -> None :
748+ """
749+ Deletes organisations for the given org codes.
750+ Must be run last due to foreign key constraints.
751+ """
752+ placeholders = ", " .join ([f":org{ i } " for i in range (len (org_codes ))])
753+ query = f"""
754+ DELETE FROM ORG
755+ WHERE ORG_CODE IN ({ placeholders } )
756+ """
757+
758+ params = {f"org{ i } " : code for i , code in enumerate (org_codes )}
759+ OracleDB ().update_or_insert_data_to_table (query , params )
760+
761+
762+ def delete_organisations_created_for_test (org_codes : list [str ]) -> None :
763+ """
764+ Deletes test organisations and related data in correct dependency order.
765+ """
766+ logging .info ("Start: delete_organisations_created_for_test(%s)" , org_codes )
767+
768+ delete_organisation_relationships_created_for_test (org_codes )
769+ delete_people_in_org_created_for_test (org_codes )
770+ delete_orgs_created_for_test (org_codes )
771+
772+ logging .info ("End: delete_organisations_created_for_test(%s)" , org_codes )
773+
774+
775+ def delete_sites_created_for_test (site_codes : list [str ]) -> None :
776+ """
777+ Deletes sites from the SITES table based on the given site codes.
778+ """
779+ logging .info ("Start: delete_sites_created_for_test(%s)" , site_codes )
780+
781+ # Dynamically create placeholders like :site0, :site1, ...
782+ placeholders = ", " .join ([f":site{ i } " for i in range (len (site_codes ))])
783+ query = f"""
784+ DELETE FROM SITES
785+ WHERE SITE_CODE IN ({ placeholders } )
786+ """
787+
788+ # Bind each site code to its placeholder
789+ params = {f"site{ i } " : code for i , code in enumerate (site_codes )}
790+
791+ OracleDB ().update_or_insert_data_to_table (query , params )
792+
793+ logging .info ("End: delete_sites_created_for_test(%s)" , site_codes )
0 commit comments