Hi,
I ran into some pretty strange behavior of C-language function and
default parameter values, both on 9.2 and 9.4devel. Consider for example
this trivial C function:
Datum show_bug(PG_FUNCTION_ARGS) {elog(WARNING, "called ;-)");PG_RETURN_VOID(); }
which is accessed using this definition:
CREATE FUNCTION show_bug(a TEXT DEFAULT NULL) RETURNS void AS 'bug.so' LANGUAGE C STRICT;
and let's try various calls:
db=# SELECT show_bug('a'); WARNING: called ;-) show_bug ----------
(1 row)
Seems ok. Now let's use the default value:
db=# SELECT show_bug(); show_bug ----------
(1 row)
db=# SELECT show_bug(NULL); show_bug ----------
(1 row)
Well, seems quite strange to me - it seems as if the function is called,
but apparently it's not. I can't find anything relevant in the docs.
For comparison, a matching PL/pgSQL function:
CREATE FUNCTION show_bug2(a TEXT DEFAULT NULL) RETURNS void AS $$ BEGIN RAISE WARNING 'called ;-)'; END;
$$LANGUAGE plpgsql;
which behaves exactly as expected in all three cases:
db=# SELECT show_bug('a'); WARNING: called ;-) show_bug ----------
(1 row)
db=# SELECT show_bug(); WARNING: called ;-) show_bug ----------
(1 row) db=# SELECT show_bug(NULL); WARNING: called ;-) show_bug ----------
(1 row)
So, what I'm doing wrong? Seems like a bug to me ...
regards
Tomas