namespace FrameworkDAL.Query.Archive { /// /// SQL for the nightly archive job. /// Both statements are run inside a single transaction per tenant (BEGIN/COMMIT in job). /// /// TEVENTLOG_ARCHIVE must exist before running (see AuditChangeTracking_Tables.sql migration). /// ARCHIVEDON column in TEVENTLOG_ARCHIVE records when the row was moved. /// public static class EventLogArchiveQB { /// /// Copies rows older than the retention cutoff from TEVENTLOG → TEVENTLOG_ARCHIVE. /// Uses INSERT…SELECT for batch efficiency (no row-by-row loop). /// public const string INSERT_ARCHIVE = @" INSERT INTO TEVENTLOG_ARCHIVE ( EVENTLOGID, EVENTTEXT, LINK, SOURCEID, USERID, TAGS, EVENTVALUE, DATA, GEO, EVENTTYPEID, EVENTCLASSID, LOGBOOKID, DATAID, [TIMESTAMP], EVENTCHANNELID, OUID, MACHINEIP, MODEOFWORKING, LOGINEVENTLOGID, TENANTID, ARCHIVEDON ) SELECT EVENTLOGID, EVENTTEXT, LINK, SOURCEID, USERID, TAGS, EVENTVALUE, DATA, GEO, EVENTTYPEID, EVENTCLASSID, LOGBOOKID, DATAID, [TIMESTAMP], EVENTCHANNELID, OUID, MACHINEIP, MODEOFWORKING, LOGINEVENTLOGID, TENANTID, GETDATE() FROM TEVENTLOG WHERE TENANTID = @TenantId AND [TIMESTAMP] < @CutoffDate"; /// /// Removes the rows that were just archived from TEVENTLOG. /// Always run AFTER INSERT_ARCHIVE, inside the same transaction. /// public const string DELETE_HOT = @" DELETE FROM TEVENTLOG WHERE TENANTID = @TenantId AND [TIMESTAMP] < @CutoffDate"; /// Returns counts from both tables for health-check / stats logging. public const string GET_STATS = @" SELECT (SELECT COUNT(*) FROM TEVENTLOG WHERE TENANTID = @TenantId) AS HotCount, (SELECT COUNT(*) FROM TEVENTLOG_ARCHIVE WHERE TENANTID = @TenantId) AS ArchiveCount"; } }