Add DB constraints for binary identifier lengths
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
defmodule Parrhesia.Repo.Migrations.AddBinaryIdentifierLengthConstraints do
|
||||
use Ecto.Migration
|
||||
|
||||
@constraints [
|
||||
{"event_ids", "event_ids_id_length_check", "octet_length(id) = 32"},
|
||||
{"events", "events_id_length_check", "octet_length(id) = 32"},
|
||||
{"events", "events_pubkey_length_check", "octet_length(pubkey) = 32"},
|
||||
{"events", "events_sig_length_check", "octet_length(sig) = 64"},
|
||||
{"event_tags", "event_tags_event_id_length_check", "octet_length(event_id) = 32"},
|
||||
{"replaceable_event_state", "replaceable_event_state_pubkey_length_check",
|
||||
"octet_length(pubkey) = 32"},
|
||||
{"replaceable_event_state", "replaceable_event_state_event_id_length_check",
|
||||
"octet_length(event_id) = 32"},
|
||||
{"addressable_event_state", "addressable_event_state_pubkey_length_check",
|
||||
"octet_length(pubkey) = 32"},
|
||||
{"addressable_event_state", "addressable_event_state_event_id_length_check",
|
||||
"octet_length(event_id) = 32"},
|
||||
{"banned_pubkeys", "banned_pubkeys_pubkey_length_check", "octet_length(pubkey) = 32"},
|
||||
{"allowed_pubkeys", "allowed_pubkeys_pubkey_length_check", "octet_length(pubkey) = 32"},
|
||||
{"banned_events", "banned_events_event_id_length_check", "octet_length(event_id) = 32"},
|
||||
{"group_memberships", "group_memberships_pubkey_length_check", "octet_length(pubkey) = 32"},
|
||||
{"group_roles", "group_roles_pubkey_length_check", "octet_length(pubkey) = 32"},
|
||||
{"management_audit_logs", "management_audit_logs_actor_pubkey_length_check",
|
||||
"actor_pubkey IS NULL OR octet_length(actor_pubkey) = 32"},
|
||||
{"acl_rules", "acl_rules_principal_length_check", "octet_length(principal) = 32"}
|
||||
]
|
||||
|
||||
def up do
|
||||
Enum.each(@constraints, fn {table_name, constraint_name, expression} ->
|
||||
execute("""
|
||||
ALTER TABLE #{table_name}
|
||||
ADD CONSTRAINT #{constraint_name}
|
||||
CHECK (#{expression})
|
||||
""")
|
||||
end)
|
||||
end
|
||||
|
||||
def down do
|
||||
Enum.each(@constraints, fn {table_name, constraint_name, _expression} ->
|
||||
execute("""
|
||||
ALTER TABLE #{table_name}
|
||||
DROP CONSTRAINT #{constraint_name}
|
||||
""")
|
||||
end)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user