Merge pull request #2884 from ilyalabun/ilabun/optimize-certificates-sql
Optimize certificates sql
This commit is contained in:
commit
43bb48c286
@ -20,6 +20,7 @@ from lemur.common.utils import generate_private_key, truthiness
|
||||
from lemur.destinations.models import Destination
|
||||
from lemur.domains.models import Domain
|
||||
from lemur.extensions import metrics, sentry, signals
|
||||
from lemur.models import certificate_associations
|
||||
from lemur.notifications.models import Notification
|
||||
from lemur.pending_certificates.models import PendingCertificate
|
||||
from lemur.plugins.base import plugins
|
||||
@ -455,8 +456,8 @@ def render(args):
|
||||
elif "cn" in terms:
|
||||
query = query.filter(
|
||||
or_(
|
||||
Certificate.cn.ilike(term),
|
||||
Certificate.domains.any(Domain.name.ilike(term)),
|
||||
func.lower(Certificate.cn).like(term.lower()),
|
||||
Certificate.id.in_(like_domain_query(term)),
|
||||
)
|
||||
)
|
||||
elif "id" in terms:
|
||||
@ -464,9 +465,9 @@ def render(args):
|
||||
elif "name" in terms:
|
||||
query = query.filter(
|
||||
or_(
|
||||
Certificate.name.ilike(term),
|
||||
Certificate.domains.any(Domain.name.ilike(term)),
|
||||
Certificate.cn.ilike(term),
|
||||
func.lower(Certificate.name).like(term.lower()),
|
||||
Certificate.id.in_(like_domain_query(term)),
|
||||
func.lower(Certificate.cn).like(term.lower()),
|
||||
)
|
||||
)
|
||||
elif "fixedName" in terms:
|
||||
@ -511,6 +512,14 @@ def render(args):
|
||||
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):
|
||||
"""
|
||||
Helper function that queries for a certificate by name
|
||||
|
50
lemur/migrations/versions/8323a5ea723a_.py
Normal file
50
lemur/migrations/versions/8323a5ea723a_.py
Normal file
@ -0,0 +1,50 @@
|
||||
"""Add lowercase index for certificate name and cn and also for domain name
|
||||
|
||||
Revision ID: 8323a5ea723a
|
||||
Revises: b33c838cb669
|
||||
Create Date: 2020-01-10 10:51:44.776052
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '8323a5ea723a'
|
||||
down_revision = 'b33c838cb669'
|
||||
|
||||
from alembic import op
|
||||
from sqlalchemy import text
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.create_index(
|
||||
"ix_certificates_cn_lower",
|
||||
"certificates",
|
||||
[text("lower(cn)")],
|
||||
unique=False,
|
||||
postgresql_ops={"lower(cn)": "gin_trgm_ops"},
|
||||
postgresql_using="gin",
|
||||
)
|
||||
op.create_index(
|
||||
"ix_certificates_name_lower",
|
||||
"certificates",
|
||||
[text("lower(name)")],
|
||||
unique=False,
|
||||
postgresql_ops={"lower(name)": "gin_trgm_ops"},
|
||||
postgresql_using="gin",
|
||||
)
|
||||
op.create_index(
|
||||
"ix_domains_name_lower",
|
||||
"domains",
|
||||
[text("lower(name)")],
|
||||
unique=False,
|
||||
postgresql_ops={"lower(name)": "gin_trgm_ops"},
|
||||
postgresql_using="gin",
|
||||
)
|
||||
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_index("ix_certificates_cn_lower", table_name="certificates")
|
||||
op.drop_index("ix_certificates_name_lower", table_name="certificates")
|
||||
op.drop_index("ix_domains_name_lower", table_name="domains")
|
@ -45,6 +45,6 @@ def upgrade():
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_index("ix_domains_name", table_name="domains")
|
||||
op.drop_index("ix_domains_name_gin", table_name="domains")
|
||||
op.drop_index("ix_certificates_name", table_name="certificates")
|
||||
op.drop_index("ix_certificates_cn", table_name="certificates")
|
||||
|
Loading…
Reference in New Issue
Block a user