Thread: Language-specific initialization actions

Language-specific initialization actions

From
Peter Eisentraut
Date:
In ProcedureCreate() (backend/catalog/pg_proc.c) there are special cases
for the built-in languages that check whether the to-be-created function
has a valid body.  ISTM that we could extend that for user-defined
functions, as follows.

When creating a language, the user can optionally register a "check"
function for the language, whose responsibility is to check the supplied
function body for correctness and return a Boolean result.  This function
would be executed at the time the function is created.

For example, for PL/Perl, the check function could execute the equivalent
of 'perl -c', or if we have a Java language in the future it could check
whether certain classes are loadable.

Comments?

-- 
Peter Eisentraut   peter_e@gmx.net



Re: Language-specific initialization actions

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> In ProcedureCreate() (backend/catalog/pg_proc.c) there are special cases
> for the built-in languages that check whether the to-be-created function
> has a valid body.  ISTM that we could extend that for user-defined
> functions, as follows.

> When creating a language, the user can optionally register a "check"
> function for the language, whose responsibility is to check the supplied
> function body for correctness and return a Boolean result.  This function
> would be executed at the time the function is created.

Are you planning to also move the existing special cases out to
functions called through this same interface?  That would make pg_proc.c
a lot cleaner, I think.

I don't see any value in returning a boolean; might as well let the
thing just throw an elog --- with, one hopes, an error message somewhat
more specific than "bad function body".
        regards, tom lane