Hello,
PostgreSQL allow only catch exception (elevel ERROR). SQL/PSM requires that
warnings are catchable too. Simply solution's is adding one callback to
error's processing of errors on level WARNING.
typedef struct WarningHandlerCallback
{ bool (*callback) (void *arg, ErrorData *edata); void *arg;
} WarningHandlerCallback;
extern DLLIMPORT WarningHandlerCallback *warning_handler;
Callback function returns true if accept warning and process it. This
function is called from errfinish()
/* * Emit the message to the right places. If warning_handler is
defined, * try use warning_handler. Emit message only if handler don't
accept * message (returns false). Warning handlers are used in PL/pgPSM
language. */ if (elevel == WARNING) { bool handled = false;
if (warning_handler) handled =
(*warning_handler->callback)(warning_handler->arg,edata);
if (!handled) EmitErrorReport(); } else
EmitErrorReport();
It's propably usable only for SQL/PSM implementation, and it's one from two
necessery hacks to core for this PL (second is scrollable cursor's support).
But without this hook I cannot simply distribute plpgpsm.
Any comments?
Best regards
Pavel Stehule
_________________________________________________________________
Chcete sdilet sve obrazky a hudbu s prateli? http://messenger.msn.cz/