mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-07-03 13:21:51 +00:00
chat: simplex_name partial indexes are UNIQUE
A simplex name is a stable, per-user identity (one name → one contact or group). Without a unique constraint, a later writer that populates the column twice for the same name would silently produce two matching rows, and getContactBySimplexName/getGroupInfoBySimplexName would return whichever the planner picks first. Promote the partial indexes added in M20260603 to UNIQUE before any caller wires the writes. Predicate (WHERE simplex_name IS NOT NULL) already scopes the constraint to rows that opted in.
This commit is contained in:
@@ -13,11 +13,11 @@ ALTER TABLE contacts ADD COLUMN simplex_name TEXT;
|
|||||||
ALTER TABLE groups ADD COLUMN simplex_name TEXT;
|
ALTER TABLE groups ADD COLUMN simplex_name TEXT;
|
||||||
ALTER TABLE connections ADD COLUMN simplex_name TEXT;
|
ALTER TABLE connections ADD COLUMN simplex_name TEXT;
|
||||||
|
|
||||||
CREATE INDEX idx_contacts_simplex_name
|
CREATE UNIQUE INDEX idx_contacts_simplex_name
|
||||||
ON contacts(user_id, simplex_name)
|
ON contacts(user_id, simplex_name)
|
||||||
WHERE simplex_name IS NOT NULL;
|
WHERE simplex_name IS NOT NULL;
|
||||||
|
|
||||||
CREATE INDEX idx_groups_simplex_name
|
CREATE UNIQUE INDEX idx_groups_simplex_name
|
||||||
ON groups(user_id, simplex_name)
|
ON groups(user_id, simplex_name)
|
||||||
WHERE simplex_name IS NOT NULL;
|
WHERE simplex_name IS NOT NULL;
|
||||||
|]
|
|]
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ ALTER TABLE contacts ADD COLUMN simplex_name TEXT;
|
|||||||
ALTER TABLE groups ADD COLUMN simplex_name TEXT;
|
ALTER TABLE groups ADD COLUMN simplex_name TEXT;
|
||||||
ALTER TABLE connections ADD COLUMN simplex_name TEXT;
|
ALTER TABLE connections ADD COLUMN simplex_name TEXT;
|
||||||
|
|
||||||
CREATE INDEX idx_contacts_simplex_name
|
CREATE UNIQUE INDEX idx_contacts_simplex_name
|
||||||
ON contacts(user_id, simplex_name)
|
ON contacts(user_id, simplex_name)
|
||||||
WHERE simplex_name IS NOT NULL;
|
WHERE simplex_name IS NOT NULL;
|
||||||
|
|
||||||
CREATE INDEX idx_groups_simplex_name
|
CREATE UNIQUE INDEX idx_groups_simplex_name
|
||||||
ON groups(user_id, simplex_name)
|
ON groups(user_id, simplex_name)
|
||||||
WHERE simplex_name IS NOT NULL;
|
WHERE simplex_name IS NOT NULL;
|
||||||
|]
|
|]
|
||||||
|
|||||||
@@ -1310,13 +1310,13 @@ ON groups(
|
|||||||
relay_request_group_link
|
relay_request_group_link
|
||||||
)
|
)
|
||||||
WHERE relay_request_group_link IS NOT NULL;
|
WHERE relay_request_group_link IS NOT NULL;
|
||||||
CREATE INDEX idx_contacts_simplex_name
|
CREATE UNIQUE INDEX idx_contacts_simplex_name
|
||||||
ON contacts(
|
ON contacts(
|
||||||
user_id,
|
user_id,
|
||||||
simplex_name
|
simplex_name
|
||||||
)
|
)
|
||||||
WHERE simplex_name IS NOT NULL;
|
WHERE simplex_name IS NOT NULL;
|
||||||
CREATE INDEX idx_groups_simplex_name
|
CREATE UNIQUE INDEX idx_groups_simplex_name
|
||||||
ON groups(
|
ON groups(
|
||||||
user_id,
|
user_id,
|
||||||
simplex_name
|
simplex_name
|
||||||
|
|||||||
Reference in New Issue
Block a user