From a09b8eab7ac678415694b2f0fd4d19822886a424 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Mon, 11 Jan 2021 17:23:12 +0100 Subject: [PATCH] =?UTF-8?q?Opraven=20v=C3=BDpis=20=C3=BAloh=20dostupn?= =?UTF-8?q?=C3=BDch=20=C3=BA=C4=8Dastn=C3=ADkovi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Byl v tom kouzelný bug: Úloha z výpisu občas zmizela, pokud ji odevzdal jiný účastník :) Poučení: U vnějšího JOINu záleží na tom, jestli je podmínka uvedena u JOINu nebo až ve WHERE. --- mo/web/user.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mo/web/user.py b/mo/web/user.py index 88c33fc0..3c097386 100644 --- a/mo/web/user.py +++ b/mo/web/user.py @@ -3,7 +3,7 @@ from flask_wtf import FlaskForm import flask_wtf.file import os import secrets -from sqlalchemy import or_ +from sqlalchemy import or_, and_ from sqlalchemy.orm import joinedload from typing import Optional import werkzeug.exceptions @@ -74,9 +74,8 @@ def user_contest(id: int): task_sols = (db.get_session().query(db.Task, db.Solution) .select_from(db.Task) - .outerjoin(db.Solution) + .outerjoin(db.Solution, and_(db.Solution.task_id == db.Task.task_id, db.Solution.user == g.user)) .filter(db.Task.round == contest.round) - .filter(or_(db.Solution.user_id == None, db.Solution.user == g.user)) .options(joinedload(db.Solution.final_submit_obj), joinedload(db.Solution.final_feedback_obj)) .order_by(db.Task.code) -- GitLab