LANGUAGE SQL
BEGIN


                       -- declare temp table
                       DECLARE GLOBAL TEMPORARY TABLE SESSION.imsdbfld
		               (
							FieldId INTEGER ,
							FieldName VARCHAR(256) ,
							Seq CHAR(1) ,
							DBId INTEGER ,
							SegmentId INTEGER ,
							FieldStartRow INTEGER ,
							FieldStartCol INTEGER ,
							FieldEndRow INTEGER ,
							FieldEndCol INTEGER ,
							FieldPathID INTEGER
		                ) WITH REPLACE 
                          ON COMMIT PRESERVE ROWS
                          NOT LOGGED
		                  ;
					
	


                       -- fill in temp table
                         INSERT INTO SESSION.imsdbfld
                         SELECT
							     i.FieldId,
							     i.FieldName,
								 i.Seq,
								 i.DBId,
								 i.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		
							FROM  IMSDBFields i
							      LEFT OUTER JOIN Occurrences AS Occurrences_Field ON i.OccurID = Occurrences_Field.OccurID;
                            COMMIT;



			               BEGIN
						      COMMIT;
							  TRUNCATE TABLE cacheEZViewer_Usage_IMSDB_Structure IMMEDIATE ;
				              --DELETE FROM cacheEZViewer_Usage_IMSDB_Structure ;
				            END;
	
	
	                        LOCK TABLE  cacheEZViewer_Usage_IMSDB_Structure IN EXCLUSIVE MODE ;-- lock table
							INSERT INTO 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,  f_DBID,  f_SegmentId, FieldStartRow,  FieldStartCol,  FieldEndRow,  FieldEndCol,  pth3.PathStr AS FieldPath, FieldSeq
							FROM (
										 SELECT
											    i.DBId,
											    i.DBName,
											    i.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,
											    seg.SegmentId,
											    seg.SegmentName,
												seg.ParentId,
											    seg.SourceDBId,
											    seg.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 IMSDBInfo i
											LEFT JOIN Occurrences AS Occurrences_IMSDB ON Occurrences_IMSDB.OccurID = i.OccurID
										
											LEFT OUTER JOIN IMSDBSegments seg ON i.DBId = seg.DBId
											LEFT OUTER JOIN Occurrences AS Occurrences_Seg ON seg.OccurID = Occurrences_Seg.OccurID
							
											LEFT OUTER JOIN SESSION.imsdbfld	fld1 ON i.AccessTypeId != 13 AND i.DBId = fld1.DBId and seg.SegmentId = fld1.SegmentId
											LEFT OUTER JOIN SESSION.imsdbfld	fld2 ON i.AccessTypeId = 13 AND seg.SourceSegId = fld2.SegmentId  		
										 WHERE  i.OccurID != 0
								   )s
								       LEFT OUTER JOIN Paths pth1 ON s.IMSDBPathID = pth1.PathID
								       LEFT OUTER JOIN Paths pth2 ON s.SegPathID = pth2.PathID
								       LEFT OUTER JOIN Paths pth3 ON s.FieldPathID = pth3.PathID ;
						
                            COMMIT;						


END 
