BEGIN

       -- DECLARATION AREA

          -- cobol -> 56, 1
            DECLARE GLOBAL TEMPORARY TABLE SESSION.appendix_1_56
	           (
	             DBName VARCHAR(20),
				 FileName VARCHAR(20),
				 FileID INTEGER
				 ) WITH REPLACE 
                   ON COMMIT PRESERVE ROWS
				   NOT LOGGED;
				
			 CREATE INDEX IX_2 ON SESSION.appendix_1_56 (FileID ASC) ; --CLUSTER;
				


          -- natural 	-> 193, 3
              DECLARE GLOBAL TEMPORARY TABLE SESSION.appendix_3_193
	           (
					viewid INTEGER ,
					DBName VARCHAR(16) ,
					FileName VARCHAR(16) ,
					FileID INTEGER ,
					AdabasView VARCHAR(50) ,
					NaturalView VARCHAR(50) ,
					ViewPath VARCHAR(250) ,
					ViewSource VARCHAR(50) ,
					ViewStartRow INTEGER ,
					ViewStartColumn INTEGER
		        )  WITH REPLACE 
                   ON COMMIT PRESERVE ROWS
		           NOT LOGGED;

            CREATE INDEX IX_3 ON SESSION.appendix_3_193 (viewid ASC) ; --CLUSTER;



            -- cobol -> 62, 1
	        DECLARE GLOBAL TEMPORARY TABLE SESSION.appendix_1_62
	           (ViewID INTEGER ,
				DBName VARCHAR(16) ,
				FileName VARCHAR(16) ,
				FileID INTEGER ,
				AdabasView VARCHAR(50)
				)WITH REPLACE 
                 ON COMMIT PRESERVE ROWS
				 NOT LOGGED;

              CREATE INDEX IX_4 ON SESSION.appendix_1_62 (viewid ASC); -- CLUSTER;


              -- cobol -> 62, 1
	        DECLARE GLOBAL TEMPORARY TABLE SESSION.core
	           (
	                Description VARCHAR(50) ,
					StatementStartRow INTEGER ,
					StatementStartColumn INTEGER ,
					StatementEndRow INTEGER ,
					StatementEndColumn INTEGER ,
					StmtPathStr VARCHAR(250) ,
					ProgramName VARCHAR(255) ,
					ProgramID INTEGER ,
					ProgramTypeID INTEGER ,
					ProgramPath VARCHAR(250) ,
					Ancestor VARCHAR(255) ,
					ProgStartRow INTEGER ,
					ProgStartCol INTEGER ,
					ProgEndRow INTEGER ,
					ProgEndCol INTEGER ,
					ResourceID INTEGER ,
					ResourceType INTEGER
				)WITH REPLACE 
                 ON COMMIT PRESERVE ROWS
				 NOT LOGGED;

           CREATE INDEX IX_1 ON SESSION.core (ResourceID ASC, ResourceType ASC, ProgramTypeid ASC); --CLUSTER;


         -- end declaration area



        -- fill in temp tables
           -- cobol -> 56, 1
           INSERT INTO SESSION.appendix_1_56
           SELECT
				COALESCE(mad.DBName,   CAST(ad.DBNumber AS VARCHAR(16))) AS DBName,
				COALESCE(maf.FileName, CAST(af.FileNumber AS VARCHAR(16))) AS FileName,
				af.FileID
			 FROM  AdabasFiles af
				LEFT OUTER JOIN AdabasDatabases ad  ON ad.AdabasDBID=af.AdabasDBID
				LEFT OUTER JOIN MFAdabasFiles maf ON maf.FileNumber=af.FileNumber
				LEFT OUTER JOIN MFAdabasDB mad ON mad.DBNumber= ad.DBNumber;
			COMMIT;	




          -- natural 	-> 193, 3
               INSERT INTO SESSION.appendix_3_193
               SELECT nv.viewid,
						 COALESCE(mad.DBName,   CAST( ad.DBNumber AS VARCHAR(16))) AS DBName,
						 COALESCE(maf.FileName, CAST( af.FileNumber AS VARCHAR(16))) AS FileName,
						 af.FileID,
						 n.DDMName as AdabasView,
						 nv.ViewName as NaturalView,
						 vpth.PathStr as ViewPath,
						 nv.ResourceName as ViewSource,
						 vo.StartRow as ViewStartRow,
						 vo.StartCol as ViewStartColumn
					 FROM NaturalDBView nv
		 				 INNER JOIN NaturalDDM n on n.DDM_ID = nv.DDM_ID AND n.ResourceType=62
		 				 INNER JOIN AdabasView av ON av.ViewID = n.ReferenceResourceID
		 				 INNER JOIN AdabasFiles af ON af.FileId = av.AdabasFileID
						 INNER JOIN AdabasDatabases ad ON ad.AdabasDBID = af.AdabasDBID	
						 LEFT OUTER JOIN MFAdabasFiles maf ON maf.FileNumber=af.FileNumber
		 				 LEFT OUTER JOIN MFAdabasDB mad ON mad.DBNumber= ad.DBNumber
						 LEFT OUTER JOIN Occurrences vo ON nv.OccurID = vo.OccurID
						 LEFT OUTER JOIN Paths vpth ON vo.PathID = vpth.PathID ;
                     COMMIT;




                    -- cobol -> 62, 1
			         INSERT INTO SESSION.appendix_1_62
			         SELECT av.ViewID,
						    COALESCE(mad.DBName,   CAST(ad.DBNumber AS VARCHAR(16) )) AS DBName,
						    COALESCE(maf.FileName, CAST(af.FileNumber AS VARCHAR(16) )) AS FileName,
						    af.FileID,
						    av.ViewName AS AdabasView
						FROM AdabasView av
						    LEFT OUTER JOIN AdabasFiles af ON af.FileId = av.AdabasFileID
						    LEFT OUTER JOIN AdabasDatabases ad  ON ad.AdabasDBID=af.AdabasDBID
						    LEFT OUTER JOIN MFAdabasFiles maf ON maf.FileNumber=af.FileNumber
						    LEFT OUTER JOIN MFAdabasDB mad ON mad.DBNumber= ad.DBNumber;
						COMMIT;
						   					
					
					
					     INSERT INTO SESSION.core
					     SELECT
				 				 s.Description,
								 os.StartRow AS StatementStartRow,
								 os.StartCol AS StatementStartColumn,
								 os.EndRow AS StatementEndRow,
								 os.EndCol AS StatementEndColumn,
								 pth1.PathStr as StmtPathStr,
								 p1.ProgramName,
								 p1.ProgramID,
								 p1.ProgramTypeID,
								 pth2.PathStr AS ProgramPath,
								 p1.Ancestor,
								 o.StartRow AS ProgStartRow,
								 o.StartCol AS ProgStartCol,
								 o.EndRow AS ProgEndRow,
								 o.EndCol AS ProgEndCol,
								 sr.ResourceID,
								 sr.ResourceType
							 FROM (SELECT ResourceID, ResourceType, OccurID,
							              CASE ResourceType
							                   WHEN 56 THEN 1
							                   WHEN 62 THEN 1
							                   ELSE 3
                                          END AS FlagProgramTypeID
							       FROM StatementReference
							       WHERE ResourceType IN (56, 62, 193)
							      )sr
				 				 INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
								 INNER JOIN Statements  s ON os.StatementType = s.StatementType
								 INNER JOIN
	                                    (
	                                         SELECT p.ProgramID,
								                    p.Ancestor,
										            p.ProgramTypeID,
										            p.OccurID,
								                    pa.AliasName AS ProgramName
								              FROM Programs p
								                   INNER JOIN ProgramAliases pa ON p.ProgramID = pa.ProgramId AND pa.AliasType = 0
								              WHERE p.ProgramTypeid IN (1, 3)
								          ) p1 ON os.ProgID = p1.ProgramID
								 INNER JOIN Paths pth1 ON pth1.PathID = os.PathID
								 INNER JOIN Occurrences o ON o.OccurID = p1.OccurID
								 INNER JOIN Paths pth2 on pth2.PathID = o.PathID
							 WHERE sr.FlagProgramTypeID  = p1.ProgramTypeID
							      /*
							       (sr.ResourceType IN (56, 62) AND p1.ProgramTypeid = 1) --cobol
								   OR
								  (sr.ResourceType IN (193) AND p1.ProgramTypeid = 3) --natural
								  */
					         ;
					         COMMIT;
					
						
                 -- end fill in temp tables





				BEGIN
					 COMMIT;
					 TRUNCATE TABLE cacheEZViewer_Usage_Adabas IMMEDIATE;
					 --DELETE FROM cacheEZViewer_Usage_Adabas ;
				END;



                -- fill in cache table
                LOCK TABLE   cacheEZViewer_Usage_Adabas IN EXCLUSIVE MODE ;-- lock table
                INSERT INTO  cacheEZViewer_Usage_Adabas
                SELECT DISTINCT
				   COALESCE(a1.DBName, a2.DBName, a3.DBName) AS DBName,
				   COALESCE(a1.FileName, a2.FileName, a3.FileName) AS FileName,
				   COALESCE(a1.FileID, a2.FileID, a3.FileID) AS FileID,
				   COALESCE(a2.AdabasView, a3.AdabasView) AS AdabasView,
				   a2.NaturalView,
				   a2.ViewPath,
				   a2.ViewSource,
				   a2.ViewStartRow,
				   a2.ViewStartColumn,
				    c.Description,
				    c.StatementStartRow,
				    c.StatementStartColumn,
				    c.StatementEndRow,
				    c.StatementEndColumn,
				    c.StmtPathStr,
				    c.ProgramName,
				    c.ProgramID,
				    c.ProgramTypeID,
				    c.ProgramPath,
				    c.Ancestor,
				    c.ProgStartRow,
				    c.ProgStartCol,
				    c.ProgEndRow,
				    c.ProgEndCol
			 FROM SESSION.core c
				 LEFT OUTER JOIN SESSION.appendix_1_56 a1  ON a1.FileID = c.ResourceID AND c.ResourceType = 56 AND c.ProgramTypeid = 1
				 LEFT OUTER JOIN SESSION.appendix_3_193 a2 ON a2.viewid = c.ResourceID AND c.ResourceType = 193 AND c.ProgramTypeid = 3
				 LEFT OUTER JOIN SESSION.appendix_1_62 a3  ON a3.viewid = c.ResourceID AND c.ResourceType = 62 AND c.ProgramTypeid = 1
			 WHERE (a1.FileID IS NOT NULL OR a2.viewid IS NOT NULL OR a3.viewid IS NOT NULL);
             COMMIT;


END 
