AS
BEGIN
SET NOCOUNT ON


IF OBJECT_ID('dbo.cacheEZViewer_Usage_IDMS') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_IDMS
SELECT dbo.IdmsSchema.ID AS IdmsSchemaID,
       dbo.IdmsSchema.SchemaName AS IdmsSchemaName,
       dbo.IdmsSubschema.ID AS IdmsSubschemaID,
       dbo.IdmsSubschema.SubschemaName AS IdmsSubschemaName,
       SetOrRecord.SetOrRecordID AS SetOrRecordID,
       SetOrRecord.SetOrRecordName AS SetOrRecordName,
       dbo.Statements.StatementType AS StatementTypeId,
       dbo.Statements.Description AS StatementTypeName,
       dbo.StatementReference.ResourceType AS ResourceType,
       dbo.ResourceTypes.Name AS ResourceTypeName,
       Paths_Stmt.PathStr AS StmtPathStr,
       dbo.OccurrencesStmt.StartRow AS StatementStartRow,
       dbo.OccurrencesStmt.StartCol AS StatementStartColumn,
       dbo.OccurrencesStmt.EndRow AS StatementEndRow,
       dbo.OccurrencesStmt.EndCol AS StatementEndColumn,
       p.ProgramID AS ProgramId,
       p.ProgramName AS ProgramName,
       p.ProgramTypeID AS ProgramTypeID,
       Paths.PathStr AS ProgramPath,
       dbo.Occurrences.StartRow AS ProgStartRow,
       dbo.Occurrences.StartCol AS ProgStartCol,
       dbo.Occurrences.EndRow AS ProgEndRow,
       dbo.Occurrences.EndCol AS ProgEndCol,
       p.Ancestor AS Ancestor,
       Programs_Ancestor.ProgramID AS AncestorID,
       Programs_Ancestor.ProgramTypeID AS AncestorTypeID,
       Occurrences_Ancestor.StartRow AS AncestorStartRow,
       Occurrences_Ancestor.StartCol AS AncestorStartCol,
       Occurrences_Ancestor.EndRow AS AncestorEndRow,
       Occurrences_Ancestor.EndCol AS AncestorEndCol
INTO dbo.cacheEZViewer_Usage_IDMS
FROM dbo.StatementReference
     INNER JOIN dbo.OccurrencesStmt ON dbo.StatementReference.OccurID = dbo.OccurrencesStmt.OccurID
     INNER JOIN (SELECT tp.ProgramId, tpa.AliasName as ProgramName, ProgramTypeID, OccurID, Ancestor FROM dbo.Programs tp INNER JOIN dbo.ProgramAliases tpa ON tp.ProgramId = tpa.ProgramID and tpa.AliasType = 0) p ON dbo.OccurrencesStmt.ProgID = p.ProgramID
     INNER JOIN dbo.Statements ON dbo.StatementReference.StatementType = dbo.Statements.StatementType
     INNER JOIN
			 (
				SELECT 78 AS ResourceType, ID AS SetOrRecordID, SetName AS SetOrRecordName,   SubschemaID
				FROM dbo.IdmsSubschemaSets
				UNION
				SELECT 77 AS ResourceType, ID AS SetOrRecordID, RecordName AS SetOrRecordName, SubschemaID
				FROM dbo.IdmsSubschemaRecords
			 ) SetOrRecord ON dbo.StatementReference.ResourceType = SetOrRecord.ResourceType
						   AND dbo.StatementReference.ResourceID = SetOrRecord.SetOrRecordID
     INNER JOIN dbo.IdmsSubschema ON SetOrRecord.SubschemaId = dbo.IdmsSubschema.ID
     INNER JOIN dbo.IdmsSchema ON dbo.IdmsSubschema.SchemaId = dbo.IdmsSchema.ID
     INNER JOIN dbo.Paths AS Paths_Stmt ON dbo.OccurrencesStmt.PathID = Paths_Stmt.PathID
     INNER JOIN dbo.Occurrences ON p.OccurID = dbo.Occurrences.OccurID
     INNER JOIN dbo.Paths ON paths.PathID = Occurrences.PathID
     LEFT OUTER JOIN (SELECT DISTINCT p1.ProgramId, OccurID, ProgramTypeID, AliasName as ProgramName FROM dbo.Programs p1 INNER JOIN dbo.ProgramAliases pa1 ON p1.ProgramId = pa1.ProgramID) AS Programs_Ancestor ON Programs_Ancestor.ProgramName = p.Ancestor
                                                    AND Programs_Ancestor.ProgramTypeID IN (8)
     LEFT OUTER JOIN dbo.Occurrences AS Occurrences_Ancestor ON Programs_Ancestor.OccurID = Occurrences_Ancestor.OccurID
     INNER JOIN dbo.ResourceTypes ON ResourceTypes.ResourceID = StatementReference.ResourceType
WHERE(dbo.StatementReference.ResourceType IN (77, 78) )
       AND (p.ProgramTypeID IN (1, 2, 3, 10, 15, 16))


END