-- name: SelectLog :one
SELECT * FROM log WHERE id=$1 OR short_id=$1 LIMIT 1;

-- name: SelectLogs :many
SELECT * FROM log
WHERE (@filter_short_id::BOOL = false OR short_id = ANY(@short_ids::TEXT[]))
  AND (@filter_character_id::BOOL = false OR character_ids && (@character_ids::TEXT[]))
  AND (@filter_channel_name::BOOL = false OR channel_name = ANY(@channel_names::TEXT[]))
  AND (@filter_event_name::BOOL = false OR event_name = ANY(@event_names::TEXT[]))
  AND (@filter_open::BOOL = false OR open = @open::BOOL)
  AND (@filter_earlist_date::BOOL = false OR date >= @earliest_date::TIMESTAMP)
  AND (@filter_lastest_date::BOOL = false OR date <= @latest_date::TIMESTAMP)
ORDER BY date
LIMIT NULLIF(@limit_size::INT, 0);

-- name: InsertLog :exec
INSERT INTO log (id, short_id, character_ids, date, channel_name, event_name, title, description, open)
VALUES (
   @id, @short_id, @character_ids, @date, @channel_name, @event_name, @title, @description, @open
);

-- name: UpdateLog :exec
UPDATE log
SET title = @title,
    event_name = @event_name,
    description = @description,
    open = @open,
    character_ids = @character_ids
WHERE id = @id;

-- name: DeleteLog :exec
DELETE FROM log WHERE id=$1;
