Re: PL/PgSQL discussion - Mailing list pgsql-hackers

From Hannu Krosing
Subject Re: PL/PgSQL discussion
Date
Msg-id 35096474.BC989429@sid.trust.ee
Whole thread Raw
In response to Re: PL/PgSQL discussion  (jwieck@debis.com (Jan Wieck))
Responses Re: PL/PgSQL discussion
List pgsql-hackers
Jan Wieck wrote:

> Hannu Krosing wrote:
> >
> > jwieck@debis.com (Jan Wieck) wrote:
> >
> > >     Someone gave a hint about global variables existing during  a
> > >     session.   What  is  a  session  than?  One  transaction? The
> > >     backends lifetime?
> >
> > I think it is a time from connect to disconnect, which currently equals to backends
> > lifetime, but may in future be shorter, if we will implement a backend pool for
> > quick-starting servers.
>
>     Hmmm  -  how  does  a language handler then notice that a new
>     session began?

Probably by defining the reset_session or init_session functions for the language handler and
calling it at the connect time.

> > >
> > >         PL/pgSQL is a block oriented language. A block is defined as
> > >
> > >             [<<label>>]
> > >             [DECLARE
> > >                 -- declarations]
> > >             BEGIN
> > >                 -- statements
> > >             END;
> >
> >
> >
> > >
> > >
> > >         There  can  be  any  number  of  subblocks  in the statements
> > >         section of a block. Subblocks can be used to  hide  variables
> > >         from  outside a block of statements (see Scope and visability
> > >         below).
> >
> > I think that subblock should also be used as the extent of IF, FOR ... LOOP, WHILE and
> > other such statements.
> >
> > Then we would not need the END IF, END LOOP etc.
>
>     The LOOP ... END LOOP etc. syntax  is  just  what  I  saw  in
>     Oracles   PL/SQL   documentation.  I  could  also  live  with
>     BEGIN...END, but what is it good for to be different?

then again we don't need the block delimiters ;)

> > >
> > >     Declarations
> > >
> > >         All variables, rows and records  used  in  a  block  or  it's
> > >         subblocks must be declared in the declarations section of the
> > >         block.   The   parameters   given   to   the   function   are
> > >         automatically  declared  with  the usual identifiers $n.
> >
> > How hard would it bet to have named parameters, or why must we use alias?
>
>     That isn't subject to the PL  handler.  All  the  PL  handler
>     knows about the function is in pg_proc and pg_type. There are
>     no parameter names, and that's what the ALIAS idea came from.

I just meant them as an automatic way to declare and use aliases for $N, like for example C
does currently.

The calling function does not know the local names of called function in C either.

>     If we sometimes implement a new function call interface, this
>     might be possible. Some details about what I have in mind:
>
>         Add a field to pg_proc that tells the  backend  the  call
>         interface the function uses.
>
>         Create   a  new  catalog  pg_parameter,  that  holds  the
>         parameter names  and  other  information  (like  notnull,
>         atttypmod etc.). So a function can be defined to expect a
>         VARCHAR(20) NOT NULL.

This again can be done by automatically rewriting these to additional statements to check for
this as first things in the function body. It makes only a theoretical difference if the error
is reportid before the call or just after it.

>     Currently  only  'null'  and  'single  value'.  The  executor
>     doesn't  accept anything else for non-sql language functions.
>     PL functions are treated by the executor like 'C'  functions.

Actually what I understood from the docs was thatit is 'terribly complicated' and 'beyond the
scope of this tutorial', but not impossible ;)

---------

Hannu


pgsql-hackers by date:

Previous
From: jwieck@debis.com (Jan Wieck)
Date:
Subject: Re: [HACKERS] PL/pgSQL - for discussion (RETURN)
Next
From: David Phan
Date:
Subject: Re: [HACKERS] PL/pgSQL - for discussion