Skip to content
Snippets Groups Projects
Select Git revision
  • 8f2dd1ea98d8d0caec131c60d2d6bf7f43375cde
  • master default
  • disable-new-requests
  • fix-bulletin-view-missing-notes-error
  • add-missing-queue-managers
  • projects-task-53
  • projects-task-51
  • projects-task-43
  • projects-task-24
  • projects-task-31
  • projects-task-32
  • projects-task-8
  • project-setup-docs
  • projects-task-28
  • projects-task-27
  • projects-task-9
  • projects-task-7
  • mass-update-course-codes-in-sections
  • wdn-four
  • learning-outcomes
  • additional-bulletin-pages
  • svn-redesign
  • svn-popups
  • svn-trunk
  • svn-performance
  • svn-tim
26 results

creq_proc.sql

Blame
  • creq_proc.sql 6.20 KiB
    --
    -- Dumping routines for database 'creq'
    --
    /*!50003 DROP PROCEDURE IF EXISTS `creqGroupMemberships_Delete_Procedure` */;
    /*!50003 SET @saved_cs_client      = @@character_set_client */ ;
    /*!50003 SET @saved_cs_results     = @@character_set_results */ ;
    /*!50003 SET @saved_col_connection = @@collation_connection */ ;
    /*!50003 SET character_set_client  = utf8 */ ;
    /*!50003 SET character_set_results = utf8 */ ;
    /*!50003 SET collation_connection  = utf8_general_ci */ ;
    /*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
    /*!50003 SET sql_mode              = '' */ ;
    DELIMITER ;;
    CREATE DEFINER=`creq`@`%` PROCEDURE `creqGroupMemberships_Delete_Procedure`(IN parentId INT(4) UNSIGNED,
                                               IN childId INT(4) UNSIGNED)
    BEGIN
    DECLARE x INT(4) UNSIGNED;
    CREATE TEMPORARY TABLE IF NOT EXISTS 
      suspect(`parentGroup` INT(4) UNSIGNED,
              `childGroup` INT(4) UNSIGNED);
    CREATE TEMPORARY TABLE IF NOT EXISTS
      trusty1(`parentGroup` INT(4) UNSIGNED,
              `childGroup` INT(4) UNSIGNED);
    INSERT INTO suspect
    SELECT * FROM (
        SELECT X.`parentGroup`,
               Y.`childGroup`
        FROM `creqGroupImpliedMemberships` AS X,
             `creqGroupImpliedMemberships` AS Y
        WHERE X.`childGroup` = parentId 
          AND Y.`parentGroup` = childId
      UNION
        SELECT X.`parentGroup`,
               childId AS `childGroup`
        FROM `creqGroupImpliedMemberships` AS X
        WHERE X.`childGroup` = parentId
      UNION
        SELECT parentId AS `parentGroup`,
               X.`childGroup`
        FROM `creqGroupImpliedMemberships` AS X
        WHERE X.`parentGroup` = childId
      UNION
        SELECT parentId AS `parentGroup`, 
               childId as `childGroup`
        FROM `creqGroupImpliedMemberships` AS X
        WHERE X.`parentGroup` = parentId 
          AND X.`childGroup` = childId
    ) AS TMP3;
    INSERT INTO trusty1
    SELECT * FROM ( 
        SELECT `parentGroup`, `childGroup`
          FROM `creqGroupImpliedMemberships` AS TC6
        WHERE NOT EXISTS(
          SELECT * FROM suspect
          WHERE suspect.`parentGroup` = TC6.`parentGroup`
            AND suspect.`childGroup` = TC6.`childGroup`
        )
      UNION
        SELECT `parentGroup`, `childGroup`
          FROM `creqGroupMemberships` AS G1
        WHERE G1.`parentGroup` != parentId 
          AND G1.`childGroup` != childId
    ) AS TMP4;
    CREATE TEMPORARY TABLE IF NOT EXISTS trusty2 SELECT * FROM trusty1;
    CREATE TEMPORARY TABLE IF NOT EXISTS trusty3 SELECT * FROM trusty1;
    CREATE TEMPORARY TABLE IF NOT EXISTS trusty4 SELECT * FROM trusty1;
    CREATE TEMPORARY TABLE IF NOT EXISTS trusty5 SELECT * FROM trusty1;
    CREATE TEMPORARY TABLE IF NOT EXISTS trusty6 SELECT * FROM trusty1;
    DELETE FROM `creqGroupImpliedMemberships`
    WHERE NOT EXISTS (
      SELECT * FROM (
        SELECT * FROM(
            SELECT * FROM trusty1
          UNION
            SELECT trusty2.`parentGroup`,
                   trusty3.`childGroup`
            FROM trusty2,
                 trusty3
            WHERE trusty2.`childGroup` = trusty3.`parentGroup`
          UNION
            SELECT trusty4.`parentGroup`,
                   trusty6.`childGroup`
            FROM trusty4,
                 trusty5,
                 trusty6
            WHERE trusty4.`childGroup` = trusty5.`parentGroup`
              AND trusty5.`childGroup` = trusty6.`parentGroup`
        ) AS TMP5
      ) AS TMP6
      WHERE TMP6.`parentGroup` = `creqGroupImpliedMemberships`.`parentGroup`
        AND TMP6.`childGroup` = `creqGroupImpliedMemberships`.`childGroup`
    );
    UPDATE `creqGroupImpliedMemberships` 
       SET explicit='no' 
     WHERE `parentGroup` = parentId
       AND `childGroup` = childId;
    DELETE FROM suspect;
    DELETE FROM trusty1;
    DELETE FROM trusty2;
    DELETE FROM trusty3;
    DELETE FROM trusty4;
    DELETE FROM trusty5;
    DELETE FROM trusty6;
    END ;;
    DELIMITER ;
    /*!50003 SET sql_mode              = @saved_sql_mode */ ;
    /*!50003 SET character_set_client  = @saved_cs_client */ ;
    /*!50003 SET character_set_results = @saved_cs_results */ ;
    /*!50003 SET collation_connection  = @saved_col_connection */ ;
    /*!50003 DROP PROCEDURE IF EXISTS `creqGroupMemberships_Insert_Procedure` */;
    /*!50003 SET @saved_cs_client      = @@character_set_client */ ;
    /*!50003 SET @saved_cs_results     = @@character_set_results */ ;
    /*!50003 SET @saved_col_connection = @@collation_connection */ ;
    /*!50003 SET character_set_client  = utf8 */ ;
    /*!50003 SET character_set_results = utf8 */ ;
    /*!50003 SET collation_connection  = utf8_general_ci */ ;
    /*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
    /*!50003 SET sql_mode              = '' */ ;
    DELIMITER ;;
    CREATE DEFINER=`creq`@`%` PROCEDURE `creqGroupMemberships_Insert_Procedure`(IN parentId INT(4) UNSIGNED,
                                               IN childId INT(4) UNSIGNED,
                                               IN typeId INT(4) UNSIGNED)
    BEGIN
    DECLARE x INT(4) UNSIGNED;
    CREATE TEMPORARY TABLE IF NOT EXISTS 
      tcNew(`parentGroup` INT(4) UNSIGNED,
             `childGroup` INT(4) UNSIGNED);
    INSERT INTO tcNew
    SELECT * FROM (
    	SELECT * FROM (
    		SELECT TC1.`parentGroup`,
    		       childId AS `childGroup` 
    		FROM `creqGroupImpliedMemberships` AS TC1
    		WHERE TC1.`childGroup` = parentId
    	  UNION
    		SELECT parentId AS `parentGroup`,
    		       TC2.`childGroup`
    		FROM `creqGroupImpliedMemberships` AS TC2
    		WHERE TC2.`parentGroup` = childId
    	  UNION
    		SELECT TC3.`parentGroup`,
    		       TC4.`childGroup`
    		FROM `creqGroupImpliedMemberships` AS TC3,
    		     `creqGroupImpliedMemberships` AS TC4
    		WHERE TC3.`childGroup` = parentId 
    		  AND TC4.`parentGroup` = childId
    	  UNION
    	    SELECT parentId,
    	           childId
    	) AS TMP1
    ) AS TMP2 
    WHERE NOT EXISTS(
      SELECT * FROM 
        `creqGroupImpliedMemberships` AS TC5
      WHERE TC5.`parentGroup`=TMP2.`parentGroup` 
        AND TC5.`childGroup`=TMP2.`childGroup`
    );
    IF(
      (
        SELECT COUNT(*) AS dupes 
          FROM tcNew 
          WHERE `parentGroup`=`childGroup`
      ) != 0
    ) THEN
      DELETE FROM tcNew;
      SELECT raiseError('Adding this edge would create a cycle') INTO x;
    END IF;
    INSERT INTO `creqGroupImpliedMemberships`(`parentGroup`, `childGroup`, `type`)
      SELECT *, typeId FROM tcNew;
    UPDATE `creqGroupImpliedMemberships` 
       SET explicit='yes' 
     WHERE `parentGroup` = parentId
       AND `childGroup` = childId;
    DELETE FROM tcNew;
    END ;;
    DELIMITER ;
    /*!50003 SET sql_mode              = @saved_sql_mode */ ;
    /*!50003 SET character_set_client  = @saved_cs_client */ ;
    /*!50003 SET character_set_results = @saved_cs_results */ ;
    /*!50003 SET collation_connection  = @saved_col_connection */ ;