diff --git a/alembic/versions/ce116d0badc8_create_latest_s3_block_table.py b/alembic/versions/ce116d0badc8_create_latest_s3_block_table.py new file mode 100644 index 0000000..0d386c1 --- /dev/null +++ b/alembic/versions/ce116d0badc8_create_latest_s3_block_table.py @@ -0,0 +1,27 @@ +"""Create latest_s3_block table + +Revision ID: ce116d0badc8 +Revises: 5c5375de15fd +Create Date: 2022-01-31 23:36:34.971594 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "ce116d0badc8" +down_revision = "5c5375de15fd" +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + "latest_s3_block", + sa.Column("block_number", sa.Numeric, nullable=False), + sa.Column("updated_at", sa.TIMESTAMP, server_default=sa.func.now()), + ) + + +def downgrade(): + op.drop_table("latest_s3_block") diff --git a/mev_inspect/crud/latest_s3_block.py b/mev_inspect/crud/latest_s3_block.py new file mode 100644 index 0000000..1034250 --- /dev/null +++ b/mev_inspect/crud/latest_s3_block.py @@ -0,0 +1,25 @@ +from typing import Optional + + +def find_latest_s3_block(db_session) -> Optional[int]: + result = db_session.execute( + "SELECT block_number FROM latest_s3_block LIMIT 1" + ).one_or_none() + if result is None: + return None + else: + return int(result[0]) + + +def update_latest_s3_block(db_session, block_number) -> None: + db_session.execute( + """ + UPDATE latest_s3_block + SET block_number = :block_number, updated_at = current_timestamp; + INSERT INTO latest_s3_block + (block_number, updated_at) + SELECT :block_number, current_timestamp + WHERE NOT EXISTS (SELECT 1 FROM latest_s3_blocks); + """, + params={"block_number": block_number}, + )