소스 검색

Make sure to properly set NULL for portal.mxid if we don't have one.

When this gets set to empty string it causes primary key to fail and cascades
into other issues like the inability to deduplicate messages.

Refs #26
Gary Kramlich 3 년 전
부모
커밋
2a7fc8eabf
1개의 변경된 파일10개의 추가작업 그리고 2개의 파일을 삭제
  1. 10 2
      database/portal.go

+ 10 - 2
database/portal.go

@@ -51,13 +51,21 @@ func (p *Portal) Scan(row Scannable) *Portal {
 	return p
 }
 
+func (p *Portal) mxidPtr() *id.RoomID {
+	if p.MXID != "" {
+		return &p.MXID
+	}
+
+	return nil
+}
+
 func (p *Portal) Insert() {
 	query := "INSERT INTO portal" +
 		" (channel_id, receiver, mxid, name, topic, avatar, avatar_url," +
 		" type, dmuser, first_event_id)" +
 		" VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)"
 
-	_, err := p.db.Exec(query, p.Key.ChannelID, p.Key.Receiver, p.MXID,
+	_, err := p.db.Exec(query, p.Key.ChannelID, p.Key.Receiver, p.mxidPtr(),
 		p.Name, p.Topic, p.Avatar, p.AvatarURL.String(), p.Type, p.DMUser,
 		p.FirstEventID.String())
 
@@ -72,7 +80,7 @@ func (p *Portal) Update() {
 		" dmuser=$7, first_event_id=$8" +
 		" WHERE channel_id=$9 AND receiver=$10"
 
-	_, err := p.db.Exec(query, p.MXID, p.Name, p.Topic, p.Avatar,
+	_, err := p.db.Exec(query, p.mxidPtr(), p.Name, p.Topic, p.Avatar,
 		p.AvatarURL.String(), p.Type, p.DMUser, p.FirstEventID.String(),
 		p.Key.ChannelID, p.Key.Receiver)