AS
BEGIN
SET NOCOUNT ON


IF OBJECT_ID('tempdb..#idmsx_v') IS NOT NULL DROP TABLE #idmsx_v
SELECT DISTINCT ElementName
INTO  #idmsx_v
FROM dbo.EZViewer_IDMSX_View


IF OBJECT_ID('tempdb..#s1') IS NOT NULL DROP TABLE #s1
SELECT rt.id AS usedTypeID,
           rt.Description AS usedTypeDescription,
           v.referencename AS usedName,
           u.Id AS usedID,
           us.StartRow AS usedStartRow,
           us.EndRow AS usedEndRow,
           us.StartCol AS usedStartCol,
           us.EndCol AS usedEndCol,
           Paths.PathStr AS usedSourceFile,
           CASE
               WHEN(IDMSX_View_For_Used.ElementName IS NOT NULL)
               THEN 1
               ELSE 0
           END AS usedIsIDMSX,
           et.Id AS usedInElementTypeID,
           et.Description AS usedInDescription,
           e.name AS usedInElementName,
           e.Id AS ElemId,
           es.StartRow AS ElemStartRow,
           es.StartCol AS ElemStartCol,
           es.EndRow AS ElemEndRow,
           es.EndCol AS ElemEndCol,
           p.name AS inProperty,
           v.referencealias AS withAlias,
           pth.PathStr AS ddclfilePath,
           CASE
               WHEN(IDMSX_View.ElementName IS NOT NULL)
               THEN 1
               ELSE 0
           END AS IsIDMSX,
           si.startrow AS PropertyStartRow,
           si.EndRow AS PropertyEndRow,
           si.StartCol AS PropertyStartCol,
           si.EndCol AS PropertyEndCol
    INTO #s1
    FROM dbo.DDCLValue AS v
         INNER JOIN dbo.DDCLElement AS e ON e.id = v.elementid
         INNER JOIN dbo.DDCLSourceInfo AS es ON es.Id = e.SourceInfo
         INNER JOIN dbo.DDCLDdsType AS et ON et.id = e.ddstypeid
         LEFT OUTER JOIN #idmsx_v AS IDMSX_View ON e.DdsTypeId IN (3, 10)
					                            AND e.Name = IDMSX_View.ElementName
         INNER JOIN dbo.DDCLProperty AS p ON p.id = v.propertyid
         INNER JOIN dbo.DDCLDdsType AS rt ON rt.id = v.ReferenceDdsTypeId
         LEFT JOIN dbo.DDCLElement AS u ON u.DdsTypeId = rt.Id
                                       AND u.Name = v.ReferenceName
         LEFT JOIN dbo.DDCLSourceInfo AS us ON us.Id = u.SourceInfo
         LEFT JOIN dbo.Programs ON Programs.ProgramID = us.ProgramId
         LEFT JOIN dbo.Occurrences ON Occurrences.ProgID = Programs.programid
         LEFT JOIN dbo.Paths ON Paths.PathID = Occurrences.PathID
         LEFT OUTER JOIN #idmsx_v AS IDMSX_View_For_Used ON u.DdsTypeId IN (3, 10)
                                                             AND u.Name = IDMSX_View_For_Used.ElementName
         INNER JOIN dbo.DDCLSourceInfo AS si ON si.id = v.sourceinfo
         INNER JOIN dbo.Programs AS prg ON prg.programid = si.programid
         LEFT JOIN dbo.Occurrences AS occ ON occ.progid = prg.programid
         LEFT JOIN dbo.Paths AS pth ON pth.pathid = occ.pathid
    WHERE v.valuetypeid IN(2, 4)




