diff options
Diffstat (limited to 'app/querybuilder.py')
-rw-r--r-- | app/querybuilder.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/app/querybuilder.py b/app/querybuilder.py index 5b75b4c..74b680c 100644 --- a/app/querybuilder.py +++ b/app/querybuilder.py @@ -64,8 +64,11 @@ class QueryBuilder: return MinetestRelease.get(self.minetest_version, self.protocol_version) - def buildPackageQuery(self): - query = Package.query.filter_by(soft_deleted=False, approved=True) + def buildPackageQuery(self, query=None): + if not query: + query = Package.query + + query = query.filter(Package.soft_deleted==False, Package.approved==True) if len(self.types) > 0: query = query.filter(Package.type.in_(self.types)) @@ -110,10 +113,15 @@ class QueryBuilder: if self.protocol_version or self.minetest_version: version = self.getMinetestVersion() if version: - query = query.join(Package.releases) \ + subqry = db.session.query(PackageRelease.id).correlate(PackageRelease) \ + .filter(PackageRelease.package_id==Package.id) \ .filter(PackageRelease.approved==True) \ .filter(or_(PackageRelease.min_rel_id==None, PackageRelease.min_rel_id<=version.id)) \ - .filter(or_(PackageRelease.max_rel_id==None, PackageRelease.max_rel_id>=version.id)) + .filter(or_(PackageRelease.max_rel_id==None, PackageRelease.max_rel_id>=version.id)) \ + .order_by(db.desc(PackageRelease.id)) \ + .limit(1).subquery() + + query = query.filter(PackageRelease.id==subqry) if self.limit: query = query.limit(self.limit) |