Support field name other than UTF-8 (#301)

This commit is contained in:
INADA Naoki
2018-12-06 02:39:25 +09:00
committed by GitHub
parent 2df4f2f8d8
commit c754b25080

View File

@ -1037,15 +1037,39 @@ _mysql_ResultObject_describe(
{ {
PyObject *d; PyObject *d;
MYSQL_FIELD *fields; MYSQL_FIELD *fields;
MY_CHARSET_INFO cs;
int isutf8 = 0;
unsigned int i, n; unsigned int i, n;
check_result_connection(self); check_result_connection(self);
mysql_get_character_set_info(&result_connection(self)->connection, &cs);
if (strncmp("utf8", cs.name, 4) == 0) { // utf8, utf8mb3, utf8mb4
isutf8 = 1;
}
n = mysql_num_fields(self->result); n = mysql_num_fields(self->result);
fields = mysql_fetch_fields(self->result); fields = mysql_fetch_fields(self->result);
if (!(d = PyTuple_New(n))) return NULL; if (!(d = PyTuple_New(n))) return NULL;
for (i=0; i<n; i++) { for (i=0; i<n; i++) {
PyObject *t; PyObject *t;
#ifdef IS_PY3K
PyObject *name;
if (isutf8) {
name = PyUnicode_DecodeUTF8(fields[i].name, fields[i].name_length, "replace");
} else {
name = PyUnicode_Decode(fields[i].name, fields[i].name_length, cs.name, "replace");
}
if (name == NULL) {
goto error;
}
t = Py_BuildValue("(Niiiiii)",
name,
#else
t = Py_BuildValue("(siiiiii)", t = Py_BuildValue("(siiiiii)",
fields[i].name, fields[i].name,
#endif
(long) fields[i].type, (long) fields[i].type,
(long) fields[i].max_length, (long) fields[i].max_length,
(long) fields[i].length, (long) fields[i].length,