2019-10-04 05:34:16 -04:00
|
|
|
import logging
|
2020-10-02 10:20:45 -04:00
|
|
|
from io import StringIO
|
2019-10-04 05:34:16 -04:00
|
|
|
|
|
|
|
from synapse.storage.engines import PostgresEngine
|
2020-10-02 10:20:45 -04:00
|
|
|
from synapse.storage.prepare_database import execute_statements_from_stream
|
2019-10-04 05:34:16 -04:00
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
2019-10-10 06:28:23 -04:00
|
|
|
"""
|
|
|
|
This migration updates the user_filters table as follows:
|
|
|
|
|
|
|
|
- drops any (user_id, filter_id) duplicates
|
|
|
|
- makes the columns NON-NULLable
|
|
|
|
- turns the index into a UNIQUE index
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
2019-10-04 05:34:16 -04:00
|
|
|
def run_upgrade(cur, database_engine, *args, **kwargs):
|
2019-10-10 06:28:23 -04:00
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def run_create(cur, database_engine, *args, **kwargs):
|
2019-10-04 05:34:16 -04:00
|
|
|
if isinstance(database_engine, PostgresEngine):
|
|
|
|
select_clause = """
|
|
|
|
SELECT DISTINCT ON (user_id, filter_id) user_id, filter_id, filter_json
|
2019-10-10 06:28:23 -04:00
|
|
|
FROM user_filters
|
2019-10-04 05:34:16 -04:00
|
|
|
"""
|
|
|
|
else:
|
|
|
|
select_clause = """
|
2019-10-10 06:28:23 -04:00
|
|
|
SELECT * FROM user_filters GROUP BY user_id, filter_id
|
2019-10-04 05:34:16 -04:00
|
|
|
"""
|
2019-10-10 06:28:23 -04:00
|
|
|
sql = """
|
|
|
|
DROP TABLE IF EXISTS user_filters_migration;
|
|
|
|
DROP INDEX IF EXISTS user_filters_unique;
|
|
|
|
CREATE TABLE user_filters_migration (
|
|
|
|
user_id TEXT NOT NULL,
|
|
|
|
filter_id BIGINT NOT NULL,
|
|
|
|
filter_json BYTEA NOT NULL
|
|
|
|
);
|
|
|
|
INSERT INTO user_filters_migration (user_id, filter_id, filter_json)
|
|
|
|
%s;
|
|
|
|
CREATE UNIQUE INDEX user_filters_unique ON user_filters_migration
|
|
|
|
(user_id, filter_id);
|
|
|
|
DROP TABLE user_filters;
|
|
|
|
ALTER TABLE user_filters_migration RENAME TO user_filters;
|
|
|
|
""" % (
|
|
|
|
select_clause,
|
2019-10-04 05:34:16 -04:00
|
|
|
)
|
2019-10-10 06:28:23 -04:00
|
|
|
|
2020-10-02 10:20:45 -04:00
|
|
|
execute_statements_from_stream(cur, StringIO(sql))
|