瀏覽代碼

Fix casting UUIDs to strings in portal db handler

Tulir Asokan 4 年之前
父節點
當前提交
49d39b06cf
共有 3 個文件被更改,包括 13 次插入11 次删除
  1. 3 3
      mautrix_signal/db/message.py
  2. 7 5
      mautrix_signal/db/portal.py
  3. 3 3
      mautrix_signal/db/reaction.py

+ 3 - 3
mautrix_signal/db/message.py

@@ -40,12 +40,12 @@ class Message:
         q = ("INSERT INTO message (mxid, mx_room, sender, timestamp, signal_chat_id,"
              "                     signal_receiver) VALUES ($1, $2, $3, $4, $5, $6)")
         await self.db.execute(q, self.mxid, self.mx_room, self.sender, self.timestamp,
-                              self.signal_chat_id, self.signal_receiver)
+                              str(self.signal_chat_id), self.signal_receiver)
 
     async def delete(self) -> None:
         q = ("DELETE FROM message WHERE sender=$1 AND timestamp=$2"
              "                          AND signal_chat_id=$3 AND signal_receiver=$4")
-        await self.db.execute(q, self.sender, self.timestamp, self.signal_chat_id,
+        await self.db.execute(q, self.sender, self.timestamp, str(self.signal_chat_id),
                               self.signal_receiver)
 
     @classmethod
@@ -76,7 +76,7 @@ class Message:
         q = ("SELECT mxid, mx_room, sender, timestamp, signal_chat_id, signal_receiver "
              "FROM message WHERE sender=$1 AND timestamp=$2"
              "                   AND signal_chat_id=$3 AND signal_receiver=$4")
-        row = await cls.db.fetchrow(q, sender, timestamp, signal_chat_id, signal_receiver)
+        row = await cls.db.fetchrow(q, sender, timestamp, str(signal_chat_id), signal_receiver)
         if not row:
             return None
         return cls(**row)

+ 7 - 5
mautrix_signal/db/portal.py

@@ -38,12 +38,14 @@ class Portal:
     async def insert(self) -> None:
         q = ("INSERT INTO portal (chat_id, receiver, mxid, name, encrypted) "
              "VALUES ($1, $2, $3, $4, $5)")
-        await self.db.execute(q, self.chat_id, self.receiver, self.mxid, self.name, self.encrypted)
+        await self.db.execute(q, str(self.chat_id), self.receiver, self.mxid, self.name,
+                              self.encrypted)
 
     async def update(self) -> None:
         q = ("UPDATE portal SET mxid=$3, name=$4, encrypted=$5 "
-             "WHERE chat_id=$1::text AND receiver=$2")
-        await self.db.execute(q, self.chat_id, self.receiver, self.mxid, self.name, self.encrypted)
+             "WHERE chat_id=$1 AND receiver=$2")
+        await self.db.execute(q, str(self.chat_id), self.receiver, self.mxid, self.name,
+                              self.encrypted)
 
     @classmethod
     def _from_row(cls, row: asyncpg.Record) -> 'Portal':
@@ -66,8 +68,8 @@ class Portal:
     async def get_by_chat_id(cls, chat_id: Union[UUID, str], receiver: str = ""
                              ) -> Optional['Portal']:
         q = ("SELECT chat_id, receiver, mxid, name, encrypted "
-             "FROM portal WHERE chat_id=$1::text AND receiver=$2")
-        row = await cls.db.fetchrow(q, chat_id, receiver)
+             "FROM portal WHERE chat_id=$1 AND receiver=$2")
+        row = await cls.db.fetchrow(q, str(chat_id), receiver)
         if not row:
             return None
         return cls._from_row(row)

+ 3 - 3
mautrix_signal/db/reaction.py

@@ -42,7 +42,7 @@ class Reaction:
         q = ("INSERT INTO reaction (mxid, mx_room, signal_chat_id, signal_receiver, msg_author,"
              "                      msg_timestamp, author, emoji) "
              "VALUES ($1, $2, $3, $4, $5, $6, $7, $8)")
-        await self.db.execute(q, self.mxid, self.mx_room, self.signal_chat_id,
+        await self.db.execute(q, self.mxid, self.mx_room, str(self.signal_chat_id),
                               self.signal_receiver, self.msg_author, self.msg_timestamp,
                               self.author, self.emoji)
 
@@ -50,13 +50,13 @@ class Reaction:
         await self.db.execute("UPDATE reaction SET mxid=$1, mx_room=$2, emoji=$3 "
                               "WHERE signal_chat_id=$4 AND signal_receiver=$5"
                               "      AND msg_author=$6 AND msg_timestamp=$7 AND author=$8",
-                              mxid, mx_room, emoji, self.signal_chat_id, self.signal_receiver,
+                              mxid, mx_room, emoji, str(self.signal_chat_id), self.signal_receiver,
                               self.msg_author, self.msg_timestamp, self.author)
 
     async def delete(self) -> None:
         q = ("DELETE FROM reaction WHERE signal_chat_id=$1 AND signal_receiver=$2"
              "                           AND msg_author=$3 AND msg_timestamp=$4 AND author=$5")
-        await self.db.execute(q, self.signal_chat_id, self.signal_receiver, self.msg_author,
+        await self.db.execute(q, str(self.signal_chat_id), self.signal_receiver, self.msg_author,
                               self.msg_timestamp, self.author)
 
     @classmethod