LANGUAGE SQL
BEGIN   


        -- clean up temp table if exists 
        BEGIN
            DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
            BEGIN END;
            
            COMMIT;
            DROP TABLE SESSION.core;
    
        END;

    BEGIN
            
             DECLARE GLOBAL TEMPORARY TABLE SESSION.core
            ( 
                Id INTEGER ,
                ddclElemName VARGRAPHIC(400) ,
                ddclElemNameU VARGRAPHIC(400) ,
                CreateDate TIMESTAMP ,
                UpdateDate TIMESTAMP ,
                StartRow INTEGER ,
                StartCol INTEGER ,
                EndRow INTEGER ,
                EndCol INTEGER ,
                Description VARGRAPHIC(1024) ,
                DdsTypeId INTEGER ,
                Flag1 INTEGER ,
                ProgramId INTEGER 
            )   CCSID UNICODE
                ON COMMIT PRESERVE ROWS
                NOT LOGGED;


            INSERT INTO SESSION.core
            SELECT  -- core data 
                    de.Id,
                    de.Name AS ddclElemName,
                    UPPER(de.Name) AS ddclElemNameU,
                    dv.CreateDate,
                    dv.UpdateDate,
                    ds.StartRow,
                    ds.StartCol,
                    ds.EndRow,
                    ds.EndCol,
                    dt.Description,
                    de.DdsTypeId,
                    CASE WHEN  de.DdsTypeId IN (3, 10) THEN 1
                         ELSE 0
                    END AS Flag1, 
                    ds.ProgramId
               FROM DDCLElement de
                   INNER JOIN DDCLVersionInfo dv ON de.VersionInfoId = dv.Id
                   INNER JOIN DDCLSourceInfo ds ON de.SourceInfo = ds.Id
                   INNER JOIN DDCLDdsType dt ON de.DdsTypeId = dt.Id
               WHERE de.islocal = 0 --'false' 
               ;
               COMMIT;




            BEGIN
                  COMMIT; 
                  TRUNCATE TABLE cacheEZViewer_Usage_DDCL ;
            END;


            LOCK TABLE  cacheEZViewer_Usage_DDCL IN EXCLUSIVE MODE ;-- lock table
            INSERT INTO cacheEZViewer_Usage_DDCL 
            SELECT  Id, ddclElemName, CreateDate, UpdateDate,
                    pth1.PathStr AS ddclPath,        
                    StartRow, StartCol, EndRow, EndCol, Description, DdsTypeId,
                    PropertyName, PropertyId, pth1.PathStr AS PropertyPath,
                    PropertyStartRow, PropertyStartCol, PropertyEndRow, PropertyEndCol, IsIDMSX
            FROM(
                      SELECT  DISTINCT
                            core.Id,
                            core.ddclElemName,
                            core.CreateDate,
                            core.UpdateDate,
                            core.StartRow,
                            core.StartCol,
                            core.EndRow,
                            core.EndCol,
                            core.Description,
                            core.DdsTypeId,
                            CASE WHEN core.Flag1 = 1 AND t.ElementNameU IS NOT NULL THEN  1
                                 ELSE 0
                            END AS IsIDMSX, 
                            dp.Name AS PropertyName,
                            dp.Id AS PropertyId,
                            ds2.StartRow AS PropertyStartRow,
                            ds2.StartCol AS PropertyStartCol,
                            ds2.EndRow AS PropertyEndRow,
                            ds2.EndCol AS PropertyEndCol,
                            prog.PathID
                      FROM  SESSION.core core
                            INNER JOIN ( -- programs
                                          SELECT p.ProgramID, occ.PathID 
                                          FROM Occurrences occ
                                               INNER JOIN Programs p ON p.OccurID = occ.OccurID 
                                          WHERE EXISTS ( SELECT 1 FROM SESSION.core f WHERE f.ProgramID = p.ProgramID )
                                               AND occ.PathID IS NOT NULL
                                    ) prog ON core.ProgramId = prog.ProgramID  
                           LEFT OUTER JOIN DDCLProperty dp ON dp.ElementId = core.Id
                           LEFT OUTER JOIN DDCLSourceInfo ds2 ON dp.SourceInfo = ds2.Id
                           LEFT OUTER JOIN (SELECT UPPER(ElementName) AS ElementNameU FROM EZViewer_IDMSX_View GROUP BY UPPER(ElementName)) t ON t.ElementNameU = core.ddclElemNameU
                      )c
                       LEFT OUTER JOIN  Paths pth1 ON pth1.PathID = c.PathID;
                       COMMIT;
                       
        END;               
END