From 1d9d7d7c92c9ff35c51b495c3da9f1b6751b54ea Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Mar 24 2015 12:15:15 +0000 Subject: Make search_issues rely on a subquery This is to allow using select distinct which is required for filtering with the privacy flag which otherwise return much more rows than desired. fixes http://209.132.184.222/progit/issue/65 --- diff --git a/progit/lib/__init__.py b/progit/lib/__init__.py index d04947a..b794242 100644 --- a/progit/lib/__init__.py +++ b/progit/lib/__init__.py @@ -755,11 +755,9 @@ def search_issues( ''' query = session.query( - model.Issue + sqlalchemy.distinct(model.Issue.id) ).filter( model.Issue.project_id == repo.id - ).order_by( - model.Issue.id ) if issueid is not None: @@ -845,17 +843,26 @@ def search_issues( model.Issue.private == False ) elif isinstance(private, basestring): + user2 = aliased(model.User) query = query.filter( sqlalchemy.or_( model.Issue.private == False, sqlalchemy.and_( model.Issue.private == True, - model.Issue.user_id == model.User.id, - model.User.user == private, + model.Issue.user_id == user2.id, + user2.user == private, ) ) ) + query = session.query( + model.Issue + ).filter( + model.Issue.id.in_(query.subquery()) + ).order_by( + model.Issue.id + ) + if issueid is not None: output = query.first() elif count: @@ -980,6 +987,7 @@ def get_issue_comment(session, issue_uid, comment_id): return query.first() + def get_request_comment(session, request_uid, comment_id): ''' Return a specific comment of a specified issue. '''