I'd really like to know why the IF (previous_foo IS NOT NULL) condition fails below, given that changing this line to IF (previous_foo.total IS NOT NULL) evaluates true.
CREATE OR REPLACE FUNCTION foo_total(the_bar bar)
RETURNS numeric
LANGUAGE plpgsql
STABLE
AS $$
DECALRE
previous_foo foo;
BEGIN
previous_foo := foo_previous(the_bar);
IF (previous_foo IS NOT NULL) THEN -- fails
-- IF (previous_foo.total IS NOT NULL) -- works
return previous_foo.total;
END IF;
RETURN NULL;
END;
$$;
So how can previous_foo be null, yet previous_foo.total not be null :/
Previous foo is doing something like this FYI
create or replace function previous_foo(the_bar bar) returns foo
LANGUAGE sql STABLE
AS $$
SELECT foo.* FROM foo
WHERE -- conditions;
$$;