CREATE OR REPLACE FUNCTION message_store.get_last_stream_message(

stream_name varchar

) RETURNS SETOF message_store.message AS $$ DECLARE

_command text;

BEGIN

_command := '
  SELECT
    id::varchar,
    stream_name::varchar,
    type::varchar,
    position::bigint,
    global_position::bigint,
    data::varchar,
    metadata::varchar,
    time::timestamp
  FROM
    messages
  WHERE
    stream_name = $1
  ORDER BY
    position DESC
  LIMIT
    1';

IF current_setting('message_store.debug_get', true) = 'on' OR current_setting('message_store.debug', true) = 'on' THEN
  RAISE NOTICE 'ยป get_last_message';
  RAISE NOTICE 'stream_name ($1): %', get_last_stream_message.stream_name;
  RAISE NOTICE 'Generated Command: %', _command;
END IF;

RETURN QUERY EXECUTE _command USING get_last_stream_message.stream_name;

END; $$ LANGUAGE plpgsql VOLATILE;