CREATE OR REPLACE FUNCTION nn_db.application_get(
	in_pk_user nn_db.user.pk_user%TYPE)
RETURNS TABLE(
	pk_application nn_db.application.pk_application%TYPE
	, car_number nn_db.application.car_number%TYPE
	, description nn_db.application.description%TYPE
	, fk_status nn_db.application.fk_status%TYPE
	, title nn_db.status.title%TYPE
	, fk_user nn_db.application.fk_user%TYPE
	, username nn_db.user.username%TYPE
	, pk_image nn_db.image.pk_image%TYPE
	, file_name nn_db.image.file_name%TYPE
	, file_ext nn_db.image.file_ext%TYPE)
AS $$
BEGIN
	RETURN QUERY SELECT 
		nn_db.application.pk_application
		, nn_db.application.car_number
		, nn_db.application.description
		, nn_db.application.fk_status
		, nn_db.status.title
		, nn_db.application.fk_user
		, nn_db.user.username
		, nn_db.image.pk_image
		, nn_db.image.file_name
		, nn_db.image.file_ext
	FROM nn_db.application
	INNER JOIN nn_db.status 
		ON nn_db.status.pk_status = nn_db.application.fk_status
	INNER JOIN nn_db.user
		ON nn_db.user.pk_user = nn_db.application.fk_user
	LEFT JOIN nn_db.image
		ON nn_db.image.fk_application = nn_db.application.pk_application
	WHERE 
		CASE WHEN in_pk_user IS NULL
			THEN nn_db.application.fk_user IN (SELECT nn_db.user.pk_user FROM nn_db.user)
		ELSE
			nn_db.application.fk_user = in_pk_user
		END
	ORDER BY nn_db.application.pk_application;
END;
$$ LANGUAGE plpgsql