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";
}
}