-- name: ListEntityRelations :many SELECT se.slug AS source_slug, te.slug AS target_slug, r.type, r.attributes, r.valid_from, r.valid_to FROM relationships r JOIN entities se ON se.id = r.source_id JOIN entities te ON te.id = r.target_id WHERE r.valid_to IS NULL AND ((sqlc.arg('direction')::text IN ('out','both') AND r.source_id = sqlc.arg('id')) OR (sqlc.arg('direction')::text IN ('in','both') AND r.target_id = sqlc.arg('id'))) AND (sqlc.narg('rel_type')::text IS NULL OR r.type = sqlc.narg('rel_type')) ORDER BY r.type, se.slug, te.slug; -- name: ListGraphEdges :many SELECT se.slug AS source_slug, te.slug AS target_slug, r.type, r.attributes, r.valid_from, r.valid_to FROM relationships r JOIN entities se ON se.id = r.source_id JOIN entities te ON te.id = r.target_id WHERE r.valid_to IS NULL AND r.source_id = ANY(sqlc.arg('ids')::uuid[]) AND r.target_id = ANY(sqlc.arg('ids')::uuid[]) AND (sqlc.narg('rel_types')::text[] IS NULL OR r.type = ANY(sqlc.narg('rel_types')::text[])) ORDER BY r.type, se.slug, te.slug; -- name: EndCurrentRelationship :execrows UPDATE relationships SET valid_to = now() WHERE source_id = $1 AND target_id = $2 AND type = $3 AND valid_to IS NULL;