Skip to content

Commit

Permalink
Error handling fixes:
Browse files Browse the repository at this point in the history
Instead of OperationalException and IntegrityException will be raised
for the following eror types:
ER_BAD_NULL_ERROR, ER_DATA_OUT_OF_RANGE, ER_CONSTRAINT_FAILED, ER_DUP_CONSTRAINT_NAME
  • Loading branch information
9EOR9 committed Oct 4, 2020
1 parent 846c0d0 commit 8944cb8
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 6 deletions.
1 change: 0 additions & 1 deletion include/mariadb_python.h
Expand Up @@ -254,7 +254,6 @@ typedef struct {
char *statement;
unsigned long statement_len;
PyObject **values;
PyStructSequence_Desc sequence_desc;
PyStructSequence_Field *sequence_fields;
PyTypeObject *sequence_type;
unsigned long prefetch_rows;
Expand Down
12 changes: 7 additions & 5 deletions mariadb/mariadb_cursor.c
Expand Up @@ -552,21 +552,23 @@ static int Mrdb_GetFieldInfo(MrdbCursor *self)

if (self->result_format == RESULT_NAMED_TUPLE) {
unsigned int i;
PyStructSequence_Desc sequence_desc;

if (!(self->sequence_fields= (PyStructSequence_Field *)
PyMem_RawCalloc(self->field_count + 1,
sizeof(PyStructSequence_Field))))
return 1;
self->sequence_desc.name= mariadb_named_tuple_name;
self->sequence_desc.doc= mariadb_named_tuple_desc;
self->sequence_desc.fields= self->sequence_fields;
self->sequence_desc.n_in_sequence= self->field_count;
sequence_desc.name= mariadb_named_tuple_name;
sequence_desc.doc= mariadb_named_tuple_desc;
sequence_desc.fields= self->sequence_fields;
sequence_desc.n_in_sequence= self->field_count;


for (i=0; i < self->field_count; i++)
{
self->sequence_fields[i].name= self->fields[i].name;
}
self->sequence_type= PyStructSequence_NewType(&self->sequence_desc);
self->sequence_type= PyStructSequence_NewType(&sequence_desc);
}
}
return 0;
Expand Down
4 changes: 4 additions & 0 deletions mariadb/mariadb_exception.c
Expand Up @@ -96,6 +96,10 @@ static PyObject *get_exception_type(int error_number)
case ER_ROW_IS_REFERENCED_2:
case ER_XAER_OUTSIDE:
case ER_XAER_RMERR:
case ER_BAD_NULL_ERROR:
case ER_DATA_OUT_OF_RANGE:
case ER_CONSTRAINT_FAILED:
case ER_DUP_CONSTRAINT_NAME:
return Mariadb_IntegrityError;
default:
/* MariaDB Error */
Expand Down

0 comments on commit 8944cb8

Please sign in to comment.