LANGUAGE SQL
BEGIN

    BEGIN

             DECLARE GLOBAL TEMPORARY TABLE SESSION.core
            (
                Id INTEGER ,
                ddclElemName 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
                WITH REPLACE 
                ON COMMIT PRESERVE ROWS
                NOT LOGGED;


            INSERT INTO SESSION.core
            SELECT  -- core data
                    de.Id,
                    de.Name AS ddclElemName,
                    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 IMMEDIATE ;
                  --DELETE FROM 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.ElementName 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 ElementName AS ElementName FROM EZViewer_IDMSX_View GROUP BY ElementName) t ON t.ElementName = core.ddclElemName
                      )c
                       LEFT OUTER JOIN  Paths pth1 ON pth1.PathID = c.PathID;
                       COMMIT;

        END;
END 
