Files
mostlymatter/server/channels/db/migrations/mysql/000026_create_preferences.up.sql

107 строки
3.0 KiB
SQL

CREATE TABLE IF NOT EXISTS Preferences (
UserId varchar(26) NOT NULL,
Category varchar(32) NOT NULL,
Name varchar(32) NOT NULL,
Value text,
PRIMARY KEY (UserId, Category, Name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Preferences'
AND table_schema = DATABASE()
AND column_name = 'Value'
AND data_type != 'text'
) > 0,
'ALTER TABLE Preferences MODIFY Value text;',
'SELECT 1'
));
PREPARE alterIfExists FROM @preparedStatement;
EXECUTE alterIfExists;
DEALLOCATE PREPARE alterIfExists;
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_name = 'Preferences'
AND table_schema = DATABASE()
AND index_name = 'idx_preferences_category'
) > 0,
'SELECT 1',
'CREATE INDEX idx_preferences_category ON Preferences(Category);'
));
PREPARE createIndexIfNotExists FROM @preparedStatement;
EXECUTE createIndexIfNotExists;
DEALLOCATE PREPARE createIndexIfNotExists;
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_name = 'Preferences'
AND table_schema = DATABASE()
AND index_name = 'idx_preferences_name'
) > 0,
'SELECT 1',
'CREATE INDEX idx_preferences_name ON Preferences(Name);'
));
PREPARE createIndexIfNotExists FROM @preparedStatement;
EXECUTE createIndexIfNotExists;
DEALLOCATE PREPARE createIndexIfNotExists;
CREATE PROCEDURE RenameSolarizedThemeWithUnderscore()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE curUserId VARCHAR(26);
DECLARE curName VARCHAR(32);
DECLARE curValue text;
DECLARE preference
CURSOR FOR
SELECT UserId, Name, Value
FROM Preferences
WHERE Category = 'theme' AND Value LIKE '%solarized_%';
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN preference;
getPreference: LOOP
FETCH preference INTO curUserId, curName, curValue;
IF finished = 1 THEN
LEAVE getPreference;
END IF;
-- update affected rows
UPDATE Preferences
SET Value = replace(curValue, 'solaraized_', 'solarized-')
WHERE Category = 'theme'
AND UserId = curUserId
AND Name = curName;
END LOOP getPreference;
END;
CALL RenameSolarizedThemeWithUnderscore();
DROP PROCEDURE IF EXISTS RenameSolarizedThemeWithUnderscore;
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_name = 'Preferences'
AND table_schema = DATABASE()
AND index_name = 'idx_preferences_user_id'
) > 0,
'DROP INDEX idx_preferences_user_id ON Preferences;',
'SELECT 1'
));
PREPARE removeIndexIfExists FROM @preparedStatement;
EXECUTE removeIndexIfExists;
DEALLOCATE PREPARE removeIndexIfExists;