Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

CREATE PROCEDURE "RELEASE_MANAGER"."CHECK_NEW_PATCHES" (
   nrtagid   IN   release_content.rtag_id%TYPE
)
IS
/* ---------------------------------------------------------------------------
    Version: 3.0
   --------------------------------------------------------------------------- */
BEGIN
   /*--------------- Business Rules Here -------------------*/
   /*IF nRtagId NOT IN (SELECT RTAG_ID FROM RELEASE_TAGS ) THEN
      RAISE_APPLICATION_ERROR (-20000, 'Please contact the person in charge of Release Manager now.' );
   END IF

   /*-------------------------------------------------------*/
   UPDATE release_content rc
      SET rc.pkg_state = 5                          -- enumPKG_STATE_NEW_PATCH
    WHERE rc.pv_id IN (
             SELECT prod.pv_id
               FROM (SELECT   pp.pv_id AS orig_parent_id,
                              COUNT (*) AS num_of_patches
                         FROM release_content rc, package_patches pp
                        WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
                     GROUP BY pp.pv_id) orig,
                    (SELECT   prodpp.pv_id, pp.pv_id AS parent_id,
                              COUNT (*) AS num_of_patches
                         FROM release_content rc,
                              package_patches pp,
                              package_dependencies dep,
                              package_versions pv,
                              package_patches prodpp
                        WHERE rc.pv_id = pp.pv_id
                          AND rc.rtag_id = nrtagid
                          AND pp.patch_id = dep.dpv_id
                          AND dep.pv_id = pv.pv_id
                          AND pv.is_patch = 'Y'
                          AND pv.dlocked = 'Y'
                          AND prodpp.patch_id = dep.pv_id
                     GROUP BY prodpp.pv_id, pp.pv_id) prod,
                    release_content rc
              WHERE orig.orig_parent_id = prod.pv_id
                AND orig.num_of_patches != prod.num_of_patches
                AND rc.rtag_id = nrtagid
                AND rc.pv_id = prod.pv_id
                AND rc.pkg_state = 0
             UNION
             SELECT   prodpp.pv_id
                 FROM release_content rc,
                      package_patches pp,
                      package_dependencies dep,
                      package_versions pv,
                      package_patches prodpp
                WHERE rc.pv_id = pp.pv_id
                  AND rc.rtag_id = nrtagid
                  AND pp.patch_id = dep.dpv_id
                  AND dep.pv_id = pv.pv_id
                  AND pv.is_patch = 'Y'
                  AND pv.dlocked = 'Y'
                  AND prodpp.patch_id = dep.pv_id
             GROUP BY prodpp.pv_id, pp.pv_id
             MINUS
             SELECT   pp.pv_id
                 FROM release_content rc, package_patches pp
                WHERE rc.pv_id = pp.pv_id AND rc.rtag_id = nrtagid
             GROUP BY pp.pv_id);
END check_new_patches;
/