Обсуждение: BUG #3725: plsql does not report unknown functions at compile time

Поиск
Список
Период
Сортировка

BUG #3725: plsql does not report unknown functions at compile time

От
"Roger"
Дата:
The following bug has been logged online:

Bug reference:      3725
Logged by:          Roger
Email address:      ramoloney@hotmail.com
PostgreSQL version: 8.3 beta 2
Operating system:   Windows/Linux
Description:        plsql does not report unknown functions at compile time
Details:

Hi,

At compile time, plpgsql does not report unknown functions. For example, if
I have a function.
  p_Func(a,b,c)
and I have calls to it such as:
  p_Func(a)
  p_Func(a,b)
these are not reported at compile time. They are only found at run time.

I cannot stress (I've reported this now 3 times and got no reply) the
importance of this. Surely, you must realize that it is not feasible to test
all execution paths for a large plsql project.

thanks,
Roger

[
PS: I would also love to see functions allowing DEFAULT  parameters as
exists in many other database systems. I know we have polymorphic functions
but this to my mind is not as useful. Take the example where a function has
16 parameters. The polymorphic alternative is to define 16 functions. That
is nasty.
]

Re: BUG #3725: plsql does not report unknown functions at compile time

От
Tom Lane
Дата:
"Roger" <ramoloney@hotmail.com> writes:
> At compile time, plpgsql does not report unknown functions. For example, if
> I have a function.
>   p_Func(a,b,c)
> and I have calls to it such as:
>   p_Func(a)
>   p_Func(a,b)
> these are not reported at compile time. They are only found at run time.

This isn't a bug, no matter how much you complain about it.

If we made plpgsql reject such cases, it would break a whole lot of
things --- for example it would become impossible to create a pair of
mutually recursive functions.  Moreover, it's not hard to think of
cases where it's simply not possible to check when the function is
created, because you can't be certain what input datatypes will be
involved and so it's not clear which function is to be called.

            regards, tom lane