compact DB queries

This commit is contained in:
Maximilian Keßler 2023-11-24 11:20:55 +01:00
parent cc08f032e3
commit bb3be235d9
Signed by: max
GPG key ID: BCC5A619923C0BA5

View file

@ -85,7 +85,8 @@ def update_user_statistics():
# Note that this will immediately be changed by the next query in case it is nonzero, # Note that this will immediately be changed by the next query in case it is nonzero,
# so the zero value never shows up in the database if it was nonzero before. # so the zero value never shows up in the database if it was nonzero before.
cur.execute( cur.execute(
"INSERT INTO user_statistics (user_id, variant_type, total_game_moves, games_played, games_won, current_streak)" "INSERT INTO user_statistics"
" (user_id, variant_type, total_game_moves, games_played, games_won, current_streak)"
" (" " ("
" SELECT id, %s, 0, 0, 0, 0 FROM users" " SELECT id, %s, 0, 0, 0, 0 FROM users"
" )" " )"
@ -96,45 +97,31 @@ def update_user_statistics():
" (EXCLUDED.total_game_moves, EXCLUDED.games_played, EXCLUDED.games_won, EXCLUDED.current_streak)", " (EXCLUDED.total_game_moves, EXCLUDED.games_played, EXCLUDED.games_won, EXCLUDED.current_streak)",
(rating_type,) (rating_type,)
) )
cur.execute( cur.execute(
"INSERT INTO user_statistics (user_id, variant_type, total_game_moves)" "INSERT INTO user_statistics (user_id, variant_type, total_game_moves, games_played, games_won)"
" (" " ("
" SELECT users.id, %s, SUM(games.num_turns) FROM users " " SELECT"
" INNER JOIN game_participants " " users.id,"
" ON game_participants.user_id = users.id " " CASE WHEN clue_starved THEN %s ELSE %s END,"
" INNER JOIN games " " SUM(games.num_turns),"
" ON game_participants.game_id = games.id " " COUNT(*),"
" INNER JOIN variants" " COUNT(*) FILTER ( WHERE variants.num_suits * 5 = games.score )"
" ON variants.id = games.variant_id " "FROM users"
" WHERE variants.clue_starved = %s" " INNER JOIN game_participants "
" GROUP BY users.id " " ON game_participants.user_id = users.id "
" ) " " INNER JOIN games "
"ON CONFLICT (user_id, variant_type) DO UPDATE " " ON game_participants.game_id = games.id "
"SET total_game_moves = EXCLUDED.total_game_moves", " INNER JOIN variants"
(rating_type, clue_starved) " ON variants.id = games.variant_id "
) " GROUP BY users.id, clue_starved "
cur.execute( " ) "
"INSERT INTO user_statistics (user_id, variant_type, games_played, games_won)" "ON CONFLICT (user_id, variant_type) DO UPDATE "
" (" "SET"
" SELECT" " (total_game_moves, games_played, games_won)"
" users.id," " ="
" %s," " (EXCLUDED.total_game_moves, EXCLUDED.games_played, EXCLUDED.games_won)",
" COUNT(games.id)," (utils.get_rating_type(True), utils.get_rating_type(False))
" COUNT(games.id) FILTER ( WHERE variants.num_suits * 5 = games.score )" )
" FROM users "
" INNER JOIN game_participants "
" ON game_participants.user_id = users.id "
" INNER JOIN games "
" ON game_participants.game_id = games.id "
" INNER JOIN variants "
" ON variants.id = games.variant_id "
" WHERE variants.clue_starved = %s"
" GROUP BY users.id"
" )"
"ON CONFLICT (user_id, variant_type) DO UPDATE "
"SET (games_played, games_won) = (EXCLUDED.games_played, EXCLUDED.games_won)",
(rating_type, clue_starved)
)
cur.execute( cur.execute(
"INSERT INTO user_statistics (user_id, variant_type, current_streak)" "INSERT INTO user_statistics (user_id, variant_type, current_streak)"
" (" " ("