-- name: SelectChannelByName :one
SELECT * FROM data_channel WHERE name = $1 LIMIT 1;

-- name: InsertChannel :exec
INSERT INTO data_channel (name, logged, hub, event_name, location_name)
VALUES (
    @name::text,
    @logged::boolean, @hub::boolean,
    @event_name::text, @location_name::text
);

-- name: SelectChannels :many
SELECT * FROM data_channel
WHERE (@filter_name::bool = false OR name = ANY(@names::text[]))
  AND (@filter_logged::bool = false OR logged = @logged)
  AND (@filter_event_name::bool = false OR event_name = @event_name)
  AND (@filter_location_name::bool = false OR location_name = @location_name)
ORDER BY name
LIMIT NULLIF(@limit_size::INT, 0);

-- name: UpdateChannel :exec
UPDATE data_channel
SET logged = @logged::boolean,
    hub = @hub::boolean,
    event_name = @event_name::text,
    location_name = @location_name::text
WHERE name = @name::text;

-- name: DeleteChannel :exec
DELETE FROM data_channel WHERE name=$1;
