Skip to content

Commit 79aacce

Browse files
committed
Insert multiple rows at once
1 parent 42e5aab commit 79aacce

File tree

1 file changed

+40
-28
lines changed
  • src/Distribution/Server/Features

1 file changed

+40
-28
lines changed

src/Distribution/Server/Features/Users.hs

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -285,35 +285,47 @@ migrateStateToDatabase usersState adminsState DatabaseFeature{..} = do
285285
users <- queryState usersState GetUserDb
286286
admins <- queryState adminsState GetAdminList
287287

288+
let usersAndTokens =
289+
map (\(uid, uinfo) ->
290+
( (uid, uinfo),
291+
map (\(token, desc) -> (uid, token, desc))
292+
(Map.toList (userTokens uinfo))
293+
)
294+
) (Users.enumerateAllUsers users)
295+
296+
let usersToInsert = map fst usersAndTokens
297+
let tokensToInsert = concatMap snd usersAndTokens
288298
withTransaction $ do
289-
forM_ (Users.enumerateAllUsers users) $ \(uid, uinfo) -> do
290-
let (status, authInfo) =
291-
case userStatus uinfo of
292-
AccountEnabled a -> (Enabled, Just a)
293-
AccountDisabled ma -> (Disabled, ma)
294-
AccountDeleted -> (Deleted, Nothing)
295-
296-
Database.runInsert $
297-
insert
298-
(_tblUsers Database.hackageDb)
299-
(insertValues [UsersRow {
300-
_uId = uid,
301-
_uUsername = userName uinfo,
302-
_uStatus = status,
303-
_uAuthInfo = authInfo,
304-
_uAdmin = Group.member uid admins
305-
}])
306-
307-
forM_ (Map.toList (userTokens uinfo)) $ \(token, desc) -> do
308-
Database.runInsert $
309-
insert
310-
(_tblUserTokens Database.hackageDb)
311-
(insertExpressions [UserTokensRow {
312-
_utId = default_,
313-
_utUserId = val_ uid,
314-
_utToken = val_ token,
315-
_utDescription = val_ desc
316-
}])
299+
Database.runInsert $
300+
insert
301+
(_tblUsers Database.hackageDb)
302+
(insertValues (map (\(uid, uinfo) ->
303+
let (status, authInfo) =
304+
case userStatus uinfo of
305+
AccountEnabled a -> (Enabled, Just a)
306+
AccountDisabled ma -> (Disabled, ma)
307+
AccountDeleted -> (Deleted, Nothing)
308+
in
309+
UsersRow {
310+
_uId = uid,
311+
_uUsername = userName uinfo,
312+
_uStatus = status,
313+
_uAuthInfo = authInfo,
314+
_uAdmin = Group.member uid admins
315+
}
316+
) usersToInsert))
317+
318+
Database.runInsert $
319+
insert
320+
(_tblUserTokens Database.hackageDb)
321+
(insertExpressions (map (\(uid, token, desc) ->
322+
UserTokensRow {
323+
_utId = default_,
324+
_utUserId = val_ uid,
325+
_utToken = val_ token,
326+
_utDescription = val_ desc
327+
}
328+
) tokensToInsert))
317329

318330

319331
usersStateComponent :: FilePath -> IO (StateComponent AcidState Users.Users)

0 commit comments

Comments
 (0)