diff MySQL/Plugins/DeleteResources.sql @ 424:95c413106a66 improve-delete

Introduced a procedure to delete resources (to be tested)
author Alain Mazy <am@osimis.io>
date Wed, 13 Sep 2023 13:32:54 +0200
parents
children d0dd95ff0662
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MySQL/Plugins/DeleteResources.sql	Wed Sep 13 13:32:54 2023 +0200
@@ -0,0 +1,33 @@
+DROP PROCEDURE IF EXISTS DeleteResources;
+
+CREATE PROCEDURE DeleteResources(
+    IN p_id BIGINT
+)
+BEGIN
+    DECLARE v_internalId BIGINT@
+    DECLARE done INT DEFAULT FALSE@
+	DECLARE cur1 CURSOR FOR
+		SELECT internalId FROM DeletedResources@
+	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE@
+	set done=FALSE@	
+    -- Create a CTE to hold the temporary data ???
+    -- WITH DeletedResources AS (
+    --    SELECT internalId, resourceType, publicId
+    --    FROM Resources
+    -- )
+
+	CREATE TEMPORARY TABLE DeletedResources SELECT * FROM (
+		SELECT internalId, resourceType, publicId FROM Resources WHERE internalId=p_id OR parentId=p_id 
+			OR parentId IN (SELECT internalId FROM Resources WHERE parentId=p_id) 
+			OR parentId IN (SELECT internalId FROM Resources WHERE parentId IN (SELECT internalId FROM Resources WHERE parentId=p_id))) AS t@
+
+	OPEN cur1@
+	REPEAT
+		FETCH cur1 INTO v_internalId@
+		IF NOT done THEN
+		DELETE FROM Resources WHERE internalId=v_internalId@
+		END IF@
+	UNTIL done END REPEAT@
+	CLOSE cur1@
+
+END;
\ No newline at end of file