MotorSignal-App/tools/rollback_ride_timestamps_v8...

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.