LANGUAGE SQL
BEGIN


			BEGIN
			      COMMIT;
				  TRUNCATE TABLE cacheEZViewer_Usage_Datacom IMMEDIATE ;
	              --DELETE FROM cacheEZViewer_Usage_Datacom ;
	        END;


            LOCK TABLE  cacheEZViewer_Usage_Datacom IN EXCLUSIVE MODE ;-- lock table
			INSERT INTO cacheEZViewer_Usage_Datacom
			SELECT
				   c.DatacomID,
				   c.DatacomName,
				   c.Description,
				   c.StatementStartRow,
				   c.StatementStartColumn,
				   c.StatementEndRow,
				   c.StatementEndColumn,
				   pth1.PathStr AS StmtPathStr,
				   c.ProgramName,
				   c.ProgramID,
				   c.ProgramTypeID,
				   pth2.PathStr AS ProgramPath,
				   c.ProgStartRow,
				   c.ProgStartCol,
				   c.ProgEndRow,
				   c.ProgEndCol,
				   c.Ancestor,
				   c.AncestorID,
				   c.AncestorTypeID
			     FROM
						    (   SELECT
								   core.DatacomID,
								   core.DatacomName,
								   core.Description,
								   core.StartRow AS StatementStartRow,
								   core.StartCol AS StatementStartColumn,
								   core.EndRow AS StatementEndRow,
								   core.EndCol AS StatementEndColumn,
								   core.PathID AS StmtPathID,
								   prog.ProgramName,
								   prog.ProgramID,
								   prog.ProgramTypeID,
								   prog.PathID AS ProgramPathID,
								   prog.StartRow AS ProgStartRow,
								   prog.StartCol AS ProgStartCol,
								   prog.EndRow AS ProgEndRow,
								   prog.EndCol AS ProgEndCol,
								   prog.Ancestor,
								   prog.AncestorID,
								   prog.AncestorTypeID
								   FROM (
										 SELECT
											    os.ProgID,
											    os.PathID,
											    os.StartRow,
											    os.StartCol,
											    os.EndRow,
											    os.EndCol,
											    sr.ResourceID,
											    st.Description,
											    res.ID AS DatacomID,
				                                res.TableName AS DatacomName
										 FROM StatementReference sr
											  INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
											  INNER JOIN Statements st ON sr.StatementType = st.StatementType
											  INNER JOIN DatacomTables res ON res.ID = sr.ResourceID
										 WHERE sr.ResourceType = 182
											   AND os.PathID IS NOT NULL
									    )core
										INNER JOIN ( -- programs
													SELECT p.ProgramID, p.ProgramName, p.ProgramTypeID, p.Ancestor,
														  occ.StartRow, occ.StartCol, occ.EndRow, occ.EndCol
														 ,occ.PathID
														 ,pa.ProgramID AS AncestorID, pa.ProgramTypeID AS AncestorTypeID
													   FROM Occurrences occ
														    INNER JOIN
																		(
																			 SELECT pg.ProgramID,
																			        pg.Ancestor,
																		            pg.ProgramTypeID,
																		            pg.OccurID,
																			        pa.AliasName AS ProgramName
																			 FROM Programs pg
																				   INNER JOIN ProgramAliases pa ON pg.ProgramID = pa.ProgramId AND pa.AliasType = 0
																		     WHERE pg.ProgramTypeID IN (1, 15, 16)
																		  )  p ON p.OccurID = occ.OccurID
														    LEFT OUTER JOIN
															             (
																			 SELECT DISTINCT
																			        pg.ProgramID,
																			        --pg.Ancestor,
																		            pg.ProgramTypeID,
																		            --pg.OccurID,
																			        pa.AliasName AS ProgramName
																			 FROM Programs pg
																				   INNER JOIN ProgramAliases pa ON pg.ProgramID = pa.ProgramId
																			WHERE pg.ProgramTypeID = 8 	
																		  )  pa ON  pa.ProgramName =  p.Ancestor
													   WHERE occ.PathID IS NOT NULL
												 ) prog ON core.ProgID = prog.ProgramID
									   GROUP BY core.DatacomID, core.DatacomName, core.Description,
											  core.StartRow , core.StartCol, core.EndRow, core.EndCol, core.PathID,
											  prog.ProgramName, prog.ProgramID,  prog.ProgramTypeID, prog.PathID,  prog.StartRow, prog.StartCol, prog.EndRow, prog.EndCol, prog.Ancestor,
											  prog.AncestorID, prog.AncestorTypeID
						
					  )c
					   LEFT OUTER JOIN  Paths pth1 ON pth1.PathID = c.StmtPathID
					   LEFT OUTER JOIN  Paths pth2 ON pth2.PathID = c.ProgramPathID;

                      COMMIT;

END 
