2011/3/2 Merlin Moncure <mmonc...@gmail.com>

> On Wed, Mar 2, 2011 at 8:34 AM, Dmitriy Igrishin <dmit...@gmail.com>
> wrote:
> > 2011/3/2 Merlin Moncure <mmonc...@gmail.com>
> >> On Tue, Mar 1, 2011 at 5:17 PM, Pavel Stehule <pavel.steh...@gmail.com>
> >> wrote:
> >> > Hello
> >> >
> >> > 2011/3/2 Pierre Racine <pierre.rac...@sbf.ulaval.ca>:
> >> >> Hi,
> >> >>
> >> >> I would like to write a generic plpgsql function with a text
> parameter
> >> >> being a callback function name so that my general function can call
> this
> >> >> callback function. e.g.:
> >> >>
> >> >> CREATE OR REPLACE FUNCTION ST_MyCallbackFunction(y int)
> >> >>    RETURNS int AS $$
> >> >>    DECLARE
> >> >>    BEGIN
> >> >>        RETURN someCalculationBasedOnY;
> >> >>    END;
> >> >>    $$ LANGUAGE 'plpgsql';
> >> >>
> >> >> CREATE OR REPLACE FUNCTION ST_MyGeneralFunction(callback text)
> >> >>    RETURNS SETOF geomval AS $$
> >> >>    DECLARE
> >> >>        x integer;
> >> >>        y integer;
> >> >>    BEGIN
> >> >>        y := somecalculation;
> >> >>        x := 'callback'(y);  --This is what I need
> >> >
> >> > EXECUTE 'SELECT ' || callback || '($1)' USING y INTO x;
> >> >
> >> > there are no other way than EXECUTE
> >> >
> >> > attention - there is a sql injection risk
> >>
> >> another way if you are willing to write some C is to wrap and expose
> >> OidFunctionCall1 so it takes oid of function you want to call.
> >
> > As always, Merlin shows the uncommon thinking! :-)
> > Respect!
>
> Thank you, and I would like to be able to claim original invention of
> this idea, however I cannot: it came from none other than Tom
> Lane...
> http://postgresql.1045698.n5.nabble.com/improvise-callbacks-in-plpgsql-td2052928.html
> (for whom nary a day goes by that I am not thankful for his tireless
> efforts).
>
Ahh, thanks to Tom Lane then !
And thank you for the link of interesting topic from past :-)


> merlin
>



-- 
// Dmitriy.

Reply via email to