diff options
author | William Carroll <wpcarro@gmail.com> | 2020-07-30T18·52+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-07-30T18·52+0100 |
commit | ea31a014977c68c808f914556dfe9a04e96205eb (patch) | |
tree | 9f5fba528ed5d9d05284185cb8e67278e0962b8d | |
parent | 8ebc89b44b3fc0e6025b33a3e7ec37e9ebb385cc (diff) |
Debug LoginAttempts.increment
When this was an UPDATE statement with a WHERE clause, and the LoginAttempts table was vacant, nothing would happen. Thankfully, SQLite supports an UPSERT clause so that I can INSERT a new record or UPDATE conditionally. And the best part is: it works!
-rw-r--r-- | src/LoginAttempts.hs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/LoginAttempts.hs b/src/LoginAttempts.hs index f5a5bde6a004..d78e12e3fd8a 100644 --- a/src/LoginAttempts.hs +++ b/src/LoginAttempts.hs @@ -23,7 +23,8 @@ forUsername dbFile username = withConnection dbFile $ \conn -> do [T.LoginAttempt{..}] -> pure (Just loginAttemptNumAttempts) _ -> pure Nothing +-- | INSERT a failed login attempt for `username` or UPDATE an existing entry. increment :: FilePath -> T.Username -> IO () increment dbFile username = withConnection dbFile $ \conn -> - execute conn "UPDATE LoginAttempts SET numAttempts = numAttempts + 1 WHERE username = ?" - (Only username) + execute conn "INSERT INTO LoginAttempts (username,numAttempts) VALUES (?,?) ON CONFLICT (username) DO UPDATE SET numAttempts = numAttempts + 1" + (username, 1 :: Integer) |