From: Michael Tremer Date: Wed, 5 Feb 2025 17:07:50 +0000 (+0000) Subject: database: Use as many inner joins as possible X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4166cba6c943b24b1de493420925f9ba2b3680ac;p=pbs.git database: Use as many inner joins as possible We also are very unlikely to fetch any deleted objects, so let's rather pull in the users that have deleted something by "SELECT IN" so that the queries will be smaller and we don't add any joins which almost never will find anything. Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builders.py b/src/buildservice/builders.py index fa90504a..dd0ec8c3 100644 --- a/src/buildservice/builders.py +++ b/src/buildservice/builders.py @@ -32,7 +32,7 @@ class BuilderStat(database.Base): # Builder builder = sqlalchemy.orm.relationship( - "Builder", foreign_keys=[builder_id], lazy="joined", + "Builder", foreign_keys=[builder_id], lazy="joined", innerjoin=True, ) # Created At @@ -477,7 +477,7 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Created By created_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[created_by_id], lazy="joined", + "User", foreign_keys=[created_by_id], lazy="joined", innerjoin=True, ) # Deleted By ID @@ -487,7 +487,7 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Deleted By deleted_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[deleted_by_id], lazy="joined", + "User", foreign_keys=[deleted_by_id], lazy="selectin", ) def is_online(self): diff --git a/src/buildservice/images.py b/src/buildservice/images.py index dafcbb09..f261ab09 100644 --- a/src/buildservice/images.py +++ b/src/buildservice/images.py @@ -43,7 +43,7 @@ class Image(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Release release = sqlalchemy.orm.relationship( - "Release", foreign_keys=[release_id], lazy="joined", + "Release", foreign_keys=[release_id], lazy="joined", innerjoin=True, ) # Arch diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index aaf411dc..94f5e654 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -859,7 +859,7 @@ class Job(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Aborted By aborted_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[aborted_by_id], lazy="joined", + "User", foreign_keys=[aborted_by_id], lazy="selectin", ) # Message diff --git a/src/buildservice/keys.py b/src/buildservice/keys.py index 3daa8526..7d689694 100644 --- a/src/buildservice/keys.py +++ b/src/buildservice/keys.py @@ -65,7 +65,7 @@ class Key(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Created By created_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[created_by_id], lazy="joined", + "User", foreign_keys=[created_by_id], lazy="selectin", ) # Deleted By ID @@ -75,7 +75,7 @@ class Key(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Deleted By deleted_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[deleted_by_id], lazy="joined", + "User", foreign_keys=[deleted_by_id], lazy="selectin", ) # Public Key diff --git a/src/buildservice/mirrors.py b/src/buildservice/mirrors.py index bfa1e1a2..c2aabcb5 100644 --- a/src/buildservice/mirrors.py +++ b/src/buildservice/mirrors.py @@ -195,7 +195,7 @@ class Mirror(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Created By created_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[created_by_id], lazy="joined", + "User", foreign_keys=[created_by_id], lazy="joined", innerjoin=True, ) # Deleted By ID @@ -205,7 +205,7 @@ class Mirror(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Deleted By deleted_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[deleted_by_id], lazy="joined", + "User", foreign_keys=[deleted_by_id], lazy="selectin", ) def has_perm(self, user): diff --git a/src/buildservice/packages.py b/src/buildservice/packages.py index 2ec57938..637c5446 100644 --- a/src/buildservice/packages.py +++ b/src/buildservice/packages.py @@ -410,7 +410,7 @@ class Package(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Distro distro = sqlalchemy.orm.relationship("Distro", - foreign_keys=[distro_id], lazy="joined") + foreign_keys=[distro_id], lazy="joined", innerjoin=True) # Build ID @@ -620,7 +620,7 @@ class File(database.Base): # Package - package = sqlalchemy.orm.relationship("Package", foreign_keys=[pkg_id], lazy="joined") + package = sqlalchemy.orm.relationship("Package", foreign_keys=[pkg_id], lazy="selectin") # Path diff --git a/src/buildservice/releases.py b/src/buildservice/releases.py index 110fbf59..ae19b059 100644 --- a/src/buildservice/releases.py +++ b/src/buildservice/releases.py @@ -50,7 +50,7 @@ class Release(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Distro - distro = sqlalchemy.orm.relationship("Distro", lazy="joined") + distro = sqlalchemy.orm.relationship("Distro", lazy="joined", innerjoin=True) # Name @@ -72,7 +72,7 @@ class Release(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Created By created_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[created_by_id], lazy="joined", + "User", foreign_keys=[created_by_id], lazy="joined", innerjoin=True, ) # Deleted By ID @@ -82,7 +82,7 @@ class Release(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Deleted By deleted_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[deleted_by_id], lazy="joined", + "User", foreign_keys=[deleted_by_id], lazy="selectin", ) # Stable? diff --git a/src/buildservice/repos.py b/src/buildservice/repos.py index 959b2700..7a58537c 100644 --- a/src/buildservice/repos.py +++ b/src/buildservice/repos.py @@ -41,7 +41,8 @@ class RepoBuild(database.Base): # Repo - repo = sqlalchemy.orm.relationship("Repo", foreign_keys=[repo_id], lazy="joined") + repo = sqlalchemy.orm.relationship("Repo", foreign_keys=[repo_id], + lazy="joined", innerjoin=True) # Build ID @@ -49,7 +50,8 @@ class RepoBuild(database.Base): # Build - build = sqlalchemy.orm.relationship("Build", foreign_keys=[build_id], lazy="joined") + build = sqlalchemy.orm.relationship("Build", foreign_keys=[build_id], + lazy="joined", innerjoin=True) # Added At @@ -63,7 +65,7 @@ class RepoBuild(database.Base): # Added By added_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[added_by_id], lazy="joined", + "User", foreign_keys=[added_by_id], lazy="selectin", ) # Removed At @@ -77,7 +79,7 @@ class RepoBuild(database.Base): # Removed By removed_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[removed_by_id], lazy="joined", + "User", foreign_keys=[removed_by_id], lazy="selectin", ) @@ -215,7 +217,7 @@ class Repo(database.Base, database.BackendMixin, database.SoftDeleteMixin): distro_id = Column(Integer, ForeignKey("distributions.id"), nullable=False) - distro = sqlalchemy.orm.relationship("Distro", lazy="joined") + distro = sqlalchemy.orm.relationship("Distro", lazy="joined", innerjoin=True) # Created At @@ -250,7 +252,7 @@ class Repo(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Owner - owner = sqlalchemy.orm.relationship("User", lazy="joined") + owner = sqlalchemy.orm.relationship("User", lazy="selectin") def has_perm(self, user): """ diff --git a/src/buildservice/sessions.py b/src/buildservice/sessions.py index c0c71665..66a91c98 100644 --- a/src/buildservice/sessions.py +++ b/src/buildservice/sessions.py @@ -94,7 +94,8 @@ class Session(database.Base): user_id = Column(Integer, ForeignKey("users.id"), nullable=False) - user = sqlalchemy.orm.relationship("User", back_populates="sessions", lazy="joined") + user = sqlalchemy.orm.relationship("User", back_populates="sessions", + lazy="joined", innerjoin=True) # Created At diff --git a/src/buildservice/sources.py b/src/buildservice/sources.py index 4ffabbe9..5cf32932 100644 --- a/src/buildservice/sources.py +++ b/src/buildservice/sources.py @@ -187,7 +187,7 @@ class Source(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Repo repo = sqlalchemy.orm.relationship( - "Repo", foreign_keys=[repo_id], lazy="joined", + "Repo", foreign_keys=[repo_id], lazy="joined", innerjoin=True, ) # Distro @@ -208,7 +208,7 @@ class Source(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Created By created_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[created_by_id], lazy="joined", + "User", foreign_keys=[created_by_id], lazy="joined", innerjoin=True, ) # Deleted By ID diff --git a/src/buildservice/users.py b/src/buildservice/users.py index 5abc1b67..49a22a64 100644 --- a/src/buildservice/users.py +++ b/src/buildservice/users.py @@ -1009,7 +1009,7 @@ class UserPushSubscription(database.Base, database.BackendMixin): # User - user = sqlalchemy.orm.relationship("User", lazy="joined") + user = sqlalchemy.orm.relationship("User", lazy="joined", innerjoin=True) # UUID