Skip to content

Instantly share code, notes, and snippets.

@adamzr
Created March 30, 2018 00:05
Show Gist options
  • Save adamzr/d387f81f7bd98df508c57c2869ec4d1d to your computer and use it in GitHub Desktop.
Save adamzr/d387f81f7bd98df508c57c2869ec4d1d to your computer and use it in GitHub Desktop.
SQL to track changes to the DFBRestaurantStatus table in MySQL
CREATE TABLE IF NOT EXISTS DFBRestaurantStatusLog (
DFBRestaurantStatusLogId BIGINT NOT NULL AUTO_INCREMENT,
WebRID int NOT NULL,
Operation nvarchar(1) NOT NULL,
UpdatedUTC datetime,
RestaurantStatusTypeID_Prior int,
RestaurantStatusTypeID_After int,
UpdatedBy_Prior varchar(50),
UpdatedBy_After varchar(50),
UpdatedUTC_Prior datetime,
UpdatedUTC_After datetime,
PRIMARY KEY (DFBRestaurantStatusLogId)
);
CREATE TABLE IF NOT EXISTS DFBRestaurantStatusEventWatermark (
Watermark BIGINT NOT NULL,
UpdatedDateUtc DATETIME NOT NULL
)
CREATE TRIGGER tr_insert_DFBRestaurantStatus AFTER INSERT ON DFBRestaurantStatus
FOR EACH ROW
BEGIN
INSERT INTO DFBRestaurantStatusLog (WebRID, Operation, UpdatedUTC, RestaurantStatusTypeID_Prior, RestaurantStatusTypeID_After, UpdatedBy_Prior, UpdatedBy_After, UpdatedUTC_Prior, UpdatedUTC_After)
VALUES(NEW.WebRID, 'I', NOW(), NULL, NEW.RestaurantStatusTypeID, NULL, NEW.UpdatedBy, NULL, NEW.UpdatedUTC);
END;
CREATE TRIGGER tr_update_DFBRestaurantStatus AFTER UPDATE ON DFBRestaurantStatus
FOR EACH ROW
BEGIN
INSERT INTO DFBRestaurantStatusLog (WebRID, Operation, UpdatedUTC, RestaurantStatusTypeID_Prior, RestaurantStatusTypeID_After, UpdatedBy_Prior, UpdatedBy_After, UpdatedUTC_Prior, UpdatedUTC_After)
VALUES(NEW.WebRID, 'U', NOW(), OLD.RestaurantStatusTypeID, NEW.RestaurantStatusTypeID, OLD.UpdatedBy, NEW.UpdatedBy, OLD.UpdatedUTC, NEW.UpdatedUTC);
END;
CREATE TRIGGER tr_delete_DFBRestaurantStatus AFTER DELETE ON DFBRestaurantStatus
FOR EACH ROW
BEGIN
INSERT INTO DFBRestaurantStatusLog (WebRID, Operation, UpdatedUTC, RestaurantStatusTypeID_Prior, RestaurantStatusTypeID_After, UpdatedBy_Prior, UpdatedBy_After, UpdatedUTC_Prior, UpdatedUTC_After)
VALUES(OLD.WebRID, 'U', NOW(), OLD.RestaurantStatusTypeID, NULL, OLD.UpdatedBy, NULL, OLD.UpdatedUTC, NULL);
END;
CREATE PROCEDURE `RestaurantEventPublisher_CleanupDFBRestaurantStatusWatermark_V1` (
IN OlderThanHours int
)
BEGIN
DELETE FROM DFBRestaurantStatusEventWatermark
WHERE UpdatedDateUtc <= DATE_SUB(CURDATE(), INTERVAL OlderThanHours HOUR)
END
CREATE PROCEDURE `RestaurantEventPublisher_CleanupDFBRestaurantStatusWatermark_V1` (
IN OlderThanHours int
)
BEGIN
DELETE FROM DFBRestaurantStatusEventWatermark
WHERE UpdatedDateUtc <= DATE_SUB(CURDATE(), INTERVAL OlderThanHours HOUR)
END
CREATE PROCEDURE `RestaurantEventPublisher_GetDFBRestaurantStatusLogs_V1` (
IN BatchSize int,
IN HighWatermark BIGINT
)
BEGIN
SELECT TOP(BatchSize) * FROM DFBRestaurantStatusLog
WHERE DFBRestaurantStatusLogId > HighWatermark
AND UpdatedUTC < DATE_SUB(CURDATE(), INTERVAL 1 MINUTE)
ORDER BY DFBRestaurantStatusLogId ASC
END
CREATE PROCEDURE `RestaurantEventPublisher_GetDFBRestaurantStatusWatermark_V1` (
)
BEGIN
SELECT TOP(1)
IFNULL(Watermark, 1) AS HighWatermark
FROM DFBRestaurantStatusEventWatermark
ORDER BY WATERMARK DESC
END
CREATE PROCEDURE `RestaurantEventPublisher_UpdateDFBRestaurantStatusWatermark_V1` (
IN HighWatermark BIGINT
)
BEGIN
INSERT INTO DFBRestaurantStatusEventWatermark (Watermark, UpdatedDateUtc) VALUES (HighWatermark, NOW());
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment