Skip to content

Commit c0e84e3

Browse files
committed
update queries
1 parent 761ba88 commit c0e84e3

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

src/Simplex/Messaging/Agent.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ subscribeAllConnections' c onlyNeeded activeUserId_ = handleErr $ do
14581458
-- This approach preserves performance for all clients that do not use services.
14591459
-- 2) at least one user ID has services enabled:
14601460
-- Service will be loaded for all user/server combinations:
1461-
-- a) service is enabled for and service record exists: subscription will be attempted,
1461+
-- a) service is enabled for user ID and service record exists: subscription will be attempted,
14621462
-- b) service is disabled and record exists: service record and all associations will be removed,
14631463
-- c) service is disabled or no record: no subscription attempt.
14641464
-- On successful service subscription, only unassociated queues will be subscribed.

src/Simplex/Messaging/Agent/Store/AgentStore.hs

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

22842296
unsetQueuesToSubscribe :: DB.Connection -> IO ()
22852297
unsetQueuesToSubscribe 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

22952307
removeRcvServiceAssocs :: 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

23152325
removeUserRcvServiceAssocs :: DB.Connection -> UserId -> IO ()
23162326
removeUserRcvServiceAssocs 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

Comments
 (0)