Reduce the expense of joins

This commit is contained in:
Curtis Castrapel 2019-01-14 09:20:02 -08:00
parent c4e6e7c59b
commit 31a86687e7
1 changed files with 3 additions and 4 deletions

View File

@ -20,7 +20,6 @@ from lemur.common.utils import generate_private_key, truthiness
from lemur.destinations.models import Destination from lemur.destinations.models import Destination
from lemur.domains.models import Domain from lemur.domains.models import Domain
from lemur.extensions import metrics, sentry, signals from lemur.extensions import metrics, sentry, signals
from lemur.models import certificate_associations
from lemur.notifications.models import Notification from lemur.notifications.models import Notification
from lemur.pending_certificates.models import PendingCertificate from lemur.pending_certificates.models import PendingCertificate
from lemur.plugins.base import plugins from lemur.plugins.base import plugins
@ -341,13 +340,13 @@ def render(args):
elif 'id' in terms: elif 'id' in terms:
query = query.filter(Certificate.id == cast(terms[1], Integer)) query = query.filter(Certificate.id == cast(terms[1], Integer))
elif 'name' in terms: elif 'name' in terms:
query = query.outerjoin(certificate_associations).outerjoin(Domain).filter( query = query.filter(
or_( or_(
Certificate.name.ilike(term), Certificate.name.ilike(term),
Domain.name.ilike(term), Certificate.domains.any(Domain.name.ilike(term)),
Certificate.cn.ilike(term), Certificate.cn.ilike(term),
) )
).group_by(Certificate.id) )
else: else:
query = database.filter(query, Certificate, terms) query = database.filter(query, Certificate, terms)