V0.2 patch for TODO Item: SQL-language reference parameters by name. - Mailing list pgsql-patches

From Gevik Babakhani
Subject V0.2 patch for TODO Item: SQL-language reference parameters by name.
Date
Msg-id 000401c81e0d$d0ca8300$0a01a8c0@gevmus
Whole thread Raw
Responses Re: V0.2 patch for TODO Item: SQL-language reference parameters by name.
List pgsql-patches
Hello All,

This patch implements a (generic) callback functionality in the parser.
The mechanism can be used to send callback messages from within the parser
to external functions.

I would like to know your opinion about the following:

In previous discussion Tom referred to:

>One point here is that it would be good to be able to qualify the argument
names with the function name, for example
>    create function myfunc(x int) ...
>        select ... from t where t.x = myfunc.x

The above is possible but I think qualifying the argument names with the
function name
can be cumbersome when one has to provide the function name multiple times.
For example: (where clause)

create or replace function sp_item_get_by_type_or_category(p_type
integer,p_category integer)
    returns setof item_view as
$$
    select ..... from item_view i
        inner join tblcategory c on i.catid = c.catid
        inner join tbltype t on i.typeid = t.typeid
    where
        c.catid = sp_item_get_by_type_or_category.p_category or
        t.typeid = sp_item_get_by_type_or_categor.p_type;
$$
language sql;

Perhaps we could use the word "this"  instead of the entire function name

For example:
....
    where
        c.catid = this.p_category or
        t.typeid = this.p_type;
....


Any thoughts?

Regards,
Gevik

************************************************************************
PLEASE NOTE:
    - This patch in created with MSVC++
    - Resolving the argnames is not yet implemented correctly
      due above.
    - Two files have been added parse_callback.h and .c

How does it work:

>>> To setup callback;

ParserCallbackContext sqlcallbackcontext;

/* attaching parser callback handler*/
sqlcallbackcontext.context = T_ParsingFunctionBody;
sqlcallbackcontext.ctxarg = tuple;
sqlcallbackcontext.callback = sql_parser_callback_handler;
sqlcallbackcontext.previous = parser_callback_context_stack;
parser_callback_context_stack = &sqlcallbackcontext;
....
....
parser_callback_context_stack = sqlcallbackcontext.previous;

>>> To call the callback handler from within the parser:

ParserCallbackContextArgs args;
args.pstate = pstate;
args.input = (Node *)cref;
args.action = A_ResolveAmbigColumnRef;
parser_do_callback(&args);

To handle the callback:

if(context == T_ParsingFunctionBody)
{
    switch(action)
    {
        case  A_ResolveAmbigColumnRef:
            ....
    }
}






Attachment

pgsql-patches by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: krb_match_realm
Next
From: David Fetter
Date:
Subject: Re: V0.2 patch for TODO Item: SQL-language reference parameters by name.