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:
@ -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 */
|
||||
PG_TRY();
|
||||
{
|
||||
const char *primary = NULL;
|
||||
int sqlerrcode = 0;
|
||||
char *detail = NULL;
|
||||
char *hint = NULL;
|
||||
char *query = NULL;
|
||||
int position = 0;
|
||||
char *schema_name = NULL;
|
||||
char *table_name = NULL;
|
||||
char *column_name = NULL;
|
||||
char *datatype_name = NULL;
|
||||
char *constraint_name = NULL;
|
||||
const char *primary = NULL;
|
||||
int sqlerrcode = 0;
|
||||
char *detail = NULL;
|
||||
char *hint = NULL;
|
||||
char *query = NULL;
|
||||
int position = 0;
|
||||
char *schema_name = NULL;
|
||||
char *table_name = NULL;
|
||||
char *column_name = NULL;
|
||||
char *datatype_name = NULL;
|
||||
char *constraint_name = NULL;
|
||||
|
||||
if (exc != NULL)
|
||||
{
|
||||
PyErr_NormalizeException(&exc, &val, &tb);
|
||||
if (exc != NULL)
|
||||
{
|
||||
PyErr_NormalizeException(&exc, &val, &tb);
|
||||
|
||||
if (PyErr_GivenExceptionMatches(val, PLy_exc_spi_error))
|
||||
PLy_get_spi_error_data(val, &sqlerrcode,
|
||||
&detail, &hint, &query, &position,
|
||||
if (PyErr_GivenExceptionMatches(val, PLy_exc_spi_error))
|
||||
PLy_get_spi_error_data(val, &sqlerrcode,
|
||||
&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,
|
||||
&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,
|
||||
&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);
|
||||
else if (PyErr_GivenExceptionMatches(val, PLy_exc_fatal))
|
||||
elevel = FATAL;
|
||||
}
|
||||
primary = emsg.data;
|
||||
|
||||
/* If there's an exception message, it goes in the detail. */
|
||||
if (xmsg)
|
||||
detail = xmsg;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (xmsg)
|
||||
primary = xmsg;
|
||||
}
|
||||
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. */
|
||||
if (xmsg)
|
||||
detail = xmsg;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (xmsg)
|
||||
primary = xmsg;
|
||||
}
|
||||
|
||||
ereport(elevel,
|
||||
(errcode(sqlerrcode ? sqlerrcode : ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
|
||||
@ -195,39 +195,39 @@ PLy_traceback(PyObject *e, PyObject *v, PyObject *tb,
|
||||
*/
|
||||
PG_TRY();
|
||||
{
|
||||
char *e_type_s = NULL;
|
||||
char *e_module_s = NULL;
|
||||
const char *vstr;
|
||||
StringInfoData xstr;
|
||||
char *e_type_s = NULL;
|
||||
char *e_module_s = NULL;
|
||||
const char *vstr;
|
||||
StringInfoData xstr;
|
||||
|
||||
e_type_o = PyObject_GetAttrString(e, "__name__");
|
||||
e_module_o = PyObject_GetAttrString(e, "__module__");
|
||||
if (e_type_o)
|
||||
e_type_s = PLyUnicode_AsString(e_type_o);
|
||||
if (e_module_o)
|
||||
e_module_s = PLyUnicode_AsString(e_module_o);
|
||||
e_type_o = PyObject_GetAttrString(e, "__name__");
|
||||
e_module_o = PyObject_GetAttrString(e, "__module__");
|
||||
if (e_type_o)
|
||||
e_type_s = PLyUnicode_AsString(e_type_o);
|
||||
if (e_module_o)
|
||||
e_module_s = PLyUnicode_AsString(e_module_o);
|
||||
|
||||
if (v && ((vob = PyObject_Str(v)) != NULL))
|
||||
vstr = PLyUnicode_AsString(vob);
|
||||
else
|
||||
vstr = "unknown";
|
||||
if (v && ((vob = PyObject_Str(v)) != NULL))
|
||||
vstr = PLyUnicode_AsString(vob);
|
||||
else
|
||||
vstr = "unknown";
|
||||
|
||||
initStringInfo(&xstr);
|
||||
if (!e_type_s || !e_module_s)
|
||||
{
|
||||
/* shouldn't happen */
|
||||
appendStringInfoString(&xstr, "unrecognized exception");
|
||||
}
|
||||
/* mimics behavior of traceback.format_exception_only */
|
||||
else if (strcmp(e_module_s, "builtins") == 0
|
||||
|| strcmp(e_module_s, "__main__") == 0
|
||||
|| strcmp(e_module_s, "exceptions") == 0)
|
||||
appendStringInfoString(&xstr, e_type_s);
|
||||
else
|
||||
appendStringInfo(&xstr, "%s.%s", e_module_s, e_type_s);
|
||||
appendStringInfo(&xstr, ": %s", vstr);
|
||||
initStringInfo(&xstr);
|
||||
if (!e_type_s || !e_module_s)
|
||||
{
|
||||
/* shouldn't happen */
|
||||
appendStringInfoString(&xstr, "unrecognized exception");
|
||||
}
|
||||
/* mimics behavior of traceback.format_exception_only */
|
||||
else if (strcmp(e_module_s, "builtins") == 0
|
||||
|| strcmp(e_module_s, "__main__") == 0
|
||||
|| strcmp(e_module_s, "exceptions") == 0)
|
||||
appendStringInfoString(&xstr, e_type_s);
|
||||
else
|
||||
appendStringInfo(&xstr, "%s.%s", e_module_s, e_type_s);
|
||||
appendStringInfo(&xstr, ": %s", vstr);
|
||||
|
||||
*xmsg = xstr.data;
|
||||
*xmsg = xstr.data;
|
||||
}
|
||||
PG_FINALLY();
|
||||
{
|
||||
@ -274,61 +274,61 @@ PLy_traceback(PyObject *e, PyObject *v, PyObject *tb,
|
||||
if (filename == NULL)
|
||||
elog(ERROR, "could not get file name from Python code object");
|
||||
|
||||
/* The first frame always points at <module>, skip it. */
|
||||
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)
|
||||
/* The first frame always points at <module>, skip it. */
|
||||
if (*tb_depth > 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
|
||||
* 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.
|
||||
* The second frame points at the internal function, but to
|
||||
* mimic Python error reporting we want to say <module>.
|
||||
*/
|
||||
line = get_source_line(exec_ctx->curr_proc->src, plain_lineno);
|
||||
if (line)
|
||||
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)
|
||||
{
|
||||
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();
|
||||
{
|
||||
Py_XDECREF(frame);
|
||||
|
Reference in New Issue
Block a user