Fix ListChannels(owned) returning channels multiple (if there are deleted subscriptions) [skip-tests]
All checks were successful
Build Docker and Deploy / Run Unit-Tests (push) Has been skipped
Build Docker and Deploy / Build Docker Container (push) Successful in 41s
Build Docker and Deploy / Deploy to Server (push) Successful in 10s

This commit is contained in:
2025-04-18 16:02:14 +02:00
parent b280465914
commit 1f0f280286
7 changed files with 375 additions and 15 deletions

View File

@@ -68,7 +68,7 @@ func (db *Database) ListChannelsByOwner(ctx db.TxContext, userid models.UserID,
order := " ORDER BY channels.timestamp_created ASC, channels.channel_id ASC "
sql := "SELECT channels.*, sub.* FROM channels LEFT JOIN subscriptions AS sub ON channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid WHERE channels.deleted=0 AND owner_user_id = :ouid" + order
sql := "SELECT channels.*, sub.* FROM channels LEFT JOIN subscriptions AS sub ON (channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0) WHERE channels.deleted=0 AND owner_user_id = :ouid" + order
pp := sq.PP{
"ouid": userid,
@@ -95,7 +95,7 @@ func (db *Database) ListChannelsBySubscriber(ctx db.TxContext, userid models.Use
order := " ORDER BY channels.timestamp_created ASC, channels.channel_id ASC "
sql := "SELECT channels.*, sub.* " + "FROM channels LEFT JOIN subscriptions AS sub on channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0 WHERE " + cond + order
sql := "SELECT channels.*, sub.* " + "FROM channels LEFT JOIN subscriptions AS sub ON (channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0) WHERE " + cond + order
pp := sq.PP{
"subuid": userid,
@@ -121,7 +121,7 @@ func (db *Database) ListChannelsByAccess(ctx db.TxContext, userid models.UserID,
order := " ORDER BY channels.timestamp_created ASC, channels.channel_id ASC "
sql := "SELECT channels.*, sub.* " + "FROM channels LEFT JOIN subscriptions AS sub on channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0 WHERE " + cond + order
sql := "SELECT channels.*, sub.* " + "FROM channels LEFT JOIN subscriptions AS sub ON (channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0) WHERE " + cond + order
pp := sq.PP{
"ouid": userid,
@@ -144,7 +144,7 @@ func (db *Database) GetChannel(ctx db.TxContext, userid models.UserID, channelid
selectors := "channels.*, sub.*"
join := "LEFT JOIN subscriptions AS sub on channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0"
join := "LEFT JOIN subscriptions AS sub ON (channels.channel_id = sub.channel_id AND sub.subscriber_user_id = :subuid AND sub.deleted=0)"
cond := "channels.channel_id = :cid"
if enforceOwner {

View File

@@ -17,7 +17,7 @@ func (db *Database) ListSenderNames(ctx db.TxContext, userid models.UserID, incl
prepParams := sq.PP{"uid": userid}
if includeForeignSubscribed {
sqlStr = "SELECT sender_name AS name, MAX(timestamp_real) AS ts_last, MIN(timestamp_real) AS ts_first, COUNT(*) AS count FROM messages LEFT JOIN subscriptions AS subs ON messages.channel_id = subs.channel_id AND subs.deleted=0 WHERE (subs.subscriber_user_id = :uid AND subs.confirmed = 1) AND sender_NAME NOT NULL GROUP BY sender_name ORDER BY ts_last DESC"
sqlStr = "SELECT sender_name AS name, MAX(timestamp_real) AS ts_last, MIN(timestamp_real) AS ts_first, COUNT(*) AS count FROM messages LEFT JOIN subscriptions AS subs ON (messages.channel_id = subs.channel_id AND subs.deleted=0) WHERE (subs.subscriber_user_id = :uid AND subs.confirmed = 1) AND sender_NAME NOT NULL GROUP BY sender_name ORDER BY ts_last DESC"
} else {
sqlStr = "SELECT sender_name AS name, MAX(timestamp_real) AS ts_last, MIN(timestamp_real) AS ts_first, COUNT(*) AS count FROM messages WHERE sender_user_id = :uid AND sender_NAME NOT NULL GROUP BY sender_name ORDER BY ts_last DESC"
}