LANGUAGE SQL
BEGIN

			-- declare temp tables
	                  DECLARE GLOBAL TEMPORARY TABLE session.sr
		               (
					    lnk INTEGER ,
					    isProc INTEGER ,
					    PgmOrProcName VARCHAR(256) ,
					    ProgramId INTEGER ,
					    ProgramTypeID INTEGER ,
					    PgmOrProcPath VARCHAR(250) ,
					    PgmOrProcStartRow INTEGER ,
					    PgmOrProcStartCol INTEGER ,
					    PgmOrProcEndRow INTEGER ,
					    PgmOrProcEndCol INTEGER
		                )
		                WITH REPLACE 
                        ON COMMIT PRESERVE ROWS
						NOT LOGGED;
		

                       DECLARE GLOBAL TEMPORARY TABLE session.core
		               (
							DataSetName VARCHAR(100) ,
							GenerationNumber INTEGER ,
							DataSetID INTEGER ,
							IsTemp INTEGER ,
							DataSetMemberName VARCHAR(50) ,
							JobID INTEGER ,
							JobName VARCHAR(50) ,
							MemberName VARCHAR(50) ,
							CA7JobName VARCHAR(255) ,
							CA7JobId INTEGER ,
							StepName VARCHAR(50) ,
							DDName VARCHAR(50) ,
							Status VARCHAR(50) ,
							NormalDisposition VARCHAR(50) ,
							IsDummy INTEGER ,
							OverridingDDID INTEGER ,
							CalledPgmID INTEGER ,
							CalledProcID INTEGER ,
							StepPathID INTEGER ,
							JobPathID INTEGER ,
							DDPathID INTEGER,
							AMSFlag SMALLINT,
						    AMSPath VARCHAR(250),
						    AMSStartRow INTEGER,
						    AMSEndRow INTEGER,
						    AMSStartCol INTEGER,
						    AMSEndCol INTEGER,
						    AMSUsageType VARCHAR(50),
						    AMSStatementType VARCHAR(50)
                         ) WITH REPLACE 
                           ON COMMIT PRESERVE ROWS
						   NOT LOGGED;


                        DECLARE GLOBAL TEMPORARY TABLE session.jpos
		               (
					    PositionID INTEGER ,
					    ResourceFilePath VARCHAR(250) ,
					    StartRow INTEGER,
					    StartCol INTEGER,
						EndRow INTEGER,
						EndCol INTEGER
		                ) WITH REPLACE 
                          ON COMMIT PRESERVE ROWS
						  NOT LOGGED;



                    -- fill in temp tables
                      INSERT INTO SESSION.jpos
                      SELECT PositionID,
                             ResourceFilePath,
                             StartRow ,
                             StartCol ,
						     EndRow ,
						     EndCol
                      FROM JCLPosition;
                      COMMIT;


                     -- CREATE UNIQUE INDEX uidx ON SESSION.jpos (PositionID) INCLUDE (ResourceFilePath, StartRow, StartCol, EndRow, EndCol) ;
                      CREATE INDEX uidx ON SESSION.jpos (PositionID ,ResourceFilePath, StartRow, StartCol, EndRow, EndCol) ;
                      COMMIT;




				      INSERT INTO session.sr
					  SELECT *
					  FROM
							(
							
							        SELECT
												j.PgmID AS lnk,
												0 AS isProc,
												COALESCE(prg.ProgramName, j.PgmName) AS PgmOrProcName,
												prg.ProgramID AS ProgramId,
												prg.ProgramTypeID,
												pth.PathStr AS PgmOrProcPath,
												occ.StartRow AS PgmOrProcStartRow,
												occ.StartCol AS PgmOrProcStartCol,
												occ.EndRow AS PgmOrProcEndRow,
												occ.EndCol AS PgmOrProcEndCol
										   FROM     (
		                                                   SELECT DISTINCT
		          												 PgmID,
		          												 PgmName 
							          						 FROM JCLPgm
							                                 WHERE PgmID != 0
							                         )j
										         LEFT OUTER JOIN
																		(
																			 SELECT DISTINCT
																			        pa.ProgramID,
																			        pa.AliasName AS AliasName
																			 FROM  ProgramAliases pa
																		  )  pal ON pal.AliasName =  j.PgmName
										
                                                LEFT OUTER JOIN
																		(
																			 SELECT pg.ProgramID,
																			        --pg.Ancestor,
																		            pg.ProgramTypeID,
																		            pg.OccurID,
																			        pa.AliasName AS ProgramName
																			 FROM Programs pg
																				   INNER JOIN ProgramAliases pa ON pg.ProgramID = pa.ProgramId AND pa.AliasType = 0
																		  )  prg ON prg.ProgramID = pal.ProgramID
													LEFT OUTER JOIN Occurrences occ ON occ.OccurID = prg.OccurID
													LEFT OUTER JOIN Paths pth ON pth.PathID = occ.PathID
				                           WHERE j.PgmID != 0
										
										   UNION
									
										   SELECT jp.ProcID AS lnk,
												1 AS isProc,
												jp.ProcName AS PgmOrProcName,	
												CAST(NULL AS INT) AS ProgramId,
												CAST(NULL AS INT) AS ProgramTypeID,	
													   CASE
														  WHEN ProcPosition.ResourceFilePath = '0'
														  THEN NULL
														  ELSE ProcPosition.ResourceFilePath
													   END AS PgmOrProcPath,
													   ProcPosition.StartRow AS PgmOrProcStartRow,
													   ProcPosition.StartCol AS PgmOrProcStartCol,
													   ProcPosition.EndRow AS PgmOrProcEndRow,
													   ProcPosition.EndCol AS PgmOrProcEndCol
											FROM JCLProc jp
												INNER JOIN SESSION.jpos AS ProcPosition ON ProcPosition.PositionID = jp.PositionID
										     WHERE jp.ProcID != 0
										)procORprog;
								COMMIT;		
										


	                      CREATE INDEX ncidx_sr	ON session.sr (isProc, lnk, PgmOrProcName, ProgramId, ProgramTypeID, PgmOrProcPath, PgmOrProcStartRow, PgmOrProcStartCol,PgmOrProcEndRow, PgmOrProcEndCol);
	                      COMMIT;





				         INSERT INTO session.core
						 SELECT
							    jpds.DataSetName,
							    CASE
								   WHEN jpds.IsGeneration = 1 THEN jpds.GenerationNumber
								   ELSE CAST(NULL AS INTEGER)
							    END AS GenerationNumber,
							    jpds.DataSetID,
							    jpds.IsTemp,
							    x.DataSetMemberName,
							    y.JobID,
							    y.JobName,
							    y.MemberName,
							    ca.JOB_NAME AS CA7JobName,
							    ca.JobId AS CA7JobId,
							    y.StepName,
							    x.DDName,
							    x.Status,
							    x.NormalDisposition,
							    x.IsDummy,
							    x.OverridingDDID,
							    y.CalledPgmID,
							    y.CalledProcID,
							    y.StepPathID,
							    y.JobPathID,
							    x.DDPathID,
								 -- new columns
							    x.AMSFlag,
								x.AMSPath,
								x.AMSStartRow,
								x.AMSEndRow,
								x.AMSStartCol,
								x.AMSEndCol,
								x.AMSUsageType,
								x.AMSStatementType
						  FROM
				                 (
										       SELECT    jj.JobID,
											             jj.JobName,
											             jj.MemberName,
								                         jj.PositionID AS JobPathID,
								                         js.StepName,
								                         js.StepID,
								                         js.CalledPgmID,
											             js.CalledProcID,
											             js.PositionID AS StepPathID
										       FROM  JCLJob jj
											           INNER JOIN JCLStep js ON jj.JobID = js.JobID
				                               WHERE js.CalledPgmID <> 0 OR js.CalledProcID <> 0
				                  ) y
                                   LEFT OUTER JOIN ca7_jobs ca ON ca.JCL_MEMBER = y.MemberName
							       INNER JOIN (
													SELECT  0 AS AMSFlag,
													       jdd.JobID,
														   jdd.StepID,
														   jdr.DataSetID,
														   jdd.DDName,
														   jdd.PositionID AS DDPathID,
														   CASE
															  WHEN jdd.DDID IS NULL THEN CAST(NULL AS INTEGER)
															  ELSE jdd.IsDummy
														   END AS IsDummy,
														   CASE
															  WHEN jdd.DDID IS NULL THEN CAST(NULL AS INTEGER)
															  ELSE jdd.OverridingDDID
														   END AS OverridingDDID,
														   jdr.MemberName AS DataSetMemberName,
														   jst.Description AS Status,
														   jd.Description AS NormalDisposition,
															-- new columns
														    CAST(NULL AS VARCHAR(250)) AS AMSPath,
														    CAST(NULL AS INTEGER) AS AMSStartRow,
														    CAST(NULL AS INTEGER) AS AMSEndRow,
														    CAST(NULL AS INTEGER) AS AMSStartCol,
														    CAST(NULL AS INTEGER) AS AMSEndCol,
														    CAST(NULL AS VARCHAR(50)) AS AMSUsageType,
														    CAST(NULL AS VARCHAR(50)) AS AMSStatementType
														    --  new columns
												    FROM  JCLDD jdd
														 INNER JOIN  JCLDDRef jdr ON jdr.DDID = jdd.DDID
														 INNER JOIN  JCLStatusType jst ON jdr.Status = jst.JCLStatusType
														 INNER JOIN  JCLDisposition jd ON jdr.NormalDisposition = jd.JCLDispositionType
						
													UNION
						
						
													SELECT  1 AS AMSFlag,
													        istm.JobID,
														    istm.StepID,
														    idu.DataSetID,
														    idu.DDName AS DDName,
														    CAST(NULL AS INTEGER) AS DDPathID,
														    CAST(NULL AS INTEGER) AS IsDummy,
														    CAST(NULL AS INTEGER) AS OverridingDDID,
														    idu.MemberName AS DataSetMemberName,
														    CAST(NULL AS VARCHAR(50)) AS Status,
														    CAST(NULL AS VARCHAR(50)) AS NormalDisposition,
														    -- new columns
														    jp.ResourceFilePath AS AMSPath,
														    jp.StartRow AS AMSStartRow,
														    jp.EndRow AS AMSEndRow,
														    jp.StartCol AS AMSStartCol,
														    jp.EndCol AS AMSEndCol,
														    idutp.Description AS AMSUsageType,
														    istmtp.Description AS AMSStatementType
														    -- new columns
													 FROM   JCLIDCAMSStatements istm
														    INNER JOIN  JCLIDCAMSDatasetUsages idu ON idu.IDCAMSStatementID = istm.IDCAMSStatementID
														    INNER JOIN  SESSION.jpos jp ON istm.PositionID = jp.PositionID
														    LEFT OUTER JOIN  JCLIDCAMSDatasetUsageTypes idutp ON idu.IDCAMSDatasetUsageTypeID = idutp.IDCAMSDatasetUsageTypeID
														    LEFT OUTER JOIN  JCLIDCAMSStatementTypes istmtp ON istm.IDCAMSStatementTypeID = istmtp.IDCAMSStatementTypeID
													   ) x ON x.JobID = y.JobID AND x.StepID = y.StepID
							  INNER JOIN JCLPhysicalDataSet jpds ON jpds.DataSetID = x.DataSetID AND jpds.IsInstream <> 1 ;
                              COMMIT;



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



						
						
						        LOCK TABLE cacheEZViewer_Usage_DSInJob IN EXCLUSIVE MODE ;-- lock table
						        INSERT INTO cacheEZViewer_Usage_DSInJob
					            SELECT *
					            FROM
					                (
						             SELECT
						                 c.DataSetName,
										 c.GenerationNumber,
										 c.DataSetID,
										 c.IsTemp,
										 c.DataSetMemberName,
										 c.JobID,
										 c.JobName,
										 c.MemberName,
										 c.CA7JobName,
										 c.CA7JobId,
										 pth1.ResourceFilePath AS JobPath,
										 c.StepName,
										 pth2.ResourceFilePath AS StepPath,
										 pth2.StartRow AS stepStartRow,
										 s.isProc,
										 s.PgmOrProcName,
										 c.DDName,
										 CASE
											WHEN pth3.ResourceFilePath = '0'
											THEN NULL
											ELSE pth3.ResourceFilePath
										 END AS DDPath,
										 pth3.StartRow AS DDStartRow,
										 c.Status,
										 c.NormalDisposition,
										 c.IsDummy,
										 c.OverridingDDID,
										 s.ProgramId,
										 s.ProgramTypeID,
										 s.PgmOrProcPath,
										 s.PgmOrProcStartRow,
										 s.PgmOrProcStartCol,
										 s.PgmOrProcEndRow,
										 s.PgmOrProcEndCol,
										 c.AMSFlag,
										 c.AMSUsageType,
										 c.AMSStatementType,
										 c.AMSPath,
										 c.AMSStartRow,
										 c.AMSStartCol,
										 c.AMSEndRow,
										 c.AMSEndCol
									FROM session.core c
											  INNER JOIN session.sr s ON s.isProc = 1 AND c.CalledProcID = s.lnk
											  INNER JOIN SESSION.jpos pth1 ON pth1.PositionID = c.JobPathID
											  INNER JOIN SESSION.jpos pth2 ON pth2.PositionID = c.StepPathID
											  LEFT OUTER JOIN SESSION.jpos pth3 ON pth3.PositionID = c.DDPathID
											
		                               UNION
		
								     SELECT
								             c.DataSetName,
											 c.GenerationNumber,
											 c.DataSetID,
											 c.IsTemp,
											 c.DataSetMemberName,
											 c.JobID,
											 c.JobName,
											 c.MemberName,
											 c.CA7JobName,
											 c.CA7JobId,
											 pth1.ResourceFilePath AS JobPath,
											 c.StepName,
											 pth2.ResourceFilePath AS StepPath,
											 pth2.StartRow AS stepStartRow,
											 s.isProc,
											 s.PgmOrProcName,
											 c.DDName,
											 CASE
												WHEN pth3.ResourceFilePath = '0' THEN NULL
												ELSE pth3.ResourceFilePath
											 END AS DDPath,
											 pth3.StartRow AS DDStartRow,
											 c.Status,
											 c.NormalDisposition,
											 c.IsDummy,
											 c.OverridingDDID,
											 s.ProgramId,
											 s.ProgramTypeID,
											 s.PgmOrProcPath,
											 s.PgmOrProcStartRow,
											 s.PgmOrProcStartCol,
											 s.PgmOrProcEndRow,
											 s.PgmOrProcEndCol,
											 c.AMSFlag,
											 c.AMSUsageType,
											 c.AMSStatementType,
											 c.AMSPath,
											 c.AMSStartRow,
											 c.AMSStartCol,
											 c.AMSEndRow,
											 c.AMSEndCol
										FROM session.core c
												  INNER JOIN session.sr s ON s.isProc = 0 AND c.CalledPgmID = s.lnk
												  INNER JOIN SESSION.jpos pth1 ON pth1.PositionID = c.JobPathID
												  INNER JOIN SESSION.jpos pth2 ON pth2.PositionID = c.StepPathID
												  LEFT OUTER JOIN SESSION.jpos pth3 ON pth3.PositionID = c.DDPathID
	
                                    )src;
                                    COMMIT;


END 
