From e59a68b0a405f028a7ae565342ed5d86ea5f3578 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Thu, 28 Jan 2021 18:23:03 -0800 Subject: [PATCH] Add composite contraint of squeak hash and client addr in sent offers table (#736) --- ...d3e_add_composite_unique_constraint_on_.py | 33 +++++++++++++++++++ squeaknode/db/models.py | 3 ++ 2 files changed, 36 insertions(+) create mode 100644 squeaknode/db/alembic/versions/d5a06570ed3e_add_composite_unique_constraint_on_.py diff --git a/squeaknode/db/alembic/versions/d5a06570ed3e_add_composite_unique_constraint_on_.py b/squeaknode/db/alembic/versions/d5a06570ed3e_add_composite_unique_constraint_on_.py new file mode 100644 index 00000000..4e3fb60b --- /dev/null +++ b/squeaknode/db/alembic/versions/d5a06570ed3e_add_composite_unique_constraint_on_.py @@ -0,0 +1,33 @@ +"""Add composite unique constraint on squeak hash and client addr of sent offer + +Revision ID: d5a06570ed3e +Revises: cd3f18ee33c8 +Create Date: 2021-01-28 17:49:17.615748 + +""" +from alembic import op + + +# revision identifiers, used by Alembic. +revision = 'd5a06570ed3e' +down_revision = 'cd3f18ee33c8' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('sent_offer', schema=None) as batch_op: + batch_op.create_unique_constraint('uq_sent_offer_squeak_hash_client_addr', [ + 'squeak_hash', 'client_addr']) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('sent_offer', schema=None) as batch_op: + batch_op.drop_constraint( + 'uq_sent_offer_squeak_hash_client_addr', type_='unique') + + # ### end Alembic commands ### diff --git a/squeaknode/db/models.py b/squeaknode/db/models.py index 2ec27d47..8accf645 100644 --- a/squeaknode/db/models.py +++ b/squeaknode/db/models.py @@ -10,6 +10,7 @@ from sqlalchemy import Integer from sqlalchemy import MetaData from sqlalchemy import String from sqlalchemy import Table +from sqlalchemy import UniqueConstraint from sqlalchemy.types import TypeDecorator logger = logging.getLogger(__name__) @@ -130,6 +131,8 @@ class Models: Column("invoice_timestamp", Integer, nullable=False), Column("invoice_expiry", Integer, nullable=False), Column("client_addr", String(64), nullable=False), + UniqueConstraint('squeak_hash', 'client_addr', + name='uq_sent_offer_squeak_hash_client_addr') ) self.received_payments = Table(