20 lines
1015 B
SQL
20 lines
1015 B
SQL
-- Offline database copy only. Stop the app and preserve a verified backup first.
|
|
-- Aborts if a migrated date changed after migration. On error, ROLLBACK and stop.
|
|
BEGIN IMMEDIATE;
|
|
CREATE TEMP TABLE timestamp_rollback_guard (ok INTEGER CHECK (ok = 1));
|
|
INSERT INTO timestamp_rollback_guard
|
|
SELECT CASE WHEN (SELECT user_version FROM pragma_user_version) = 8
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM ride_timestamp_archive a LEFT JOIN rides r ON r.id = a.ride_id
|
|
WHERE r.id IS NULL OR r.start_time IS NOT a.canonical_start_time
|
|
OR r.end_time IS NOT a.canonical_end_time
|
|
) THEN 1 ELSE 0 END;
|
|
UPDATE rides SET
|
|
start_time = (SELECT original_start_time FROM ride_timestamp_archive WHERE ride_id = rides.id),
|
|
end_time = (SELECT original_end_time FROM ride_timestamp_archive WHERE ride_id = rides.id)
|
|
WHERE id IN (SELECT ride_id FROM ride_timestamp_archive);
|
|
PRAGMA user_version = 7;
|
|
DROP TABLE timestamp_rollback_guard;
|
|
COMMIT;
|
|
-- Keep the archive for forensic evidence. Original bad dates will be restored.
|