mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-02-07 12:50:32 +03:00
parent
9d83b03605
commit
4e0b2ec9c9
2
NEWS
2
NEWS
|
@ -13,6 +13,8 @@ New features:
|
||||||
(:ticket:`#773`).
|
(:ticket:`#773`).
|
||||||
- `~psycopg2.extras.DictCursor` and `~psycopg2.extras.RealDictCursor` rows
|
- `~psycopg2.extras.DictCursor` and `~psycopg2.extras.RealDictCursor` rows
|
||||||
maintain columns order (:ticket:`#177`).
|
maintain columns order (:ticket:`#177`).
|
||||||
|
- Added `!severity_nonlocalized` attribute on the
|
||||||
|
`~psycopg2.extensions.Diagnostics` object (:ticket:`#783`).
|
||||||
|
|
||||||
Other changes:
|
Other changes:
|
||||||
|
|
||||||
|
|
|
@ -186,6 +186,7 @@ introspection etc.
|
||||||
message_primary
|
message_primary
|
||||||
schema_name
|
schema_name
|
||||||
severity
|
severity
|
||||||
|
severity_nonlocalized
|
||||||
source_file
|
source_file
|
||||||
source_function
|
source_function
|
||||||
source_line
|
source_line
|
||||||
|
@ -198,6 +199,9 @@ introspection etc.
|
||||||
not all the fields are available for all the errors and for all the
|
not all the fields are available for all the errors and for all the
|
||||||
server versions.
|
server versions.
|
||||||
|
|
||||||
|
.. versionadded:: 2.8
|
||||||
|
The `!severity_nonlocalized` attribute.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. _sql-adaptation-objects:
|
.. _sql-adaptation-objects:
|
||||||
|
|
|
@ -29,8 +29,11 @@
|
||||||
#include "psycopg/diagnostics.h"
|
#include "psycopg/diagnostics.h"
|
||||||
#include "psycopg/error.h"
|
#include "psycopg/error.h"
|
||||||
|
|
||||||
/* These are new in PostgreSQL 9.3. Defining them here so that psycopg2 can
|
|
||||||
* use them with a 9.3+ server even if compiled against pre-9.3 headers. */
|
/* These constants are defined in src/include/postgres_ext.h but some may not
|
||||||
|
* be available with the libpq we currently support at compile time. */
|
||||||
|
|
||||||
|
/* Available from PG 9.3 */
|
||||||
#ifndef PG_DIAG_SCHEMA_NAME
|
#ifndef PG_DIAG_SCHEMA_NAME
|
||||||
#define PG_DIAG_SCHEMA_NAME 's'
|
#define PG_DIAG_SCHEMA_NAME 's'
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,6 +50,11 @@
|
||||||
#define PG_DIAG_CONSTRAINT_NAME 'n'
|
#define PG_DIAG_CONSTRAINT_NAME 'n'
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Available from PG 9.6 */
|
||||||
|
#ifndef PG_DIAG_SEVERITY_NONLOCALIZED
|
||||||
|
#define PG_DIAG_SEVERITY_NONLOCALIZED 'V'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Retrieve an error string from the exception's cursor.
|
/* Retrieve an error string from the exception's cursor.
|
||||||
*
|
*
|
||||||
|
@ -70,6 +78,8 @@ psyco_diagnostics_get_field(diagnosticsObject *self, void *closure)
|
||||||
static struct PyGetSetDef diagnosticsObject_getsets[] = {
|
static struct PyGetSetDef diagnosticsObject_getsets[] = {
|
||||||
{ "severity", (getter)psyco_diagnostics_get_field, NULL,
|
{ "severity", (getter)psyco_diagnostics_get_field, NULL,
|
||||||
NULL, (void*) PG_DIAG_SEVERITY },
|
NULL, (void*) PG_DIAG_SEVERITY },
|
||||||
|
{ "severity_nonlocalized", (getter)psyco_diagnostics_get_field, NULL,
|
||||||
|
NULL, (void*) PG_DIAG_SEVERITY_NONLOCALIZED },
|
||||||
{ "sqlstate", (getter)psyco_diagnostics_get_field, NULL,
|
{ "sqlstate", (getter)psyco_diagnostics_get_field, NULL,
|
||||||
NULL, (void*) PG_DIAG_SQLSTATE },
|
NULL, (void*) PG_DIAG_SQLSTATE },
|
||||||
{ "message_primary", (getter)psyco_diagnostics_get_field, NULL,
|
{ "message_primary", (getter)psyco_diagnostics_get_field, NULL,
|
||||||
|
|
|
@ -173,8 +173,8 @@ class ExceptionsTestCase(ConnectingTestCase):
|
||||||
'column_name', 'constraint_name', 'context', 'datatype_name',
|
'column_name', 'constraint_name', 'context', 'datatype_name',
|
||||||
'internal_position', 'internal_query', 'message_detail',
|
'internal_position', 'internal_query', 'message_detail',
|
||||||
'message_hint', 'message_primary', 'schema_name', 'severity',
|
'message_hint', 'message_primary', 'schema_name', 'severity',
|
||||||
'source_file', 'source_function', 'source_line', 'sqlstate',
|
'severity_nonlocalized', 'source_file', 'source_function',
|
||||||
'statement_position', 'table_name', ]:
|
'source_line', 'sqlstate', 'statement_position', 'table_name', ]:
|
||||||
v = getattr(diag, attr)
|
v = getattr(diag, attr)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
self.assert_(isinstance(v, str))
|
self.assert_(isinstance(v, str))
|
||||||
|
@ -276,6 +276,15 @@ class ExceptionsTestCase(ConnectingTestCase):
|
||||||
self.assertEqual(e.diag.constraint_name, "chk_eq1")
|
self.assertEqual(e.diag.constraint_name, "chk_eq1")
|
||||||
self.assertEqual(e.diag.datatype_name, None)
|
self.assertEqual(e.diag.datatype_name, None)
|
||||||
|
|
||||||
|
@skip_before_postgres(9, 6)
|
||||||
|
def test_9_6_diagnostics(self):
|
||||||
|
cur = self.conn.cursor()
|
||||||
|
try:
|
||||||
|
cur.execute("select 1 from nosuchtable")
|
||||||
|
except psycopg2.Error as exc:
|
||||||
|
e = exc
|
||||||
|
self.assertEqual(e.diag.severity_nonlocalized, 'ERROR')
|
||||||
|
|
||||||
def test_pickle(self):
|
def test_pickle(self):
|
||||||
import pickle
|
import pickle
|
||||||
cur = self.conn.cursor()
|
cur = self.conn.cursor()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user