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.7 KiB

  1. -- name: SelectPost :one
  2. SELECT id, log_short_id, time, kind, nick, text, position FROM log_post WHERE id=$1 LIMIT 1;
  3. -- name: SelectLogIDsFromPostSearch :many
  4. SELECT DISTINCT(log_short_id) FROM log_post WHERE "ts_vector" @@ to_tsquery(@search::TEXT);
  5. -- name: SelectPostsByPositionRange :many
  6. SELECT id, log_short_id, time, kind, nick, text, position FROM log_post WHERE log_short_id = @log_short_id AND position >= @from_position AND position <= @to_position;
  7. -- name: SelectPositionsByLogShortID :many
  8. SELECT position FROM log_post WHERE log_short_id = $1 ORDER BY position;
  9. -- name: SelectPosts :many
  10. SELECT id, log_short_id, time, kind, nick, text, position FROM log_post
  11. WHERE (@filter_ids::BOOL = false OR id = ANY(@ids::TEXT[]))
  12. AND (@filter_kinds::BOOL = false OR kind = ANY(@kinds::TEXT[]))
  13. AND (@filter_log_short_id::BOOL = false OR log_short_id = @log_short_id)
  14. AND (@filter_search::BOOL = false OR "ts_vector" @@ to_tsquery(@search::TEXT))
  15. ORDER BY log_short_id, position
  16. LIMIT NULLIF(@limit_size::INT, 0);
  17. -- name: InsertPost :one
  18. INSERT INTO log_post (id, log_short_id, time, kind, nick, text, position, ts_vector)
  19. SELECT @id, @log_short_id, @time, @kind, @nick, @text, COALESCE(MAX(position), 0)+1, to_tsvector(@nick || ' ' || @text)
  20. FROM log_post
  21. WHERE log_short_id = @log_short_id
  22. RETURNING position;
  23. -- name: InsertPosts :one
  24. INSERT INTO log_post (id, log_short_id, time, kind, nick, text, position, ts_vector)
  25. SELECT UNNEST(@ids::TEXT[]), @log_short_id, UNNEST(@times::TIMESTAMP[]), UNNEST(@kinds::TEXT[]),
  26. UNNEST(@nicks::TEXT[]), UNNEST(@texts::TEXT[]), COALESCE(MAX(position), 0) + UNNEST(@offsets::INT[]),
  27. to_tsvector(UNNEST(@nicks::TEXT[]) || ' ' || UNNEST(@texts::TEXT[]))
  28. FROM log_post
  29. WHERE log_short_id = @log_short_id
  30. RETURNING position;
  31. -- name: UpdatePost :exec
  32. UPDATE log_post
  33. SET time = @time,
  34. kind = @kind,
  35. nick = @nick,
  36. text = @text,
  37. ts_vector = to_tsvector(@nick || ' ' || @text)
  38. WHERE id = @id;
  39. -- name: MovePost :exec
  40. UPDATE log_post SET position = @position WHERE id = @id;
  41. -- name: ShiftPostsBetween :exec
  42. UPDATE log_post SET position = position + @shift_offset::INT WHERE log_short_id = @log_short_id AND position >= @from_position AND position <= @to_position;
  43. -- name: ShiftPostsAfter :exec
  44. UPDATE log_post SET position = position + @shift_offset::INT WHERE log_short_id = @log_short_id AND position >= @from_position;
  45. -- name: ShiftPostsBefore :exec
  46. UPDATE log_post SET position = position + @shift_offset::INT WHERE log_short_id = @log_short_id AND position <= @to_position;
  47. -- name: DeletePost :exec
  48. DELETE FROM log_post WHERE id = @id;
  49. -- name: DeletePostsByLogShortID :exec
  50. DELETE FROM log_post WHERE log_short_id = @log_short_id;