@@ -2278,8 +2278,20 @@ getUserServerRcvQueueSubs db userId srv onlyNeeded hasService =
22782278 | hasService = " AND q.rcv_service_assoc = 0"
22792279 | otherwise = " "
22802280
2281- unassocUserServerRcvQueueSubs :: DB. Connection -> UserId -> SMPServer -> IO [RcvQueueSub ]
2282- unassocUserServerRcvQueueSubs db userId srv = undefined
2281+ unassocUserServerRcvQueueSubs :: DB. Connection -> UserId -> SMPServer -> IO [RcvQueueSub ]
2282+ unassocUserServerRcvQueueSubs db userId (SMPServer h p kh) =
2283+ map toRcvQueueSub
2284+ <$> DB. query
2285+ db
2286+ (removeRcvAssocsQuery <> " " <> returningColums)
2287+ (h, p, userId, kh)
2288+ where
2289+ returningColums =
2290+ [sql |
2291+ RETURNING c.user_id, rcv_queues.conn_id, rcv_queues.host, rcv_queues.port, COALESCE(rcv_queues.server_key_hash, s.key_hash),
2292+ rcv_queues.rcv_id, rcv_queues.rcv_private_key, rcv_queues.status, c.enable_ntfs, rcv_queues.client_notice_id,
2293+ rcv_queues.rcv_queue_id, rcv_queues.rcv_primary, rcv_queues.replace_rcv_queue_id
2294+ |]
22832295
22842296unsetQueuesToSubscribe :: DB. Connection -> IO ()
22852297unsetQueuesToSubscribe db = DB. execute_ db " UPDATE rcv_queues SET to_subscribe = 0 WHERE to_subscribe = 1"
@@ -2289,28 +2301,26 @@ setRcvServiceAssocs db rqs =
22892301#if defined(dbPostgres)
22902302 DB. execute db " UPDATE rcv_queues SET rcv_service_assoc = 1 WHERE rcv_id IN " $ Only $ In (map queueId rqs)
22912303#else
2292- DB. executeMany db " UPDATE rcv_queues SET rcv_service_assoc = 1 WHERE rcv_isd = ?" $ map (Only . queueId) rqs
2304+ DB. executeMany db " UPDATE rcv_queues SET rcv_service_assoc = 1 WHERE rcv_id = ?" $ map (Only . queueId) rqs
22932305#endif
22942306
22952307removeRcvServiceAssocs :: DB. Connection -> UserId -> SMPServer -> IO ()
2296- removeRcvServiceAssocs db userId (SMPServer h p kh) =
2297- DB. execute
2298- db
2299- [sql |
2300- UPDATE rcv_queues
2301- SET rcv_service_assoc = 0
2302- WHERE EXISTS (
2303- SELECT 1
2304- FROM connections c
2305- JOIN servers s ON rcv_queues.host = s.host AND rcv_queues.port = s.port
2306- WHERE c.conn_id = rcv_queues.conn_id
2307- AND c.user_id = ?
2308- AND rcv_queues.host = ?
2309- AND rcv_queues.port = ?
2310- AND COALESCE(rcv_queues.server_key_hash, s.key_hash) = ?
2311- )
2312- |]
2313- (userId, h, p, kh)
2308+ removeRcvServiceAssocs db userId (SMPServer h p kh) = DB. execute db removeRcvAssocsQuery (h, p, userId, kh)
2309+
2310+ removeRcvAssocsQuery :: Query
2311+ removeRcvAssocsQuery =
2312+ [sql |
2313+ UPDATE rcv_queues
2314+ SET rcv_service_assoc = 0
2315+ FROM connections c, servers s
2316+ WHERE rcv_queues.host = ?
2317+ AND rcv_queues.port = ?
2318+ AND c.conn_id = rcv_queues.conn_id
2319+ AND c.user_id = ?
2320+ AND s.host = rcv_queues.host
2321+ AND s.port = rcv_queues.port
2322+ AND COALESCE(rcv_queues.server_key_hash, s.key_hash) = ?
2323+ |]
23142324
23152325removeUserRcvServiceAssocs :: DB. Connection -> UserId -> IO ()
23162326removeUserRcvServiceAssocs db userId =
@@ -2319,11 +2329,8 @@ removeUserRcvServiceAssocs db userId =
23192329 [sql |
23202330 UPDATE rcv_queues
23212331 SET rcv_service_assoc = 0
2322- WHERE EXISTS (
2323- SELECT 1
2324- FROM connections c
2325- WHERE c.conn_id = rcv_queues.conn_id AND c.user_id = ?
2326- )
2332+ FROM connections c
2333+ WHERE c.conn_id = rcv_queues.conn_id AND c.user_id = ?
23272334 |]
23282335 (Only userId)
23292336
0 commit comments