trappable warnings, dynamic change of minimal level for PG_RE_THROW - Mailing list pgsql-hackers

From Pavel Stehule
Subject trappable warnings, dynamic change of minimal level for PG_RE_THROW
Date
Msg-id BAY20-F17C55ABA357DBA09593521F9DE0@phx.gbl
Whole thread Raw
Responses Re: trappable warnings, dynamic change of minimal level for PG_RE_THROW  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Hello

SQL/PSM concept of condition's handlers suppouses so all signals (all levels 
of exception's) are trappable. Common construct is:
begin declare finish boolean default false; declare continue handler for sqlwarning set finish = true; open cursor
whilenot finish do    fetch from cursor end while; close cursor;
 
end;

Every compound statement in sql/psm has default empty continue handler for 
success, warning and not found signal's.

Current code in errfinish (elog.c) throw signal only when level is error.
     if (elevel == ERROR)       {               ...               PG_RE_THROW();       }

I have to dynamicly change this level for all sql/psm block. Can be solution 
using of global variable? Like error_context_stack?

hypotetic code from pl/plpgsql/src/pl_exec.c

static int
exec_stmt_block(PLpgPSM_execstate *estate, PLpgPSM_stmt_block *block)
{    int current_min_level =  error_min_level;    /* global variable from 
elog.c */
    min_level = INFO;    ....    PG_TRY()      ....    PG_CATCH()      ....    PG_END_TRY()
    error_min_level = current_min_level;
}

Is it safe?  Any ideas?

Regards
Pavel Stehule

_________________________________________________________________
Chcete sdilet sve obrazky a hudbu s prateli? http://messenger.msn.cz/



pgsql-hackers by date:

Previous
From: "Simon Riggs"
Date:
Subject: Re: Configuring BLCKSZ and XLOGSEGSZ (in 8.3)
Next
From: Tom Lane
Date:
Subject: Re: Configuring BLCKSZ and XLOGSEGSZ (in 8.3)