Skip to content

Commit e07c37c

Browse files
committed
Stop using size-limited string fields in db. Fixes #28
1 parent e1a2bc2 commit e07c37c

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

mautrix/client/state_store/asyncpg/upgrade.py

+9
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,12 @@ async def upgrade_v1(conn: Connection) -> None:
3131
avatar_url VARCHAR(255),
3232
PRIMARY KEY (room_id, user_id)
3333
)""")
34+
35+
36+
@upgrade_table.register(description="Stop using size-limited string fields")
37+
async def upgrade_v2(conn: Connection) -> None:
38+
await conn.execute("ALTER TABLE mx_room_state ALTER COLUMN room_id TYPE TEXT")
39+
await conn.execute("ALTER TABLE mx_user_profile ALTER COLUMN room_id TYPE TEXT")
40+
await conn.execute("ALTER TABLE mx_user_profile ALTER COLUMN user_id TYPE TEXT")
41+
await conn.execute("ALTER TABLE mx_user_profile ALTER COLUMN displayname TYPE TEXT")
42+
await conn.execute("ALTER TABLE mx_user_profile ALTER COLUMN avatar_url TYPE TEXT")

mautrix/client/state_store/sqlalchemy/mx_room_state.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from typing import Optional, Type
77
import json
88

9-
from sqlalchemy import Column, String, Boolean, types
9+
from sqlalchemy import Column, Text, Boolean, types
1010

1111
from mautrix.types import (RoomID, PowerLevelStateEventContent as PowerLevels,
1212
RoomEncryptionStateEventContent as EncryptionInfo, Serializable)
@@ -41,7 +41,7 @@ def process_literal_param(self, value, dialect):
4141
class RoomState(Base):
4242
__tablename__ = "mx_room_state"
4343

44-
room_id: RoomID = Column(String(255), primary_key=True)
44+
room_id: RoomID = Column(Text, primary_key=True)
4545
is_encrypted: bool = Column(Boolean, nullable=True)
4646
has_full_member_list: bool = Column(Boolean, nullable=True)
4747
encryption: EncryptionInfo = Column(SerializableType(EncryptionInfo), nullable=True)

mautrix/client/state_store/sqlalchemy/mx_user_profile.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
from typing import Optional, Iterable, Dict
77

8-
from sqlalchemy import Column, String, Enum
8+
from sqlalchemy import Column, Text, Enum
99

1010
from mautrix.types import RoomID, UserID, ContentURI, Member, Membership
1111
from mautrix.util.db import Base
@@ -16,11 +16,11 @@
1616
class UserProfile(Base):
1717
__tablename__ = "mx_user_profile"
1818

19-
room_id: RoomID = Column(String(255), primary_key=True)
20-
user_id: UserID = Column(String(255), primary_key=True)
19+
room_id: RoomID = Column(Text, primary_key=True)
20+
user_id: UserID = Column(Text, primary_key=True)
2121
membership: Membership = Column(Enum(Membership), nullable=False, default=Membership.LEAVE)
22-
displayname: str = Column(String, nullable=True)
23-
avatar_url: ContentURI = Column(String(255), nullable=True)
22+
displayname: str = Column(Text, nullable=True)
23+
avatar_url: ContentURI = Column(Text, nullable=True)
2424

2525
def member(self) -> Member:
2626
return Member(membership=self.membership, displayname=self.displayname,

mautrix/crypto/store/asyncpg/upgrade.py

+16
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,19 @@ async def add_account_id_column(table: str, pkey_columns: List[str]) -> None:
8787
await add_account_id_column("crypto_olm_session", ["session_id"])
8888
await add_account_id_column("crypto_megolm_inbound_session", ["session_id"])
8989
await add_account_id_column("crypto_megolm_outbound_session", ["room_id"])
90+
91+
92+
@upgrade_table.register(description="Stop using size-limited string fields")
93+
async def upgrade_v3(conn: Connection) -> None:
94+
await conn.execute("ALTER TABLE crypto_account ALTER COLUMN account_id TYPE TEXT")
95+
await conn.execute("ALTER TABLE crypto_account ALTER COLUMN device_id TYPE TEXT")
96+
await conn.execute("ALTER TABLE crypto_message_index ALTER COLUMN event_id TYPE TEXT")
97+
await conn.execute("ALTER TABLE crypto_tracked_user ALTER COLUMN user_id TYPE TEXT")
98+
await conn.execute("ALTER TABLE crypto_device ALTER COLUMN user_id TYPE TEXT")
99+
await conn.execute("ALTER TABLE crypto_device ALTER COLUMN device_id TYPE TEXT")
100+
await conn.execute("ALTER TABLE crypto_device ALTER COLUMN name TYPE TEXT")
101+
await conn.execute("ALTER TABLE crypto_olm_session ALTER COLUMN account_id TYPE TEXT")
102+
await conn.execute("ALTER TABLE crypto_megolm_inbound_session ALTER COLUMN account_id TYPE TEXT")
103+
await conn.execute("ALTER TABLE crypto_megolm_inbound_session ALTER COLUMN room_id TYPE TEXT")
104+
await conn.execute("ALTER TABLE crypto_megolm_outbound_session ALTER COLUMN account_id TYPE TEXT")
105+
await conn.execute("ALTER TABLE crypto_megolm_outbound_session ALTER COLUMN room_id TYPE TEXT")

0 commit comments

Comments
 (0)