AS
BEGIN
SET NOCOUNT ON


--get needed data in one step (join only one time the big tables)
IF OBJECT_ID('tempdb..#core') IS NOT NULL DROP TABLE #core
SELECT StatementReference.ResourceID,
       StatementReference.ResourceType,
       Statements.Description,
       OccurrencesStmt.StartRow AS StatementStartRow,
       OccurrencesStmt.StartCol AS StatementStartColumn,
       OccurrencesStmt.EndRow AS StatementEndRow,
       OccurrencesStmt.EndCol AS StatementEndColumn,
       Paths_Stmt.PathStr AS StmtPathStr,
       p.ProgramName,
       p.ProgramID AS ProgramId,
       p.ProgramTypeID,
       Paths.PathStr AS ProgramPath,
       p.Ancestor AS Ancestor,
       Occurrences.StartRow AS ProgStartRow,
       Occurrences.StartCol AS ProgStartCol,
       Occurrences.EndRow AS ProgEndRow,
       Occurrences.EndCol AS ProgEndCol
INTO #core 
FROM  dbo.StatementReference 
      INNER JOIN dbo.OccurrencesStmt ON OccurrencesStmt.OccurID = StatementReference.OccurID
      INNER JOIN dbo.Paths AS Paths_Stmt ON Paths_Stmt.PathID = OccurrencesStmt.PathID
      INNER JOIN (SELECT OccurId, AliasName as ProgramName, p1.ProgramID, ProgramTypeID, Ancestor FROM dbo.Programs p1
                        INNER JOIN dbo.ProgramAliases p2 ON p1.ProgramId = p2.ProgramId and p2.AliasType = 0) p ON OccurrencesStmt.ProgID = p.ProgramID
      INNER JOIN dbo.Statements ON StatementReference.StatementType = Statements.StatementType
      INNER JOIN dbo.Occurrences ON Occurrences.OccurID = p.OccurID
      INNER JOIN dbo.Paths ON paths.PathID = Occurrences.PathID
WHERE StatementReference.ResourceType IN (79, 81);


IF OBJECT_ID('dbo.cacheEZViewer_Usage_MQ') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_MQ
SELECT  QueueId, QueueName, QueueManagerID, QueueManagerName,
        Description, StatementStartRow, StatementStartColumn, StatementEndRow, StatementEndColumn, StmtPathStr,
        ProgramName, ProgramId, ProgramTypeID, ProgramPath, Ancestor, ProgStartRow, ProgStartCol, ProgEndRow, ProgEndCol
INTO    dbo.cacheEZViewer_Usage_MQ
FROM (
	   SELECT MQQueues.QueueID AS QueueId,
			MQQueues.QueueName AS QueueName,
			MQQueueManagers.QueueManagerID,
			MQQueueManagers.QueueManagerName,
			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 dbo.MQQueues
		   INNER JOIN dbo.MQQueueManagers ON MQQueueManagers.QueueManagerID = MQQueues.QueueManagerID
		   INNER JOIN #core c ON c.ResourceType = 81 AND c.ResourceID = MQQueues.QueueID
	   WHERE MQQueues.QueueID <> -1

	   UNION

	   SELECT 
			'' AS QueueId,
			'Queue Manager Operations' AS QueueName,
			MQQueueManagers.QueueManagerID,
			MQQueueManagers.QueueManagerName,
			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  dbo.MQQueueManagers
		    INNER JOIN #core c ON c.ResourceType = 79 AND c.ResourceID = MQQueueManagers.QueueManagerID
	   WHERE MQQueueManagers.QueueManagerID <> -1
	  ) s

 
END