AS
BEGIN
SET NOCOUNT ON

-- EXEC [dbo].[EZViewer_Usage_IMSDB_Structure] 
--SELECT * FROM dbo.cacheEZViewer_Usage_IMSDB_Structure
IF OBJECT_ID('tempdb..#imsdbfld') IS NOT NULL DROP TABLE #imsdbfld
SELECT 
     IMSDBFields.FieldId,
     IMSDBFields.FieldName,
	 IMSDBFields.Seq,
	IMSDBFields.DBId,
	IMSDBFields.SegmentId,
     Occurrences_Field.StartRow AS FieldStartRow,
     Occurrences_Field.StartCol AS FieldStartCol,
     Occurrences_Field.EndRow AS FieldEndRow,
     Occurrences_Field.EndCol AS FieldEndCol,
	Occurrences_Field.PathID AS FieldPathID
INTO #imsdbfld			     
FROM  dbo.IMSDBFields 
      LEFT OUTER JOIN dbo.Occurrences AS Occurrences_Field ON IMSDBFields.OccurID = Occurrences_Field.OccurID
      


IF OBJECT_ID('dbo.cacheEZViewer_Usage_IMSDB_Structure') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_IMSDB_Structure
SELECT DBId, DBName, AccessTypeId,  IMSDBStartRow, IMSDBStartCol, IMSDBEndRow, IMSDBEndCol, pth1.PathStr AS IMSDBPath,
	  SegmentId, SegmentName, ParentId, SourceDBId, SourceSegId, SegmentStartRow, SegmentStartCol, SegmentEndRow, SegmentEndCol, pth2.PathStr AS SegPath,
       FieldId, FieldName,  FieldSeq, f_DBID,  f_SegmentId, FieldStartRow,  FieldStartCol,  FieldEndRow,  FieldEndCol,  pth3.PathStr AS FieldPath

INTO dbo.cacheEZViewer_Usage_IMSDB_Structure
FROM (
			 SELECT 
				    IMSDBInfo.DBId,
				    IMSDBInfo.DBName,
				    IMSDBInfo.AccessTypeId,
				    Occurrences_IMSDB.StartRow AS IMSDBStartRow,
				    Occurrences_IMSDB.StartCol AS IMSDBStartCol,
				    Occurrences_IMSDB.EndRow AS IMSDBEndRow,
				    Occurrences_IMSDB.EndCol AS IMSDBEndCol,
				    Occurrences_IMSDB.PathID AS IMSDBPathID,
				    IMSDBSegments.SegmentId,
				    IMSDBSegments.SegmentName,
				    IMSDBSegments.ParentId,
				    IMSDBSegments.SourceDBId,
				    IMSDBSegments.SourceSegId,
				    Occurrences_Seg.StartRow AS SegmentStartRow,
				    Occurrences_Seg.StartCol AS SegmentStartCol,
				    Occurrences_Seg.EndRow AS SegmentEndRow,
				    Occurrences_Seg.EndCol AS SegmentEndCol,
				    Occurrences_Seg.PathID AS SegPathID,
				    COALESCE(fld1.FieldId, fld2.FieldId) AS FieldId,
				    COALESCE(fld1.FieldName, fld2.FieldName) AS FieldName,
				    COALESCE(fld1.DBId, fld2.DBId) AS f_DBID,
				    COALESCE(fld1.SegmentId, fld2.SegmentId) AS f_SegmentId,
				    COALESCE(fld1.FieldStartRow, fld2.FieldStartRow) AS FieldStartRow,
				    COALESCE(fld1.FieldStartCol, fld2.FieldStartCol) AS FieldStartCol,
				    COALESCE(fld1.FieldEndRow, fld2.FieldEndRow) AS FieldEndRow,
				    COALESCE(fld1.FieldEndCol, fld2.FieldEndCol) AS FieldEndCol,
				    COALESCE(fld1.FieldPathID, fld2.FieldPathID) AS FieldPathID,
					COALESCE(fld1.Seq, fld2.Seq) AS FieldSeq
			 FROM dbo.IMSDBInfo
				LEFT JOIN dbo.Occurrences AS Occurrences_IMSDB ON Occurrences_IMSDB.OccurID = IMSDBInfo.OccurID
			
				LEFT OUTER JOIN dbo.IMSDBSegments ON IMSDBInfo.DBId = IMSDBSegments.DBId
				LEFT OUTER JOIN dbo.Occurrences AS Occurrences_Seg ON IMSDBSegments.OccurID = Occurrences_Seg.OccurID

				LEFT OUTER JOIN #imsdbfld	fld1 ON IMSDBInfo.AccessTypeId != 13 AND IMSDBInfo.DBId = fld1.DBId and IMSDBSegments.SegmentId = fld1.SegmentId
				LEFT OUTER JOIN #imsdbfld	fld2 ON IMSDBInfo.AccessTypeId = 13 AND IMSDBSegments.SourceSegId = fld2.SegmentId  		     
			 WHERE  IMSDBInfo.OccurID != 0
	   )s
	       LEFT OUTER JOIN dbo.Paths pth1 ON s.IMSDBPathID = pth1.PathID 
	       LEFT OUTER JOIN dbo.Paths pth2 ON s.SegPathID = pth2.PathID
	       LEFT OUTER JOIN dbo.Paths pth3 ON s.FieldPathID = pth3.PathID 

	  
       
END