1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-26 12:21:12 +03:00

Run pgindent on the previous commit.

Clean up after rearranging PG_TRY blocks.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/2954090.1748723636@sss.pgh.pa.us
Backpatch-through: 13
This commit is contained in:
Tom Lane
2025-06-01 14:55:24 -04:00
parent b56a92651a
commit b898bb2a79

View File

@ -61,64 +61,64 @@ PLy_elog_impl(int elevel, const char *fmt,...)
/* Use a PG_TRY block to ensure we release the PyObjects just acquired */ /* Use a PG_TRY block to ensure we release the PyObjects just acquired */
PG_TRY(); PG_TRY();
{ {
const char *primary = NULL; const char *primary = NULL;
int sqlerrcode = 0; int sqlerrcode = 0;
char *detail = NULL; char *detail = NULL;
char *hint = NULL; char *hint = NULL;
char *query = NULL; char *query = NULL;
int position = 0; int position = 0;
char *schema_name = NULL; char *schema_name = NULL;
char *table_name = NULL; char *table_name = NULL;
char *column_name = NULL; char *column_name = NULL;
char *datatype_name = NULL; char *datatype_name = NULL;
char *constraint_name = NULL; char *constraint_name = NULL;
if (exc != NULL) if (exc != NULL)
{ {
PyErr_NormalizeException(&exc, &val, &tb); PyErr_NormalizeException(&exc, &val, &tb);
if (PyErr_GivenExceptionMatches(val, PLy_exc_spi_error)) if (PyErr_GivenExceptionMatches(val, PLy_exc_spi_error))
PLy_get_spi_error_data(val, &sqlerrcode, PLy_get_spi_error_data(val, &sqlerrcode,
&detail, &hint, &query, &position, &detail, &hint, &query, &position,
&schema_name, &table_name, &column_name,
&datatype_name, &constraint_name);
else if (PyErr_GivenExceptionMatches(val, PLy_exc_error))
PLy_get_error_data(val, &sqlerrcode, &detail, &hint,
&schema_name, &table_name, &column_name, &schema_name, &table_name, &column_name,
&datatype_name, &constraint_name); &datatype_name, &constraint_name);
else if (PyErr_GivenExceptionMatches(val, PLy_exc_error)) else if (PyErr_GivenExceptionMatches(val, PLy_exc_fatal))
PLy_get_error_data(val, &sqlerrcode, &detail, &hint, elevel = FATAL;
&schema_name, &table_name, &column_name,
&datatype_name, &constraint_name);
else if (PyErr_GivenExceptionMatches(val, PLy_exc_fatal))
elevel = FATAL;
}
PLy_traceback(exc, val, tb,
&xmsg, &tbmsg, &tb_depth);
if (fmt)
{
for (;;)
{
va_list ap;
int needed;
errno = save_errno;
va_start(ap, fmt);
needed = appendStringInfoVA(&emsg, dgettext(TEXTDOMAIN, fmt), ap);
va_end(ap);
if (needed == 0)
break;
enlargeStringInfo(&emsg, needed);
} }
primary = emsg.data;
/* If there's an exception message, it goes in the detail. */ PLy_traceback(exc, val, tb,
if (xmsg) &xmsg, &tbmsg, &tb_depth);
detail = xmsg;
} if (fmt)
else {
{ for (;;)
if (xmsg) {
primary = xmsg; va_list ap;
} int needed;
errno = save_errno;
va_start(ap, fmt);
needed = appendStringInfoVA(&emsg, dgettext(TEXTDOMAIN, fmt), ap);
va_end(ap);
if (needed == 0)
break;
enlargeStringInfo(&emsg, needed);
}
primary = emsg.data;
/* If there's an exception message, it goes in the detail. */
if (xmsg)
detail = xmsg;
}
else
{
if (xmsg)
primary = xmsg;
}
ereport(elevel, ereport(elevel,
(errcode(sqlerrcode ? sqlerrcode : ERRCODE_EXTERNAL_ROUTINE_EXCEPTION), (errcode(sqlerrcode ? sqlerrcode : ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
@ -195,39 +195,39 @@ PLy_traceback(PyObject *e, PyObject *v, PyObject *tb,
*/ */
PG_TRY(); PG_TRY();
{ {
char *e_type_s = NULL; char *e_type_s = NULL;
char *e_module_s = NULL; char *e_module_s = NULL;
const char *vstr; const char *vstr;
StringInfoData xstr; StringInfoData xstr;
e_type_o = PyObject_GetAttrString(e, "__name__"); e_type_o = PyObject_GetAttrString(e, "__name__");
e_module_o = PyObject_GetAttrString(e, "__module__"); e_module_o = PyObject_GetAttrString(e, "__module__");
if (e_type_o) if (e_type_o)
e_type_s = PLyUnicode_AsString(e_type_o); e_type_s = PLyUnicode_AsString(e_type_o);
if (e_module_o) if (e_module_o)
e_module_s = PLyUnicode_AsString(e_module_o); e_module_s = PLyUnicode_AsString(e_module_o);
if (v && ((vob = PyObject_Str(v)) != NULL)) if (v && ((vob = PyObject_Str(v)) != NULL))
vstr = PLyUnicode_AsString(vob); vstr = PLyUnicode_AsString(vob);
else else
vstr = "unknown"; vstr = "unknown";
initStringInfo(&xstr); initStringInfo(&xstr);
if (!e_type_s || !e_module_s) if (!e_type_s || !e_module_s)
{ {
/* shouldn't happen */ /* shouldn't happen */
appendStringInfoString(&xstr, "unrecognized exception"); appendStringInfoString(&xstr, "unrecognized exception");
} }
/* mimics behavior of traceback.format_exception_only */ /* mimics behavior of traceback.format_exception_only */
else if (strcmp(e_module_s, "builtins") == 0 else if (strcmp(e_module_s, "builtins") == 0
|| strcmp(e_module_s, "__main__") == 0 || strcmp(e_module_s, "__main__") == 0
|| strcmp(e_module_s, "exceptions") == 0) || strcmp(e_module_s, "exceptions") == 0)
appendStringInfoString(&xstr, e_type_s); appendStringInfoString(&xstr, e_type_s);
else else
appendStringInfo(&xstr, "%s.%s", e_module_s, e_type_s); appendStringInfo(&xstr, "%s.%s", e_module_s, e_type_s);
appendStringInfo(&xstr, ": %s", vstr); appendStringInfo(&xstr, ": %s", vstr);
*xmsg = xstr.data; *xmsg = xstr.data;
} }
PG_FINALLY(); PG_FINALLY();
{ {
@ -274,61 +274,61 @@ PLy_traceback(PyObject *e, PyObject *v, PyObject *tb,
if (filename == NULL) if (filename == NULL)
elog(ERROR, "could not get file name from Python code object"); elog(ERROR, "could not get file name from Python code object");
/* The first frame always points at <module>, skip it. */ /* The first frame always points at <module>, skip it. */
if (*tb_depth > 0) if (*tb_depth > 0)
{
PLyExecutionContext *exec_ctx = PLy_current_execution_context();
char *proname;
char *fname;
char *line;
char *plain_filename;
long plain_lineno;
/*
* The second frame points at the internal function, but to mimic
* Python error reporting we want to say <module>.
*/
if (*tb_depth == 1)
fname = "<module>";
else
fname = PLyUnicode_AsString(name);
proname = PLy_procedure_name(exec_ctx->curr_proc);
plain_filename = PLyUnicode_AsString(filename);
plain_lineno = PyLong_AsLong(lineno);
if (proname == NULL)
appendStringInfo(&tbstr, "\n PL/Python anonymous code block, line %ld, in %s",
plain_lineno - 1, fname);
else
appendStringInfo(&tbstr, "\n PL/Python function \"%s\", line %ld, in %s",
proname, plain_lineno - 1, fname);
/*
* function code object was compiled with "<string>" as the
* filename
*/
if (exec_ctx->curr_proc && plain_filename != NULL &&
strcmp(plain_filename, "<string>") == 0)
{ {
PLyExecutionContext *exec_ctx = PLy_current_execution_context();
char *proname;
char *fname;
char *line;
char *plain_filename;
long plain_lineno;
/* /*
* If we know the current procedure, append the exact line * The second frame points at the internal function, but to
* from the source, again mimicking Python's traceback.py * mimic Python error reporting we want to say <module>.
* module behavior. We could store the already line-split
* source to avoid splitting it every time, but producing a
* traceback is not the most important scenario to optimize
* for. But we do not go as far as traceback.py in reading
* the source of imported modules.
*/ */
line = get_source_line(exec_ctx->curr_proc->src, plain_lineno); if (*tb_depth == 1)
if (line) fname = "<module>";
else
fname = PLyUnicode_AsString(name);
proname = PLy_procedure_name(exec_ctx->curr_proc);
plain_filename = PLyUnicode_AsString(filename);
plain_lineno = PyLong_AsLong(lineno);
if (proname == NULL)
appendStringInfo(&tbstr, "\n PL/Python anonymous code block, line %ld, in %s",
plain_lineno - 1, fname);
else
appendStringInfo(&tbstr, "\n PL/Python function \"%s\", line %ld, in %s",
proname, plain_lineno - 1, fname);
/*
* function code object was compiled with "<string>" as the
* filename
*/
if (exec_ctx->curr_proc && plain_filename != NULL &&
strcmp(plain_filename, "<string>") == 0)
{ {
appendStringInfo(&tbstr, "\n %s", line); /*
pfree(line); * If we know the current procedure, append the exact line
* from the source, again mimicking Python's traceback.py
* module behavior. We could store the already line-split
* source to avoid splitting it every time, but producing
* a traceback is not the most important scenario to
* optimize for. But we do not go as far as traceback.py
* in reading the source of imported modules.
*/
line = get_source_line(exec_ctx->curr_proc->src, plain_lineno);
if (line)
{
appendStringInfo(&tbstr, "\n %s", line);
pfree(line);
}
} }
} }
} }
}
PG_FINALLY(); PG_FINALLY();
{ {
Py_XDECREF(frame); Py_XDECREF(frame);