IF OBJECT_ID('tempdb..#s2') IS NOT NULL DROP TABLE #s2
SELECT DDCLDdsType.Id AS usedTypeID,
           DDCLDdsType.Description AS usedTypeDescription,
           DDCLElement.Name AS usedName,
           DDCLElement.Id AS usedID,
           DDCLSourceInfo.StartRow AS usedStartRow,
           DDCLSourceInfo.EndRow AS usedEndRow,
           DDCLSourceInfo.StartCol AS usedStartCol,
           DDCLSourceInfo.EndCol AS usedEndCol,
           ddclpth.PathStr AS usedSourceFile,
           CASE
               WHEN(IDMSX_View_For_Used.ElementName IS NOT NULL)
               THEN 1
               ELSE 0
           END AS usedIsIDMSX,
           p.ProgramTypeID AS ProgramTypeID,
           p.ProgramName AS ProgramName,
           p.ProgramID AS ProgramId,
           prgOcc.StartRow AS ProgStartRow,
           prgOcc.StartCol AS ProgStartCol,
           prgOcc.EndRow AS ProgEndRow,
           prgOcc.EndCol AS ProgEndCol,
           Statements.Description AS StatementTypeName,
           PrgFilePath.PathStr AS ProgramPath,
           OccurrencesStmt.StartRow AS StatementStartRow,
           OccurrencesStmt.EndRow AS StatementEndRow,
           OccurrencesStmt.StartCol AS StatementStartColumn,
           OccurrencesStmt.EndCol AS StatementEndColumn
    INTO #s2
    FROM dbo.OccurrencesStmt
         INNER JOIN dbo.StatementReference ON OccurrencesStmt.OccurID = StatementReference.OccurID
         INNER JOIN (
					SELECT r.ResourceID, r.OccurID,
						  SUBSTRING(r.Name, CHARINDEX('-', r.Name)+1, LEN(r.Name)) AS DDCLElement_Name,
						  SUBSTRING(r.Name, 0, CHARINDEX('-', r.Name)) AS DDCLDdsType_Name
				    FROM dbo.Resources r
				    WHERE r.ResourceType = 13
	                ) r ON StatementReference.ResourceID =r.ResourceID
         INNER JOIN dbo.Statements ON StatementReference.StatementType = Statements.StatementType
         INNER JOIN dbo.Occurrences ON r.OccurID = Occurrences.OccurID
         INNER JOIN dbo.Paths ON Occurrences.PathID = Paths.PathID
         INNER JOIN (SELECT AliasName as ProgramName, ProgramTypeId, p1.ProgramId, OccurId FROM dbo.Programs p1
                        INNER JOIN dbo.ProgramAliases p2 ON p1.ProgramId = p2.ProgramId and p2.AliasType = 0) p ON p.ProgramID = OccurrencesStmt.ProgID
         INNER JOIN dbo.Paths AS PrgFilePath ON OccurrencesStmt.PathID = PrgFilePath.PathID
         INNER JOIN dbo.Occurrences AS prgOcc ON prgOcc.OccurID = p.OccurID
         INNER JOIN dbo.DDCLElement ON DDCLElement.Name = r.DDCLElement_Name
         INNER JOIN dbo.DDCLDdsType ON DDCLDdsType.Name = r.DDCLDdsType_Name
         INNER JOIN dbo.DDCLSourceInfo ON DDCLSourceInfo.Id = DDCLElement.SourceInfo
         INNER JOIN dbo.Programs AS prg ON prg.programid = DDCLSourceInfo.programid
         LEFT JOIN dbo.Occurrences AS occ ON occ.progid = prg.programid
         LEFT JOIN dbo.Paths AS ddclpth ON ddclpth.pathid = occ.pathid
         LEFT OUTER JOIN  #idmsx_v AS IDMSX_View_For_Used ON  DDCLElement.DdsTypeId IN(3, 10) AND DDCLElement.Name = IDMSX_View_For_Used.ElementName
	WHERE StatementReference.StatementType = 44
           AND Paths.PathStr LIKE '%DDCL Includes%'


