AS
BEGIN
SET NOCOUNT ON


	    IF OBJECT_ID('tempdb..#sr') IS NOT NULL DROP TABLE #sr
	  SELECT *
	  INTO #sr
	  FROM
			(
			 SELECT
								JCLPgm.PgmID AS lnk,
								0 AS isProc,
								case when ProgramName is null then JCLPgm.PgmName else ProgramName end AS PgmOrProcName,
								p.ProgramID AS ProgramId,
								p.ProgramTypeID,
								Paths.PathStr AS PgmOrProcPath,
								Occurrences.StartRow AS PgmOrProcStartRow,
								Occurrences.StartCol AS PgmOrProcStartCol,
								Occurrences.EndRow AS PgmOrProcEndRow,
								Occurrences.EndCol AS PgmOrProcEndCol
						   FROM dbo.JCLPgm
                                    LEFT OUTER JOIN (SELECT DISTINCT ProgramAliases.AliasName, ProgramAliases.ProgramId FROM dbo.ProgramAliases)ProgramAliases_1 ON ProgramAliases_1.AliasName = JCLPgm.PgmName
									LEFT OUTER JOIN (SELECT AliasName as ProgramName, p1.ProgramID, Occurid, ProgramTypeID  FROM dbo.Programs p1 INNER JOIN ProgramAliases p2 ON p1.ProgramID = p2.ProgramId and p2.AliasType = 0) p ON p.ProgramID = ProgramAliases_1.ProgramID
									LEFT OUTER JOIN dbo.Occurrences ON Occurrences.OccurID = p.OccurID
									LEFT OUTER JOIN dbo.Paths ON paths.PathID = Occurrences.PathID
                                 WHERE JCLPgm.PgmID != 0
						
						   UNION

					
						  SELECT JCLProc.ProcID AS lnk,
								1 AS isProc,
								JCLProc.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 dbo.JCLProc
								INNER JOIN dbo.JCLPosition AS ProcPosition ON ProcPosition.PositionID = JCLProc.PositionID
						     WHERE JCLProc.ProcID != 0
						)procORprog

		  CREATE NONCLUSTERED INDEX ncidx_sr
		  ON #sr([isProc])
		  INCLUDE ([lnk],[PgmOrProcName],[ProgramId],[ProgramTypeID],[PgmOrProcPath],[PgmOrProcStartRow],[PgmOrProcStartCol],[PgmOrProcEndRow],[PgmOrProcEndCol])


	
	       -- core data
		  IF OBJECT_ID('tempdb..#core') IS NOT NULL DROP TABLE #core
		  SELECT
			  pds.DataSetName,
			    CASE
				   WHEN pds.IsGeneration = '1'
				   THEN pds.GenerationNumber
				   ELSE NULL
			    END AS GenerationNumber,
			    pds.DataSetID,
			    pds.IsTemp,
			    x.DataSetMemberName,
			    JCLJob.JobID,
			    JCLJob.JobName,
			    JCLJob.MemberName,
			    ca7_jobs.JOB_NAME AS CA7JobName,
			    ca7_jobs.JobId AS CA7JobId,
			    JCLStep.StepName,
			    x.DDName,
			    x.Status,
			    x.NormalDisposition,
			    x.IsDummy,
			    x.OverridingDDID,
			    JCLStep.CalledPgmID,
			    JCLStep.CalledProcID,
			    JCLStep.PositionID AS StepPathID,
			    JCLJob.PositionID AS JobPathID,
			    x.DDPathID,
			    -- new columns
			     x.AMSFlag,
				x.AMSPath,
				x.AMSStartRow,
				x.AMSEndRow,
				x.AMSStartCol,
				x.AMSEndCol,
				x.AMSUsageType,
				x.AMSStatementType
	       INTO #core
		  FROM dbo.JCLJob
			  LEFT OUTER JOIN dbo.ca7_jobs ON ca7_jobs.JCL_MEMBER = JCLJob.MemberName
			  INNER JOIN dbo.JCLStep ON JCLJob.JobID = JCLStep.JobID
			  INNER JOIN (
							SELECT  0 AS AMSFlag,
							       JCLDD.JobID,
								  JCLDD.StepID,
								  JCLDDRef.DataSetID,
								  JCLDD.DDName,
								  JCLDD.PositionID AS DDPathID,
								  CASE
									  WHEN JCLDD.DDID IS NULL
									  THEN NULL
									  ELSE JCLDD.IsDummy
								   END AS IsDummy,
								   CASE
									  WHEN JCLDD.DDID IS NULL
									  THEN NULL
									  ELSE JCLDD.OverridingDDID
								   END AS OverridingDDID,
								   JCLDDRef.MemberName AS DataSetMemberName,
								   JCLStatusType.Description AS Status,
								   JCLDisposition.Description AS NormalDisposition,
									-- new columns
								    NULL AS AMSPath,
								    NULL AS AMSStartRow,
								    NULL AS AMSEndRow,
								    NULL AS AMSStartCol,
								    NULL AS AMSEndCol,
								    NULL AS AMSUsageType,
								    NULL AS AMSStatementType
								    --  new columns
						    FROM dbo.JCLDD
								 --LEFT OUTER JOIN dbo.JCLDD ON JCLDD.JobID = JCLJob.JobID AND JCLDD.StepID = JCLStep.StepID
								 INNER JOIN dbo.JCLDDRef ON JCLDDRef.DDID = JCLDD.DDID
								 INNER JOIN dbo.JCLStatusType ON JCLDDRef.Status = JCLStatusType.JCLStatusType
								 INNER JOIN dbo.JCLDisposition ON JCLDDRef.NormalDisposition = JCLDisposition.JCLDispositionType

							UNION


							SELECT  1 AS AMSFlag,
							        istm.JobID,
								   istm.StepID,
								   idu.DataSetID,
								   idu.DDName AS DDName,
								   NULL AS DDPathID,
								   NULL AS IsDummy,
								   NULL AS OverridingDDID,
								   idu.MemberName AS DataSetMemberName,
								   NULL AS Status,
								   NULL 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  dbo.JCLIDCAMSStatements istm
								    INNER JOIN dbo.JCLIDCAMSDatasetUsages idu ON idu.IDCAMSStatementID = istm.IDCAMSStatementID
								    INNER JOIN dbo.JCLPosition jp ON istm.PositionID = jp.PositionID
								    LEFT OUTER JOIN dbo.JCLIDCAMSDatasetUsageTypes idutp ON idu.IDCAMSDatasetUsageTypeID = idutp.IDCAMSDatasetUsageTypeID
								    LEFT OUTER JOIN dbo.JCLIDCAMSStatementTypes istmtp ON istm.IDCAMSStatementTypeID = istmtp.IDCAMSStatementTypeID
							   ) x ON x.JobID = JCLJob.JobID AND x.StepID = JCLStep.StepID
                  INNER JOIN dbo.JCLPhysicalDataSet pds ON pds.DataSetID = x.DataSetID AND pds.IsInstream <> 1
		  WHERE  (JCLStep.CalledPgmID <> 0 OR JCLStep.CalledProcID <> 0)


	   IF OBJECT_ID('dbo.cacheEZViewer_Usage_DSInJob') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_DSInJob

	   SELECT src.*
	   INTO dbo.cacheEZViewer_Usage_DSInJob
	   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,
					  sr.isProc,
					  sr.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,
					  sr.ProgramId,
					  sr.ProgramTypeID,
					  sr.PgmOrProcPath,
					  sr.PgmOrProcStartRow,
					  sr.PgmOrProcStartCol,
					  sr.PgmOrProcEndRow,
					  sr.PgmOrProcEndCol,
					  c.AMSFlag,
					  c.AMSUsageType,
					  c.AMSStatementType,
					  c.AMSPath,
					  c.AMSStartRow,
					  c.AMSStartCol,
					  c.AMSEndRow,
					  c.AMSEndCol
					  FROM #core c
						   INNER JOIN #sr sr ON sr.isProc = 0 AND c.CalledPgmID = sr.lnk
						   INNER JOIN dbo.JCLPosition pth1 ON pth1.PositionID = c.JobPathID
						   INNER JOIN dbo.JCLPosition pth2 ON pth2.PositionID = c.StepPathID
						   LEFT OUTER JOIN dbo.JCLPosition 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,
					  sr.isProc,
					  sr.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,
					  sr.ProgramId,
					  sr.ProgramTypeID,
					  sr.PgmOrProcPath,
					  sr.PgmOrProcStartRow,
					  sr.PgmOrProcStartCol,
					  sr.PgmOrProcEndRow,
					  sr.PgmOrProcEndCol,
					  c.AMSFlag,
					  c.AMSUsageType,
					  c.AMSStatementType,
					  c.AMSPath,
					  c.AMSStartRow,
					  c.AMSStartCol,
					  c.AMSEndRow,
					  c.AMSEndCol
					  FROM #core c
						   INNER JOIN #sr sr ON sr.isProc = 1 AND c.CalledProcID = sr.lnk
						   INNER JOIN dbo.JCLPosition pth1 ON pth1.PositionID = c.JobPathID
						   INNER JOIN dbo.JCLPosition pth2 ON pth2.PositionID = c.StepPathID
						   LEFT OUTER JOIN dbo.JCLPosition pth3 ON pth3.PositionID = c.DDPathID

			   ) src	

END