51#include "spiexceptions.h"
116 .m_name =
"spiexceptions",
159 PLy_elog(
ERROR,
"could not create the spiexceptions module");
227 if (sqlstate ==
NULL)
373 char *
volatile message =
NULL;
374 char *
volatile detail =
NULL;
375 char *
volatile hint =
NULL;
376 char *
volatile column_name =
NULL;
377 char *
volatile constraint_name =
NULL;
378 char *
volatile datatype_name =
NULL;
379 char *
volatile table_name =
NULL;
380 char *
volatile schema_name =
NULL;
417 if (
strcmp(keyword,
"message") == 0)
430 else if (
strcmp(keyword,
"detail") == 0)
432 else if (
strcmp(keyword,
"hint") == 0)
434 else if (
strcmp(keyword,
"sqlstate") == 0)
436 else if (
strcmp(keyword,
"schema_name") == 0)
438 else if (
strcmp(keyword,
"table_name") == 0)
440 else if (
strcmp(keyword,
"column_name") == 0)
442 else if (
strcmp(keyword,
"datatype_name") == 0)
444 else if (
strcmp(keyword,
"constraint_name") == 0)
449 "'%s' is an invalid keyword argument for this function",
486 if (schema_name !=
NULL)
488 if (table_name !=
NULL)
490 if (column_name !=
NULL)
492 if (datatype_name !=
NULL)
494 if (constraint_name !=
NULL)
498 ((sqlstate != 0) ?
errcode(sqlstate) : 0,
502 (column_name !=
NULL) ?
504 (constraint_name !=
NULL) ?
506 (datatype_name !=
NULL) ?
508 (table_name !=
NULL) ?
510 (schema_name !=
NULL) ?
#define Assert(condition)
void(* pg_funcptr_t)(void)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, int64 nelem, const HASHCTL *info, int flags)
int err_generic_string(int field, const char *str)
int errmsg_internal(const char *fmt,...)
void FreeErrorData(ErrorData *edata)
int errdetail_internal(const char *fmt,...)
ErrorData * CopyErrorData(void)
void FlushErrorState(void)
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,...)
bool pg_verifymbstr(const char *mbstr, int len, bool noError)
char * pstrdup(const char *in)
void pfree(void *pointer)
MemoryContext CurrentMemoryContext
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
PyObject * PLy_cursor(PyObject *self, PyObject *args)
void PLy_cursor_init_type(void)
PyObject * PLy_exc_spi_error
void PLy_exception_set_with_details(PyObject *excclass, ErrorData *edata)
void PLy_exception_set(PyObject *exc, const char *fmt,...)
void PLy_plan_init_type(void)
PyMODINIT_FUNC PyInit_plpy(void)
static PyObject * PLy_notice(PyObject *self, PyObject *args, PyObject *kw)
static PyMethodDef PLy_exc_methods[]
static PyObject * PLy_quote_ident(PyObject *self, PyObject *args)
static char * object_to_string(PyObject *obj)
static PyObject * PLy_debug(PyObject *self, PyObject *args, PyObject *kw)
static PyObject * PLy_quote_nullable(PyObject *self, PyObject *args)
static void PLy_generate_spi_exceptions(PyObject *mod, PyObject *base)
static PyModuleDef PLy_module
static PyObject * PLy_error(PyObject *self, PyObject *args, PyObject *kw)
static PyObject * PLy_log(PyObject *self, PyObject *args, PyObject *kw)
static PyObject * PLy_warning(PyObject *self, PyObject *args, PyObject *kw)
static PyObject * PLy_create_exception(char *name, PyObject *base, PyObject *dict, const char *modname, PyObject *mod)
static PyObject * PLy_quote_literal(PyObject *self, PyObject *args)
static PyMethodDef PLy_methods[]
static PyModuleDef PLy_exc_module
static PyObject * PLy_output(volatile int level, PyObject *self, PyObject *args, PyObject *kw)
static PyObject * PLy_info(PyObject *self, PyObject *args, PyObject *kw)
HTAB * PLy_spi_exceptions
static PyObject * PLy_fatal(PyObject *self, PyObject *args, PyObject *kw)
static const ExceptionMap exception_map[]
static void PLy_add_exceptions(PyObject *plpy)
void PLy_result_init_type(void)
PyObject * PLy_spi_prepare(PyObject *self, PyObject *args)
PyObject * PLy_commit(PyObject *self, PyObject *args)
PyObject * PLy_rollback(PyObject *self, PyObject *args)
PyObject * PLy_spi_execute(PyObject *self, PyObject *args)
PyObject * PLy_subtransaction_new(PyObject *self, PyObject *unused)
void PLy_subtransaction_init_type(void)
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
char * quote_literal_cstr(const char *rawstr)
const char * quote_identifier(const char *ident)