mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-01-31 09:24:07 +03:00
parent
9d83b03605
commit
4e0b2ec9c9
2
NEWS
2
NEWS
|
@ -13,6 +13,8 @@ New features:
|
|||
(:ticket:`#773`).
|
||||
- `~psycopg2.extras.DictCursor` and `~psycopg2.extras.RealDictCursor` rows
|
||||
maintain columns order (:ticket:`#177`).
|
||||
- Added `!severity_nonlocalized` attribute on the
|
||||
`~psycopg2.extensions.Diagnostics` object (:ticket:`#783`).
|
||||
|
||||
Other changes:
|
||||
|
||||
|
|
|
@ -186,6 +186,7 @@ introspection etc.
|
|||
message_primary
|
||||
schema_name
|
||||
severity
|
||||
severity_nonlocalized
|
||||
source_file
|
||||
source_function
|
||||
source_line
|
||||
|
@ -198,6 +199,9 @@ introspection etc.
|
|||
not all the fields are available for all the errors and for all the
|
||||
server versions.
|
||||
|
||||
.. versionadded:: 2.8
|
||||
The `!severity_nonlocalized` attribute.
|
||||
|
||||
|
||||
|
||||
.. _sql-adaptation-objects:
|
||||
|
|
|
@ -29,8 +29,11 @@
|
|||
#include "psycopg/diagnostics.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
|
||||
#define PG_DIAG_SCHEMA_NAME 's'
|
||||
#endif
|
||||
|
@ -47,6 +50,11 @@
|
|||
#define PG_DIAG_CONSTRAINT_NAME 'n'
|
||||
#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.
|
||||
*
|
||||
|
@ -70,6 +78,8 @@ psyco_diagnostics_get_field(diagnosticsObject *self, void *closure)
|
|||
static struct PyGetSetDef diagnosticsObject_getsets[] = {
|
||||
{ "severity", (getter)psyco_diagnostics_get_field, NULL,
|
||||
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,
|
||||
NULL, (void*) PG_DIAG_SQLSTATE },
|
||||
{ "message_primary", (getter)psyco_diagnostics_get_field, NULL,
|
||||
|
|
|
@ -173,8 +173,8 @@ class ExceptionsTestCase(ConnectingTestCase):
|
|||
'column_name', 'constraint_name', 'context', 'datatype_name',
|
||||
'internal_position', 'internal_query', 'message_detail',
|
||||
'message_hint', 'message_primary', 'schema_name', 'severity',
|
||||
'source_file', 'source_function', 'source_line', 'sqlstate',
|
||||
'statement_position', 'table_name', ]:
|
||||
'severity_nonlocalized', 'source_file', 'source_function',
|
||||
'source_line', 'sqlstate', 'statement_position', 'table_name', ]:
|
||||
v = getattr(diag, attr)
|
||||
if v is not None:
|
||||
self.assert_(isinstance(v, str))
|
||||
|
@ -276,6 +276,15 @@ class ExceptionsTestCase(ConnectingTestCase):
|
|||
self.assertEqual(e.diag.constraint_name, "chk_eq1")
|
||||
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):
|
||||
import pickle
|
||||
cur = self.conn.cursor()
|
||||
|
|
Loading…
Reference in New Issue
Block a user