IF OBJECT_ID('tempdb..#s3') IS NOT NULL DROP TABLE #s3
        SELECT DDCLDdsType.Id AS usedTypeID,
           DDCLDdsType.Description AS usedTypeDescription,
           DDCLElement.Name AS usedName,
           DDCLElement.Id AS usedID,
           DDCLSourceInfo.StartRow AS usedStartRow,
           DDCLSourceInfo.EndRow AS usedEndRow,
           DDCLSourceInfo.StartCol AS usedStartCol,
           DDCLSourceInfo.EndCol AS usedEndCol,
           ddclpth.PathStr AS usedSourceFile,
           CASE
               WHEN(IDMSX_View_For_Used.ElementName IS NOT NULL)
               THEN 1
               ELSE 0
           END AS usedIsIDMSX,
           p.ProgramTypeID AS ProgramTypeID,
           p.ProgramName AS ProgramName,
           p.ProgramID AS ProgramId,
           prgOcc.StartRow AS ProgStartRow,
           prgOcc.StartCol AS ProgStartCol,
           prgOcc.EndRow AS ProgEndRow,
           prgOcc.EndCol AS ProgEndCol,
           Statements.Description AS StatementTypeName,
           PrgFilePath.PathStr AS ProgramPath,
           OccurrencesStmt.StartRow AS StatementStartRow,
           OccurrencesStmt.EndRow AS StatementEndRow,
           OccurrencesStmt.StartCol AS StatementStartColumn,
           OccurrencesStmt.EndCol AS StatementEndColumn
    INTO #s3
    FROM dbo.DDCLElement
         INNER JOIN
			   (
				    SELECT 78 AS ResourceType1, 10 AS ResourceType2, ID AS SetOrRecordID, SetName AS SetOrRecordName
				    FROM dbo.IdmsSubschemaSets
				    UNION
				    SELECT 77 AS ResourceType1, 3 AS ResourceType2, ID AS SetOrRecordID, RecordName AS SetOrRecordName
				    FROM dbo.IdmsSubschemaRecords
			    ) SetOrRecord  ON DDCLElement.ddstypeid = SetOrRecord.ResourceType2
			                      AND DDCLElement.name = SetOrRecord.SetOrRecordName
         INNER JOIN dbo.StatementReference ON SetOrRecord.SetOrRecordID = StatementReference.ResourceID
	                                         AND  SetOrRecord.ResourceType1 =  StatementReference.ResourceType
         INNER JOIN dbo.Statements ON StatementReference.StatementType = Statements.StatementType
         INNER JOIN dbo.OccurrencesStmt ON OccurrencesStmt.OccurID = StatementReference.OccurID
         INNER JOIN (SELECT ProgramTypeID, p1.ProgramId, p2.AliasName as ProgramName, OccurId FROM dbo.Programs p1 INNER JOIN dbo.ProgramAliases p2 ON p1.ProgramID = p2.ProgramId and p2.AliasType = 0) p ON p.ProgramID = OccurrencesStmt.ProgID
         INNER JOIN dbo.Paths AS PrgFilePath ON OccurrencesStmt.PathID = PrgFilePath.PathID
         INNER JOIN dbo.Occurrences AS prgOcc ON prgOcc.OccurID = p.OccurID
         INNER JOIN dbo.DDCLDdsType ON DDCLDdsType.Id = DDCLElement.DdsTypeId
         INNER JOIN dbo.DDCLSourceInfo ON DDCLSourceInfo.Id = DDCLElement.SourceInfo
         INNER JOIN dbo.Programs AS prg ON prg.programid = DDCLSourceInfo.programid
         LEFT JOIN dbo.Occurrences AS occ ON occ.progid = prg.programid
         LEFT JOIN dbo.Paths AS ddclpth ON ddclpth.pathid = occ.pathid
         LEFT OUTER JOIN #idmsx_v AS IDMSX_View_For_Used ON DDCLElement.Name = IDMSX_View_For_Used.ElementName
    WHERE (
           (DDCLElement.ddstypeid = 3 AND StatementReference.ResourceType = 77)
		 OR
		 (DDCLElement.ddstypeid = 10 AND StatementReference.ResourceType = 78)
		 )



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

