Old versions of the Mattermost server did not qualify queries scanning both `Posts` and `Threads`, and choke on the ambiguity in deciding between the new `DeleteAt` on `Threads` and the `DeleteAt` on `Posts` in existing queries. While this problem is transient only while running multiple server versions, it effectively makes our backwards compatibility guarantee void, not to mention complicating cloud deployments. Work around this by renaming `Threads.DeleteAt` to `Threads.ThreadDeleteAt`. The old migration is nulled out, but remains, since some test servers have already upgraded and manually fixing each affected instance would be problematic. Thew new migration takes care of removing the old column -- if it ever existed. Fixes: https://mattermost.atlassian.net/browse/MM-43770 Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
36 строки
1.0 KiB
SQL
36 строки
1.0 KiB
SQL
-- Drop any existing DeleteAt column from 000081_threads_deleteat.up.sql
|
|
SET @preparedStatement = (SELECT IF(
|
|
EXISTS(
|
|
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
|
|
WHERE table_name = 'Threads'
|
|
AND table_schema = DATABASE()
|
|
AND column_name = 'DeleteAt'
|
|
) > 0,
|
|
'ALTER TABLE Threads DROP COLUMN DeleteAt;',
|
|
'SELECT 1;'
|
|
));
|
|
|
|
PREPARE removeColumnIfExists FROM @preparedStatement;
|
|
EXECUTE removeColumnIfExists;
|
|
DEALLOCATE PREPARE removeColumnIfExists;
|
|
|
|
SET @preparedStatement = (SELECT IF(
|
|
NOT EXISTS(
|
|
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
|
WHERE table_name = 'Threads'
|
|
AND table_schema = DATABASE()
|
|
AND column_name = 'ThreadDeleteAt'
|
|
),
|
|
'ALTER TABLE Threads ADD COLUMN ThreadDeleteAt bigint(20);',
|
|
'SELECT 1;'
|
|
));
|
|
|
|
PREPARE addColumnIfNotExists FROM @preparedStatement;
|
|
EXECUTE addColumnIfNotExists;
|
|
DEALLOCATE PREPARE addColumnIfNotExists;
|
|
|
|
UPDATE Threads, Posts
|
|
SET Threads.ThreadDeleteAt = Posts.DeleteAt
|
|
WHERE Posts.Id = Threads.PostId
|
|
AND Threads.ThreadDeleteAt IS NULL;
|