Commit 09de0cc5 authored by Mo Firouz's avatar Mo Firouz
Browse files

Improve SQL compliance of group user add query

parent c222d275
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -844,14 +844,14 @@ func (p *pipeline) groupUserAdd(l zap.Logger, session *session, envelope *Envelo
INSERT INTO group_edge (source_id, position, updated_at, destination_id, state)
SELECT data.id, data.position, data.updated_at, data.destination, data.state
FROM (
  SELECT $1::BYTES AS id, $2::INT AS position, $2::INT AS updated_at, $3::BYTES AS destination, 1 AS state
  SELECT $1::BYTEA AS id, $2::INT AS position, $2::INT AS updated_at, $3::BYTEA AS destination, 1 AS state
  UNION ALL
  SELECT $3::BYTES AS id, $2::INT AS position, $2::INT AS updated_at, $1::BYTES AS destination, 1 AS state
  SELECT $3::BYTEA AS id, $2::INT AS position, $2::INT AS updated_at, $1::BYTEA AS destination, 1 AS state
) AS data
WHERE
  EXISTS (SELECT source_id FROM group_edge WHERE source_id = $1::BYTES AND destination_id = $4::BYTES AND state = 0)
  EXISTS (SELECT source_id FROM group_edge WHERE source_id = $1::BYTEA AND destination_id = $4::BYTEA AND state = 0)
AND
  EXISTS (SELECT id FROM groups WHERE id = $1::BYTES AND disabled_at = 0)
  EXISTS (SELECT id FROM groups WHERE id = $1::BYTEA AND disabled_at = 0)
ON CONFLICT (source_id, destination_id)
DO UPDATE SET state = 1, updated_at = $2::INT`,
		groupID.Bytes(), nowMs(), userID.Bytes(), session.userID.Bytes())