strange behavior with C function and DEFAULT function parameters
От | Tomas Vondra |
---|---|
Тема | strange behavior with C function and DEFAULT function parameters |
Дата | |
Msg-id | 5264776F.3010708@fuzzy.cz обсуждение исходный текст |
Ответы |
Re: strange behavior with C function and DEFAULT function
parameters
Re: strange behavior with C function and DEFAULT function parameters |
Список | pgsql-hackers |
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
В списке pgsql-hackers по дате отправления: