using System; using System.Data.SqlClient; using Dapper; namespace DataModel.Process { /// /// MIS data tracking functions for LotFinderDB interface /// public partial class LotFinderDB { /// /// Post-processing script to set obsoletion dates /// private const string SQL_POSTPROCESS_MISDATA = @" SET ANSI_WARNINGS OFF; WITH cte AS ( SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released FROM dbo.MisData AS md GROUP BY md.MisNumber, md.RevID, md.Status ) UPDATE dbo.MisData SET ObsoleteDate = bl.Released FROM cte bl WHERE MisData.MisNumber = bl.MisNumber AND MisData.RevID = bl.RevID AND MisData.Status = 'Current' AND bl.Status = 'BackLevel'; WITH cte AS ( SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released FROM dbo.MisData AS md GROUP BY md.MisNumber, md.RevID, md.Status ) UPDATE dbo.MisData SET ObsoleteDate = (SELECT TOP 1 nl.Released FROM cte nl WHERE MisData.MisNumber = nl.MisNumber AND MisData.RevID < nl.RevID AND MisData.Status = nl.Status ORDER BY nl.RevID) WHERE ObsoleteDate IS NULL; ALTER INDEX [PK_MisData] ON [dbo].[MisData] REBUILD;"; /// /// Performs post processing on imported Mis data /// public static void PostProcessMisData() { try { using (SqlConnection connection = GetConnection()) { connection.Execute(SQL_POSTPROCESS_MISDATA); } } catch (Exception error) { //Log and forward exception logger.Error("PostProcessMisData: failed to post process MIS data: {0}.", error.Message); throw new Exception($"Failed to post process MIS data from LotFinderDB.", error); } } } }