Optimize certificates SQL query
Co-authored-by: Javier Ramos <javier.ramos@booking.com>
This commit is contained in:
parent
cc0b2d5439
commit
bc1a2cf69c
|
@ -20,6 +20,7 @@ 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
|
||||||
|
@ -379,8 +380,8 @@ def render(args):
|
||||||
elif "cn" in terms:
|
elif "cn" in terms:
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
or_(
|
or_(
|
||||||
Certificate.cn.ilike(term),
|
func.lower(Certificate.cn).like(term.lower()),
|
||||||
Certificate.domains.any(Domain.name.ilike(term)),
|
Certificate.id.in_(like_domain_query(term)),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif "id" in terms:
|
elif "id" in terms:
|
||||||
|
@ -388,9 +389,9 @@ def render(args):
|
||||||
elif "name" in terms:
|
elif "name" in terms:
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
or_(
|
or_(
|
||||||
Certificate.name.ilike(term),
|
func.lower(Certificate.name).like(term.lower()),
|
||||||
Certificate.domains.any(Domain.name.ilike(term)),
|
Certificate.id.in_(like_domain_query(term)),
|
||||||
Certificate.cn.ilike(term),
|
func.lower(Certificate.cn).like(term.lower()),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif "fixedName" in terms:
|
elif "fixedName" in terms:
|
||||||
|
@ -435,6 +436,14 @@ def render(args):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def like_domain_query(term):
|
||||||
|
domain_query = database.session_query(Domain.id)
|
||||||
|
domain_query = domain_query.filter(func.lower(Domain.name).like(term.lower()))
|
||||||
|
assoc_query = database.session_query(certificate_associations.c.certificate_id)
|
||||||
|
assoc_query = assoc_query.filter(certificate_associations.c.domain_id.in_(domain_query))
|
||||||
|
return assoc_query
|
||||||
|
|
||||||
|
|
||||||
def query_name(certificate_name, args):
|
def query_name(certificate_name, args):
|
||||||
"""
|
"""
|
||||||
Helper function that queries for a certificate by name
|
Helper function that queries for a certificate by name
|
||||||
|
|
Loading…
Reference in New Issue