From c912cbfb25a76a94c89c7c56b67855dc2457b3a6 Mon Sep 17 00:00:00 2001 From: tim Date: Sat, 5 Oct 2024 15:26:14 -0400 Subject: [PATCH] Token indexes --- .../versions/86afa7b6415d_token_indexes.py | 28 +++++++++++++++++++ src/dexorder/database/model/token.py | 7 ++++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 alembic/versions/86afa7b6415d_token_indexes.py diff --git a/alembic/versions/86afa7b6415d_token_indexes.py b/alembic/versions/86afa7b6415d_token_indexes.py new file mode 100644 index 0000000..d75d1dd --- /dev/null +++ b/alembic/versions/86afa7b6415d_token_indexes.py @@ -0,0 +1,28 @@ +"""token indexes + +Revision ID: 86afa7b6415d +Revises: 516b55c83144 +Create Date: 2024-10-05 15:19:05.023706 + +""" +from typing import Sequence, Union + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = '86afa7b6415d' +down_revision: Union[str, None] = '516b55c83144' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.create_index(op.f('ix_token_name'), 'token', ['name'], unique=False, postgresql_using='gist') + op.create_index(op.f('ix_token_approved'), 'token', ['approved'], unique=False) + op.create_index(op.f('ix_token_symbol'), 'token', ['symbol'], unique=False) + + +def downgrade() -> None: + op.drop_index(op.f('ix_token_symbol'), table_name='token') + op.drop_index(op.f('ix_token_approved'), table_name='token') + op.drop_index(op.f('ix_token_name'), table_name='token', postgresql_using='gist') diff --git a/src/dexorder/database/model/token.py b/src/dexorder/database/model/token.py index 762d57a..63f7de2 100644 --- a/src/dexorder/database/model/token.py +++ b/src/dexorder/database/model/token.py @@ -1,6 +1,7 @@ import logging from typing import TypedDict, Optional, NotRequired +from sqlalchemy import Index from sqlalchemy.orm import Mapped, mapped_column from dexorder.database.column import Address, Blockchain, Uint8 @@ -39,10 +40,14 @@ class Token (Base): chain: Mapped[Blockchain] = mapped_column(primary_key=True) address: Mapped[Address] = mapped_column(primary_key=True) name: Mapped[str] - symbol: Mapped[str] + symbol: Mapped[str] = mapped_column(index=True) decimals: Mapped[Uint8] approved: Mapped[bool] = mapped_column(index=True) + __table_args__ = ( + Index('idx_name', 'name', postgresql_using='gist'), # full text search on name + ) + @staticmethod def load(token_dict: OldTokenDict) -> 'Token':