GraphQL API and utilities for the rpdata project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.1 KiB

  1. -- name: SetTag :exec
  2. INSERT INTO common_tag (tag, target_kind, target_id)
  3. VALUES (
  4. @tag::TEXT, @target_kind::TEXT, @target_id::TEXT
  5. )
  6. ON CONFLICT DO NOTHING;
  7. -- name: SetTags :exec
  8. INSERT INTO common_tag (tag, target_kind, target_id)
  9. SELECT unnest(@tags::TEXT[]), @target_kind::TEXT as target_kind, @target_id::TEXT as target_id
  10. ON CONFLICT DO NOTHING;
  11. -- name: ClearTag :exec
  12. DELETE FROM common_tag
  13. WHERE tag = @tag::TEXT
  14. AND target_kind = @target_kind::TEXT
  15. AND target_id = @target_id::TEXT;
  16. -- name: ClearTagsByTargetLike :exec
  17. DELETE FROM common_tag
  18. WHERE target_kind = @target_kind::TEXT
  19. AND target_id = @target_id::TEXT
  20. AND tag LIKE @tag_like::TEXT;
  21. -- name: ClearTagsByTarget :exec
  22. DELETE FROM common_tag
  23. WHERE target_kind = @target_kind::TEXT
  24. AND target_id = @target_id::TEXT;
  25. -- name: SetCharacterTagsFromIDs :exec
  26. INSERT INTO common_tag
  27. SELECT 'Character:'||name AS tag, @target_kind::TEXT as target_kind, @target_id::TEXT as target_id
  28. FROM data_character WHERE id = ANY(@character_ids::TEXT[])
  29. ON CONFLICT DO NOTHING;
  30. -- name: SetLocationTagFromChannelName :exec
  31. INSERT INTO common_tag
  32. SELECT 'Location:'||location_name AS tag, @target_kind::TEXT as target_kind, @target_id::TEXT as target_id
  33. FROM data_channel
  34. WHERE name = @channel_name AND location_name != ''
  35. ON CONFLICT DO NOTHING;
  36. -- name: SelectDistinctTags :many
  37. SELECT DISTINCT tag FROM common_tag ORDER BY tag;
  38. -- name: SelectDistinctTagsLike :many
  39. SELECT DISTINCT tag FROM common_tag WHERE tag LIKE $1::text ORDER BY tag;
  40. -- name: SelectTagsByTag :many
  41. SELECT * FROM common_tag WHERE tag = @tag_name::text ORDER BY tag;
  42. -- name: SelectTagsByTags :many
  43. SELECT * FROM common_tag WHERE tag = ANY(@tag_names::text[]) ORDER BY tag;
  44. -- name: SelectTargetsByTags :many
  45. SELECT DISTINCT target_id FROM common_tag WHERE tag = ANY(@tag_names::text[]) AND target_kind = @target_kind::text;
  46. -- name: SelectTagsByTarget :many
  47. SELECT * FROM common_tag WHERE target_kind = @target_kind AND target_id = @target_id::text ORDER BY tag;
  48. -- name: SelectTagsByTargets :many
  49. SELECT * FROM common_tag WHERE target_kind = @target_kind AND target_id = ANY(@target_ids::text[]) ORDER BY tag;