diff --git a/cmd/mautrix-telegram/legacymigrate.sql b/cmd/mautrix-telegram/legacymigrate.sql index d1415e5c..15ab76c3 100644 --- a/cmd/mautrix-telegram/legacymigrate.sql +++ b/cmd/mautrix-telegram/legacymigrate.sql @@ -27,7 +27,7 @@ SELECT -- only: sqlite (line commented) -- json_object ( - 'phone', COALESCE(tg_phone, ''), + 'phone', COALESCE('+' || tg_phone, ''), 'session', json((SELECT json_data FROM telethon_sessions_old WHERE session_id=mxid)) ) -- metadata FROM user_old @@ -56,7 +56,7 @@ SELECT ( 'is_premium', is_premium, 'is_channel', is_channel, - 'phone', phone, + 'phone', '+' || phone, 'name_source', displayname_source, 'name_quality', displayname_quality, 'name_not_contact', CASE WHEN displayname_contact THEN json('false') ELSE json('true') END @@ -83,8 +83,8 @@ INSERT INTO portal ( ) SELECT '', -- bridge_id - CAST(tgid AS TEXT), -- id - CAST(tg_receiver AS TEXT), -- receiver + peer_type || ':' || CAST(tgid AS TEXT), -- id + CASE WHEN peer_type='channel' THEN '' ELSE CAST(tg_receiver AS TEXT) END, -- receiver mxid, -- mxid CASE WHEN peer_type='user' THEN CAST(tgid AS TEXT) END, -- other_user_id COALESCE(title, ''), -- name @@ -112,19 +112,20 @@ SELECT '', -- bridge_id user_old.mxid, -- user_mxid CAST(user_portal_old.user AS TEXT), -- login_id - CAST(user_portal_old.portal AS TEXT), -- portal_id - CAST(user_portal_old.portal_receiver AS TEXT), -- portal_receiver + portal_old.peer_type || ':' || CAST(user_portal_old.portal AS TEXT), -- portal_id + CASE WHEN peer_type='channel' THEN '' ELSE CAST(user_portal_old.portal_receiver AS TEXT) END, -- portal_receiver false, -- in_space false -- preferred FROM user_portal_old -INNER JOIN user_old ON user_portal_old."user" = user_old.tgid; +INNER JOIN user_old ON user_portal_old."user" = user_old.tgid +INNER JOIN portal_old ON user_portal_old.portal = portal_old.tgid and user_portal_old.portal_receiver = portal_old.tg_receiver; INSERT INTO user_portal (bridge_id, user_mxid, login_id, portal_id, portal_receiver, in_space, preferred) SELECT '', -- bridge_id user_old.mxid, -- user_mxid CAST(portal_old.tg_receiver AS TEXT), -- login_id - CAST(portal_old.tgid AS TEXT), -- portal_id + portal_old.peer_type || ':' || CAST(portal_old.tgid AS TEXT), -- portal_id CAST(portal_old.tg_receiver AS TEXT), -- portal_receiver false, -- in_space false -- preferred @@ -144,8 +145,8 @@ SELECT CASE WHEN tg_space=portal_old.tgid THEN (CAST(tg_space AS TEXT) || '.') ELSE '' END || CAST(message_old.tgid AS TEXT), -- id '', -- part_id message_old.mxid, -- mxid - CAST(portal_old.tgid AS TEXT), -- room_id - CAST(portal_old.tg_receiver AS TEXT), -- room_receiver + portal_old.peer_type || ':' || CAST(portal_old.tgid AS TEXT), -- room_id + CASE WHEN portal_old.peer_type='channel' THEN '' ELSE CAST(portal_old.tg_receiver AS TEXT) END, -- room_receiver COALESCE(CAST(sender AS TEXT), ''), -- sender_id COALESCE(sender_mxid, ''), 0, -- timestamp @@ -175,7 +176,10 @@ FROM reaction_old INNER JOIN message ON reaction_old.msg_mxid=message.mxid; INSERT INTO telegram_access_hash (user_id, entity_id, access_hash) -SELECT user_old.tgid, id, hash +SELECT + user_old.tgid, + CASE WHEN id < 0 THEN -id - 1000000000000 ELSE id END, + hash FROM telethon_entities_old LEFT JOIN user_old ON user_old.mxid=session_id WHERE user_old.tgid IS NOT NULL AND hash<>0; @@ -193,11 +197,17 @@ LEFT JOIN user_old ON user_old.mxid=session_id WHERE entity_id<>0 AND user_old.tgid IS NOT NULL; INSERT INTO telegram_username (username, entity_id) -SELECT username, id +SELECT username, CASE WHEN id < 0 THEN -id - 1000000000000 ELSE id END FROM telethon_entities_old WHERE username<>'' ON CONFLICT DO NOTHING; +INSERT INTO telegram_phone_number (phone_number, entity_id) +SELECT phone, id +FROM telethon_entities_old +WHERE phone<>'' +ON CONFLICT DO NOTHING; + INSERT INTO telegram_file (id, mxc, mime_type, size) SELECT id, mxc, mime_type, size FROM telegram_file_old;