SELECT usedTypeID, usedTypeDescription, usedName, usedID, usedStartRow, usedEndRow, usedStartCol, usedEndCol,
       usedSourceFile, usedIsIDMSX, usedInElementTypeID, usedInDescription, usedInElementName,
	  ElemId, ElemStartRow, ElemStartCol, ElemEndRow, ElemEndCol, inProperty, withAlias, ddclfilePath, IsIDMSX,
	  PropertyStartRow, PropertyEndRow, PropertyStartCol, PropertyEndCol, ProgramTypeID, ProgramName, ProgramId,
	  ProgStartRow, ProgStartCol, ProgEndRow, ProgEndCol, StatementTypeName, ProgramPath,
	  StatementStartRow, StatementEndRow, StatementStartColumn, StatementEndColumn
INTO dbo.cacheEZViewer_Usage_DDCL_Dictionary
FROM(	
       SELECT 	usedTypeID, usedTypeDescription, usedName, usedID, usedStartRow, usedEndRow, usedStartCol, usedEndCol,
			usedSourceFile, usedIsIDMSX,
			usedInElementTypeID, usedInDescription, usedInElementName,
			ElemId, ElemStartRow, ElemStartCol, ElemEndRow,
			ElemEndCol, inProperty, withAlias, ddclfilePath,
			IsIDMSX, PropertyStartRow, PropertyEndRow,
			PropertyStartCol, PropertyEndCol,
			NULL AS ProgramTypeID, NULL AS ProgramName, NULL AS ProgramId, NULL AS ProgStartRow,
			NULL AS ProgStartCol, NULL AS ProgEndRow, NULL AS ProgEndCol, NULL AS StatementTypeName,
			NULL AS ProgramPath, NULL AS StatementStartRow, NULL AS StatementEndRow, NULL AS StatementStartColumn,  NULL AS StatementEndColumn
	  FROM #s1

	  UNION
	  SELECT usedTypeID, usedTypeDescription, usedName, usedID, usedStartRow, usedEndRow, usedStartCol, usedEndCol,
		    usedSourceFile, usedIsIDMSX,
		    NULL AS usedInElementTypeID, NULL AS usedInDescription, NULL AS usedInElementName,
              NULL AS ElemId, NULL AS ElemStartRow, NULL AS ElemStartCol, NULL AS ElemEndRow,
              NULL AS ElemEndCol, NULL AS inProperty, NULL AS withAlias, NULL AS ddclfilePath,
              NULL AS IsIDMSX, NULL AS PropertyStartRow, NULL AS PropertyEndRow,
              NULL AS PropertyStartCol, NULL AS PropertyEndCol,
		    ProgramTypeID, ProgramName, ProgramId,
		    ProgStartRow, ProgStartCol, ProgEndRow, ProgEndCol, StatementTypeName, ProgramPath,
		    StatementStartRow, StatementEndRow, StatementStartColumn, StatementEndColumn
	  FROM #s2
	
	  UNION
	  SELECT usedTypeID, usedTypeDescription, usedName, usedID, usedStartRow, usedEndRow, usedStartCol, usedEndCol,
		    usedSourceFile, usedIsIDMSX,
		    NULL AS usedInElementTypeID, NULL AS usedInDescription, NULL AS usedInElementName,
              NULL AS ElemId, NULL AS ElemStartRow, NULL AS ElemStartCol, NULL AS ElemEndRow,
              NULL AS ElemEndCol, NULL AS inProperty, NULL AS withAlias, NULL AS ddclfilePath,
              NULL AS IsIDMSX, NULL AS PropertyStartRow, NULL AS PropertyEndRow,
              NULL AS PropertyStartCol, NULL AS PropertyEndCol,
		    ProgramTypeID, ProgramName, ProgramId,
		    ProgStartRow, ProgStartCol, ProgEndRow, ProgEndCol, StatementTypeName, ProgramPath,
		    StatementStartRow, StatementEndRow, StatementStartColumn, StatementEndColumn
	  FROM #s3
	  ) s


END