From: Michael Tremer Date: Sun, 26 Jan 2025 13:31:15 +0000 (+0000) Subject: database: Fix loads of incorrect joins X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d77168b9913fce95de54c0a902bab369d1465806;p=pbs.git database: Fix loads of incorrect joins Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builders.py b/src/buildservice/builders.py index dbbbfcad..7d587921 100644 --- a/src/buildservice/builders.py +++ b/src/buildservice/builders.py @@ -540,9 +540,6 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): return ( sqlalchemy .select( - jobs.Job, - ) - .select_from( self.backend.jobs.running_jobs, ) .where( @@ -558,9 +555,6 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): stmt = ( sqlalchemy .select( - jobs.Job, - ) - .select_from( self.running_jobs, ) ) @@ -574,10 +568,9 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): stmt = ( sqlalchemy .select( - sqlalchemy.func.count().label("running_jobs"), - ) - .select_from( - self.running_jobs, + sqlalchemy.func.count( + self.running_jobs, + ).label("running_jobs"), ) ) diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index be647643..85fc875f 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -105,9 +105,6 @@ class Jobs(base.Object): stmt = ( sqlalchemy .select( - Job, - ) - .select_from( self.running_jobs, ) ) @@ -222,6 +219,12 @@ class Queue(base.Object): ) .select_from(Job) + # Join builds + .join( + builds.Build, + builds.Build.id == Job.build_id, + ) + # Filter out any deleted objects .where( builds.Build.deleted_at == None, @@ -274,21 +277,16 @@ class Queue(base.Object): """ stmt = ( sqlalchemy - - # Select jobs .select( Job, ) - .select_from(Job) - .join( + .select_from( self.queue, - self.queue.c.job_id == Job.id, ) - - # Order them by their rank - .order_by(self.queue.c.rank) - - # Optionally limit + .join( + Job, + Job.id == self.queue.c.job_id, + ) .limit(limit) ) @@ -300,17 +298,19 @@ class Queue(base.Object): """ stmt = ( sqlalchemy - - # Select jobs - .select(Job) - - # Filter by matching architectures + .select( + Job, + ) + .select_from( + self.queue, + ) + .join( + Job, + Job.id == self.queue.c.job_id, + ) .where( - Job.arch in builder.supported_atches, + Job.arch.in_(builder.supported_arches), ) - - # Order them by their rank - .order_by(self.queue.c.rank) ) return self.db.fetch(stmt) diff --git a/src/buildservice/users.py b/src/buildservice/users.py index ad751a6f..5abc1b67 100644 --- a/src/buildservice/users.py +++ b/src/buildservice/users.py @@ -397,6 +397,16 @@ class Users(base.Object): ).label("used_build_time"), ) + # Join builds & jobs + .join( + builds.Build, + builds.Build.owner_id == User.id, + ) + .join( + jobs.Job, + jobs.Job.build_id == builds.Build.id, + ) + # Filter out some things .where( User.deleted_at == None,