21 char *
volatile *
xmsg,
char *
volatile *
tbmsg,
24 char **hint,
char **query,
int *position,
25 char **schema_name,
char **table_name,
char **column_name,
26 char **datatype_name,
char **constraint_name);
28 char **hint,
char **schema_name,
char **table_name,
char **column_name,
29 char **datatype_name,
char **constraint_name);
64 const char *primary =
NULL;
70 char *schema_name =
NULL;
71 char *table_name =
NULL;
72 char *column_name =
NULL;
73 char *datatype_name =
NULL;
74 char *constraint_name =
NULL;
82 &detail, &hint, &query, &position,
83 &schema_name, &table_name, &column_name,
84 &datatype_name, &constraint_name);
87 &schema_name, &table_name, &column_name,
88 &datatype_name, &constraint_name);
128 (hint) ?
errhint(
"%s", hint) : 0,
140 constraint_name) : 0));
252 elog(
ERROR,
"could not get line number from Python traceback");
256 elog(
ERROR,
"could not get frame from Python traceback");
260 elog(
ERROR,
"could not get code object from Python frame");
264 elog(
ERROR,
"could not get function name from Python code object");
268 elog(
ERROR,
"could not get file name from Python code object");
338 elog(
ERROR,
"could not traverse Python traceback");
367 if (sqlstate ==
NULL)
371 if (
strlen(buffer) == 5 &&
372 strspn(buffer,
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") == 5)
375 buffer[3], buffer[4]);
390 char **hint,
char **query,
int *position,
391 char **schema_name,
char **table_name,
393 char **datatype_name,
char **constraint_name)
402 sqlerrcode, detail, hint, query, position,
403 schema_name, table_name, column_name,
404 datatype_name, constraint_name);
431 char **schema_name,
char **table_name,
char **column_name,
432 char **datatype_name,
char **constraint_name)
450 const char *s =
NULL;
451 const char *
next = src;
458 while (current < lineno)
467 if (current != lineno)
470 while (*s &&
isspace((
unsigned char) *s))
575 elog(
ERROR,
"could not convert error to Python exception");
#define dngettext(d, s, p, n)
int err_generic_string(int field, const char *str)
int internalerrquery(const char *query)
int internalerrposition(int cursorpos)
int errmsg_internal(const char *fmt,...)
int errdetail_internal(const char *fmt,...)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
char * unpack_sql_state(int sql_state)
#define MAKE_SQLSTATE(ch1, ch2, ch3, ch4, ch5)
#define ereport(elevel,...)
char * pstrdup(const char *in)
void pfree(void *pointer)
char * pnstrdup(const char *in, Size len)
static char buf[DEFAULT_XLOG_SEG_SIZE]
static void get_string_attr(PyObject *obj, char *attrname, char **str)
static bool set_string_attr(PyObject *obj, char *attrname, char *str)
static void PLy_get_error_data(PyObject *exc, int *sqlerrcode, char **detail, char **hint, char **schema_name, char **table_name, char **column_name, char **datatype_name, char **constraint_name)
void PLy_elog_impl(int elevel, const char *fmt,...)
PyObject * PLy_exc_spi_error
void PLy_exception_set_with_details(PyObject *excclass, ErrorData *edata)
static void PLy_get_spi_error_data(PyObject *exc, int *sqlerrcode, char **detail, char **hint, char **query, int *position, char **schema_name, char **table_name, char **column_name, char **datatype_name, char **constraint_name)
void PLy_exception_set(PyObject *exc, const char *fmt,...)
static char * get_source_line(const char *src, int lineno)
static void PLy_get_sqlerrcode(PyObject *exc, int *sqlerrcode)
void PLy_exception_set_plural(PyObject *exc, const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
static void PLy_traceback(PyObject *e, PyObject *v, PyObject *tb, char *volatile *xmsg, char *volatile *tbmsg, int *tb_depth)
PLyExecutionContext * PLy_current_execution_context(void)
char * PLy_procedure_name(PLyProcedure *proc)
char * PLyUnicode_AsString(PyObject *unicode)
PyObject * PLyUnicode_FromString(const char *s)
#define PG_DIAG_SCHEMA_NAME
#define PG_DIAG_CONSTRAINT_NAME
#define PG_DIAG_DATATYPE_NAME
#define PG_DIAG_TABLE_NAME
#define PG_DIAG_COLUMN_NAME
int appendStringInfoVA(StringInfo str, const char *fmt, va_list args)
void appendStringInfo(StringInfo str, const char *fmt,...)
void enlargeStringInfo(StringInfo str, int needed)
void appendStringInfoString(StringInfo str, const char *s)
void initStringInfo(StringInfo str)