From 1a7f6e1fa9f500fead3650ef1e4ec9521884e1d8 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Fri, 12 Aug 2022 21:37:34 -0700 Subject: [PATCH] feat(db): add an index for SSHPubKeys.PubKey Speeds up SSHPubKeys.PubKey searches in a larger database. Signed-off-by: Kevin Morris --- aurweb/schema.py | 1 + ...d70103d2e82_add_sshpubkeys_pubkey_index.py | 28 +++++++++++++++++++ test/test_migration.py | 23 +++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py create mode 100644 test/test_migration.py diff --git a/aurweb/schema.py b/aurweb/schema.py index d2644541..e1373bf4 100644 --- a/aurweb/schema.py +++ b/aurweb/schema.py @@ -87,6 +87,7 @@ SSHPubKeys = Table( Column('UserID', ForeignKey('Users.ID', ondelete='CASCADE'), nullable=False), Column('Fingerprint', String(44), primary_key=True), Column('PubKey', String(4096), nullable=False), + Index('SSHPubKeysPubKey', 'PubKey'), mysql_engine='InnoDB', mysql_charset='utf8mb4', mysql_collate='utf8mb4_bin', ) diff --git a/migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py b/migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py new file mode 100644 index 00000000..61e4dc79 --- /dev/null +++ b/migrations/versions/dd70103d2e82_add_sshpubkeys_pubkey_index.py @@ -0,0 +1,28 @@ +"""add SSHPubKeys.PubKey index + +Revision ID: dd70103d2e82 +Revises: d64e5571bc8d +Create Date: 2022-08-12 21:30:26.155465 + +""" +import traceback + +from alembic import op + +# revision identifiers, used by Alembic. +revision = 'dd70103d2e82' +down_revision = 'd64e5571bc8d' +branch_labels = None +depends_on = None + + +def upgrade(): + try: + op.create_index("SSHPubKeysPubKey", "SSHPubKeys", ["PubKey"]) + except Exception: + traceback.print_exc() + print("failing silently...") + + +def downgrade(): + op.drop_index("SSHPubKeysPubKey", "SSHPubKeys") diff --git a/test/test_migration.py b/test/test_migration.py new file mode 100644 index 00000000..cf8702fa --- /dev/null +++ b/test/test_migration.py @@ -0,0 +1,23 @@ +import pytest + +from sqlalchemy import inspect + +from aurweb.db import get_engine +from aurweb.models.ssh_pub_key import SSHPubKey + + +@pytest.fixture(autouse=True) +def setup(db_test): + return + + +def test_sshpubkeys_pubkey_index(): + insp = inspect(get_engine()) + indexes = insp.get_indexes(SSHPubKey.__tablename__) + + found_pk = False + for idx in indexes: + if idx.get("name") == "SSHPubKeysPubKey": + assert idx.get("column_names") == ["PubKey"] + found_pk = True + assert found_pk