-- name: GetVote :one
SELECT value
FROM votes
WHERE user_id = $1 AND question_id = $2;

-- name: QuestionIsVisible :one
SELECT EXISTS(
  SELECT 1 FROM questions WHERE id = $1 AND hidden = 0
)::bool;

-- name: DeleteVote :exec
DELETE FROM votes
WHERE user_id = $1 AND question_id = $2;

-- name: UpsertVoteOnVisible :execrows
INSERT INTO votes (user_id, question_id, value)
SELECT $1, $2, $3
FROM questions q
WHERE q.id = $2 AND q.hidden = 0
ON CONFLICT (user_id, question_id) DO UPDATE
SET value = excluded.value
WHERE EXISTS (
  SELECT 1 FROM questions q2 WHERE q2.id = excluded.question_id AND q2.hidden = 0
);
