From 7d5edf2ba7c23ffebec978eb5c21b5d108aaaf2a Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Wed, 6 Mar 2002 18:50:33 +0000 Subject: [PATCH] Add new elog() levels to stored procedure languages. plperl DEBUG hack still needed because only removed in 7.4. --- src/pl/plperl/SPI.xs | 18 +++++++++---- src/pl/plperl/eloglvl.c | 23 ++++++++++++++-- src/pl/plperl/eloglvl.h | 15 +++++++---- src/pl/plperl/plperl.c | 4 +-- src/pl/plpgsql/src/gram.y | 17 +++++++++++- src/pl/plpgsql/src/scan.l | 5 +++- src/pl/plpython/error.expected | 6 ++--- src/pl/plpython/feature.expected | 2 +- src/pl/plpython/plpython.c | 46 ++++++++++++++++++++++++-------- src/pl/tcl/pltcl.c | 10 ++++--- 10 files changed, 111 insertions(+), 35 deletions(-) diff --git a/src/pl/plperl/SPI.xs b/src/pl/plperl/SPI.xs index 451714ce0e..61f59fa43c 100644 --- a/src/pl/plperl/SPI.xs +++ b/src/pl/plperl/SPI.xs @@ -55,17 +55,25 @@ elog_elog(level, message) int level char* message CODE: - if (level > 0) - return; - else - elog(level, message); + elog(level, message); int elog_DEBUG() int -elog_ERROR() +elog_LOG() + +int +elog_INFO() int elog_NOTICE() + +int +elog_WARNING() + +int +elog_ERROR() + + diff --git a/src/pl/plperl/eloglvl.c b/src/pl/plperl/eloglvl.c index 23289479cd..a0da01a2f0 100644 --- a/src/pl/plperl/eloglvl.c +++ b/src/pl/plperl/eloglvl.c @@ -12,14 +12,20 @@ int elog_DEBUG(void) +{ + return DEBUG1; +} + +int +elog_LOG(void) { return LOG; } int -elog_ERROR(void) +elog_INFO(void) { - return ERROR; + return INFO; } int @@ -27,3 +33,16 @@ elog_NOTICE(void) { return NOTICE; } + +int +elog_WARNING(void) +{ + return WARNING; +} + +int +elog_ERROR(void) +{ + return ERROR; +} + diff --git a/src/pl/plperl/eloglvl.h b/src/pl/plperl/eloglvl.h index c07cd5b5d4..742b5e6434 100644 --- a/src/pl/plperl/eloglvl.h +++ b/src/pl/plperl/eloglvl.h @@ -1,8 +1,13 @@ -int - elog_DEBUG(void); +int elog_DEBUG(void); -int - elog_ERROR(void); +int elog_LOG(void); + +int elog_INFO(void); + +int elog_NOTICE(void); + +int elog_WARNING(void); + +int elog_ERROR(void); -int elog_NOTICE(void); diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c index c6d5875b7e..5ba80b7b32 100644 --- a/src/pl/plperl/plperl.c +++ b/src/pl/plperl/plperl.c @@ -33,7 +33,7 @@ * ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plperl/plperl.c,v 1.28 2002/01/24 21:40:44 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plperl/plperl.c,v 1.29 2002/03/06 18:50:26 momjian Exp $ * **********************************************************************/ @@ -210,7 +210,7 @@ plperl_init_interp(void) */ "require Safe; SPI::bootstrap();" "sub ::mksafefunc { my $x = new Safe; $x->permit_only(':default');$x->permit(':base_math');" - "$x->share(qw[&elog &DEBUG &NOTICE &ERROR]);" + "$x->share(qw[&elog &DEBUG &LOG &INFO &NOTICE &WARNING &ERROR]);" " return $x->reval(qq[sub { $_[0] }]); }" "sub ::mkunsafefunc {return eval(qq[ sub { $_[0] } ]); }" }; diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y index 38544b2108..a1433a9022 100644 --- a/src/pl/plpgsql/src/gram.y +++ b/src/pl/plpgsql/src/gram.y @@ -4,7 +4,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.30 2002/03/02 21:39:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.31 2002/03/06 18:50:29 momjian Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -161,8 +161,10 @@ static PLpgSQL_expr *make_tupret_expr(PLpgSQL_row *row); %token K_GET %token K_IF %token K_IN +%token K_INFO %token K_INTO %token K_IS +%token K_LOG %token K_LOOP %token K_NOT %token K_NOTICE @@ -180,6 +182,7 @@ static PLpgSQL_expr *make_tupret_expr(PLpgSQL_row *row); %token K_THEN %token K_TO %token K_TYPE +%token K_WARNING %token K_WHEN %token K_WHILE @@ -1201,10 +1204,22 @@ raise_level : K_EXCEPTION { $$ = ERROR; } + | K_WARNING + { + $$ = WARNING; + } | K_NOTICE { $$ = NOTICE; } + | K_INFO + { + $$ = INFO; + } + | K_LOG + { + $$ = LOG; + } | K_DEBUG { $$ = DEBUG5; diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l index 49191fa106..a9f6997500 100644 --- a/src/pl/plpgsql/src/scan.l +++ b/src/pl/plpgsql/src/scan.l @@ -4,7 +4,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.16 2001/10/09 15:59:56 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.17 2002/03/06 18:50:29 momjian Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -117,8 +117,10 @@ from { return K_FROM; } get { return K_GET; } if { return K_IF; } in { return K_IN; } +info { return K_INFO; } into { return K_INTO; } is { return K_IS; } +log { return K_LOG; } loop { return K_LOOP; } not { return K_NOT; } notice { return K_NOTICE; } @@ -136,6 +138,7 @@ select { return K_SELECT; } then { return K_THEN; } to { return K_TO; } type { return K_TYPE; } +warning { return K_WARNING; } when { return K_WHEN; } while { return K_WHILE; } diff --git a/src/pl/plpython/error.expected b/src/pl/plpython/error.expected index 96de5da660..9f0eff0762 100644 --- a/src/pl/plpython/error.expected +++ b/src/pl/plpython/error.expected @@ -1,11 +1,11 @@ SELECT invalid_type_uncaught('rick'); -NOTICE: plpython: in function __plpython_procedure_invalid_type_uncaught_49801: +WARNING: plpython: in function __plpython_procedure_invalid_type_uncaught_49801: plpy.SPIError: Cache lookup for type `test' failed. SELECT invalid_type_caught('rick'); -NOTICE: plpython: in function __plpython_procedure_invalid_type_caught_49802: +WARNING: plpython: in function __plpython_procedure_invalid_type_caught_49802: plpy.SPIError: Cache lookup for type `test' failed. SELECT invalid_type_reraised('rick'); -NOTICE: plpython: in function __plpython_procedure_invalid_type_reraised_49803: +WARNING: plpython: in function __plpython_procedure_invalid_type_reraised_49803: plpy.SPIError: Cache lookup for type `test' failed. SELECT valid_type('rick'); valid_type diff --git a/src/pl/plpython/feature.expected b/src/pl/plpython/feature.expected index b689c1f615..9afd782e7d 100644 --- a/src/pl/plpython/feature.expected +++ b/src/pl/plpython/feature.expected @@ -29,7 +29,7 @@ SELECT global_test_two(); (1 row) SELECT import_fail(); -NOTICE: ('import socket failed -- untrusted dynamic module: _socket',) +WARNING: ('import socket failed -- untrusted dynamic module: _socket',) import_fail -------------------- failed as expected diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index c0858076f6..e56f9254cf 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -29,7 +29,7 @@ * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.15 2002/03/06 06:10:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.16 2002/03/06 18:50:32 momjian Exp $ * ********************************************************************* */ @@ -1658,9 +1658,12 @@ PLyDict_FromTuple(PLyTypeInfo * info, HeapTuple tuple, TupleDesc desc) /* interface to postgresql elog */ static PyObject *PLy_debug(PyObject *, PyObject *); +static PyObject *PLy_log(PyObject *, PyObject *); +static PyObject *PLy_info(PyObject *, PyObject *); +static PyObject *PLy_notice(PyObject *, PyObject *); +static PyObject *PLy_warning(PyObject *, PyObject *); static PyObject *PLy_error(PyObject *, PyObject *); static PyObject *PLy_fatal(PyObject *, PyObject *); -static PyObject *PLy_notice(PyObject *, PyObject *); /* PLyPlanObject, PLyResultObject and SPI interface */ @@ -1782,9 +1785,12 @@ static PyMethodDef PLy_methods[] = { * logging methods */ {"debug", PLy_debug, METH_VARARGS, NULL}, + {"log", PLy_log, METH_VARARGS, NULL}, + {"info", PLy_info, METH_VARARGS, NULL}, + {"notice", PLy_notice, METH_VARARGS, NULL}, + {"warning", PLy_warning, METH_VARARGS, NULL}, {"error", PLy_error, METH_VARARGS, NULL}, {"fatal", PLy_fatal, METH_VARARGS, NULL}, - {"notice", PLy_notice, METH_VARARGS, NULL}, /* * create a stored plan @@ -2627,35 +2633,53 @@ populate_methods(PyObject *klass, PyMethodDef *methods) /* the python interface to the elog function * don't confuse these with PLy_elog */ -static PyObject *PLy_log(int, PyObject *, PyObject *); +static PyObject *PLy_output(int, PyObject *, PyObject *); PyObject * PLy_debug(PyObject * self, PyObject * args) { - return PLy_log(LOG, self, args); + return PLy_output(DEBUG1, self, args); } PyObject * -PLy_error(PyObject * self, PyObject * args) +PLy_log(PyObject * self, PyObject * args) { - return PLy_log(ERROR, self, args); + return PLy_output(LOG, self, args); } PyObject * -PLy_fatal(PyObject * self, PyObject * args) +PLy_info(PyObject * self, PyObject * args) { - return PLy_log(FATAL, self, args); + return PLy_output(INFO, self, args); } PyObject * PLy_notice(PyObject * self, PyObject * args) { - return PLy_log(NOTICE, self, args); + return PLy_output(NOTICE, self, args); +} + +PyObject * +PLy_warning(PyObject * self, PyObject * args) +{ + return PLy_output(WARNING, self, args); +} + +PyObject * +PLy_error(PyObject * self, PyObject * args) +{ + return PLy_output(ERROR, self, args); +} + +PyObject * +PLy_fatal(PyObject * self, PyObject * args) +{ + return PLy_output(FATAL, self, args); } PyObject * -PLy_log(volatile int level, PyObject * self, PyObject * args) +PLy_output(volatile int level, PyObject * self, PyObject * args) { DECLARE_EXC(); PyObject *so; diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index ebc7b8fb88..34bc731e9a 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -31,7 +31,7 @@ * ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.51 2002/03/06 06:10:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.52 2002/03/06 18:50:33 momjian Exp $ * **********************************************************************/ @@ -1259,7 +1259,11 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp, return TCL_ERROR; } - if (strcmp(argv[1], "INFO") == 0) + if (strcmp(argv[1], "DEBUG") == 0) + level = DEBUG1; + else if (strcmp(argv[1], "LOG") == 0) + level = LOG; + else if (strcmp(argv[1], "INFO") == 0) level = INFO; else if (strcmp(argv[1], "NOTICE") == 0) level = NOTICE; @@ -1269,8 +1273,6 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp, level = ERROR; else if (strcmp(argv[1], "FATAL") == 0) level = FATAL; - else if (strcmp(argv[1], "DEBUG") == 0) - level = DEBUG1; else { Tcl_AppendResult(interp, "Unknown elog level '", argv[1], -- 2.24.1