📄 _mysql.c
字号:
check_server_init(NULL); if (self && self->open) len = mysql_real_escape_string(&(self->connection), out+1, in, size); else len = mysql_escape_string(out+1, in, size);#endif *out = *(out+len+1) = '\''; if (_PyString_Resize(&str, len+2) < 0) return NULL; Py_DECREF(s); return (str);}static PyObject *_mysql_NULL;static PyObject *_escape_item( PyObject *item, PyObject *d){ PyObject *quoted=NULL, *itemtype, *itemconv; if (!(itemtype = PyObject_Type(item))) goto error; itemconv = PyObject_GetItem(d, itemtype); Py_DECREF(itemtype); if (!itemconv) { PyErr_Clear(); itemconv = PyObject_GetItem(d, (PyObject *) &PyString_Type); } if (!itemconv) { PyErr_SetString(PyExc_TypeError, "no default type converter defined"); goto error; } quoted = PyObject_CallFunction(itemconv, "OO", item, d); Py_DECREF(itemconv);error: return quoted;}static char _mysql_escape__doc__[] ="escape(obj, dict) -- escape any special characters in object obj\n\using mapping dict to provide quoting functions for each type.\n\Returns a SQL literal string.";static PyObject *_mysql_escape( PyObject *self, PyObject *args){ PyObject *o=NULL, *d=NULL; if (!PyArg_ParseTuple(args, "O|O:escape", &o, &d)) return NULL; if (d) { if (!PyMapping_Check(d)) { PyErr_SetString(PyExc_TypeError, "argument 2 must be a mapping"); return NULL; } return _escape_item(o, d); } else { if (!self) { PyErr_SetString(PyExc_TypeError, "argument 2 must be a mapping"); return NULL; } return _escape_item(o, ((_mysql_ConnectionObject *) self)->converter); }}static char _mysql_escape_sequence__doc__[] ="escape_sequence(seq, dict) -- escape any special characters in sequence\n\seq using mapping dict to provide quoting functions for each type.\n\Returns a tuple of escaped items.";static PyObject *_mysql_escape_sequence( PyObject *self, PyObject *args){ PyObject *o=NULL, *d=NULL, *r=NULL, *item, *quoted; int i, n; if (!PyArg_ParseTuple(args, "OO:escape_sequence", &o, &d)) goto error; if (!PyMapping_Check(d)) { PyErr_SetString(PyExc_TypeError, "argument 2 must be a mapping"); return NULL; } if ((n = PyObject_Length(o)) == -1) goto error; if (!(r = PyTuple_New(n))) goto error; for (i=0; i<n; i++) { item = PySequence_GetItem(o, i); if (!item) goto error; quoted = _escape_item(item, d); Py_DECREF(item); if (!quoted) goto error; PyTuple_SET_ITEM(r, i, quoted); } return r; error: Py_XDECREF(r); return NULL;}static char _mysql_escape_dict__doc__[] ="escape_sequence(d, dict) -- escape any special characters in\n\dictionary d using mapping dict to provide quoting functions for each type.\n\Returns a dictionary of escaped items.";static PyObject *_mysql_escape_dict( PyObject *self, PyObject *args){ PyObject *o=NULL, *d=NULL, *r=NULL, *item, *quoted, *pkey; Py_ssize_t ppos = 0; if (!PyArg_ParseTuple(args, "O!O:escape_dict", &PyDict_Type, &o, &d)) goto error; if (!PyMapping_Check(d)) { PyErr_SetString(PyExc_TypeError, "argument 2 must be a mapping"); return NULL; } if (!(r = PyDict_New())) goto error; while (PyDict_Next(o, &ppos, &pkey, &item)) { quoted = _escape_item(item, d); if (!quoted) goto error; if (PyDict_SetItem(r, pkey, quoted)==-1) goto error; Py_DECREF(quoted); } return r; error: Py_XDECREF(r); return NULL;} static char _mysql_ResultObject_describe__doc__[] ="Returns the sequence of 7-tuples required by the DB-API for\n\the Cursor.description attribute.\n\";static PyObject *_mysql_ResultObject_describe( _mysql_ResultObject *self, PyObject *args){ PyObject *d; MYSQL_FIELD *fields; unsigned int i, n; if (!PyArg_ParseTuple(args, "")) return NULL; check_result_connection(self); n = mysql_num_fields(self->result); fields = mysql_fetch_fields(self->result); if (!(d = PyTuple_New(n))) return NULL; for (i=0; i<n; i++) { PyObject *t; t = Py_BuildValue("(siiiiii)", fields[i].name, (long) fields[i].type, (long) fields[i].max_length, (long) fields[i].length, (long) fields[i].length, (long) fields[i].decimals, (long) !(IS_NOT_NULL(fields[i].flags))); if (!t) goto error; PyTuple_SET_ITEM(d, i, t); } return d; error: Py_XDECREF(d); return NULL;} static char _mysql_ResultObject_field_flags__doc__[] ="Returns a tuple of field flags, one for each column in the result.\n\" ;static PyObject *_mysql_ResultObject_field_flags( _mysql_ResultObject *self, PyObject *args){ PyObject *d; MYSQL_FIELD *fields; unsigned int i, n; if (!PyArg_ParseTuple(args, "")) return NULL; check_result_connection(self); n = mysql_num_fields(self->result); fields = mysql_fetch_fields(self->result); if (!(d = PyTuple_New(n))) return NULL; for (i=0; i<n; i++) { PyObject *f; if (!(f = PyInt_FromLong((long)fields[i].flags))) goto error; PyTuple_SET_ITEM(d, i, f); } return d; error: Py_XDECREF(d); return NULL;}static PyObject *_mysql_field_to_python( PyObject *converter, char *rowitem, unsigned long length){ PyObject *v; if (rowitem) { if (converter != Py_None) v = PyObject_CallFunction(converter, "s#", rowitem, (int)length); else v = PyString_FromStringAndSize(rowitem, (int)length); if (!v) return NULL; } else { Py_INCREF(Py_None); v = Py_None; } return v;}static PyObject *_mysql_row_to_tuple( _mysql_ResultObject *self, MYSQL_ROW row){ unsigned int n, i; unsigned long *length; PyObject *r, *c; n = mysql_num_fields(self->result); if (!(r = PyTuple_New(n))) return NULL; length = mysql_fetch_lengths(self->result); for (i=0; i<n; i++) { PyObject *v; c = PyTuple_GET_ITEM(self->converter, i); v = _mysql_field_to_python(c, row[i], length[i]); if (!v) goto error; PyTuple_SET_ITEM(r, i, v); } return r; error: Py_XDECREF(r); return NULL;}static PyObject *_mysql_row_to_dict( _mysql_ResultObject *self, MYSQL_ROW row){ unsigned int n, i; unsigned long *length; PyObject *r, *c; MYSQL_FIELD *fields; n = mysql_num_fields(self->result); if (!(r = PyDict_New())) return NULL; length = mysql_fetch_lengths(self->result); fields = mysql_fetch_fields(self->result); for (i=0; i<n; i++) { PyObject *v; c = PyTuple_GET_ITEM(self->converter, i); v = _mysql_field_to_python(c, row[i], length[i]); if (!v) goto error; if (!PyMapping_HasKeyString(r, fields[i].name)) { PyMapping_SetItemString(r, fields[i].name, v); } else { int len; char buf[256]; strncpy(buf, fields[i].table, 256); len = strlen(buf); strncat(buf, ".", 256-len); len = strlen(buf); strncat(buf, fields[i].name, 256-len); PyMapping_SetItemString(r, buf, v); } Py_DECREF(v); } return r; error: Py_XDECREF(r); return NULL;}static PyObject *_mysql_row_to_dict_old( _mysql_ResultObject *self, MYSQL_ROW row){ unsigned int n, i; unsigned long *length; PyObject *r, *c; MYSQL_FIELD *fields; n = mysql_num_fields(self->result); if (!(r = PyDict_New())) return NULL; length = mysql_fetch_lengths(self->result); fields = mysql_fetch_fields(self->result); for (i=0; i<n; i++) { PyObject *v; c = PyTuple_GET_ITEM(self->converter, i); v = _mysql_field_to_python(c, row[i], length[i]); if (!v) goto error; { int len=0; char buf[256]=""; if (strlen(fields[i].table)) { strncpy(buf, fields[i].table, 256); len = strlen(buf); strncat(buf, ".", 256-len); len = strlen(buf); } strncat(buf, fields[i].name, 256-len); PyMapping_SetItemString(r, buf, v); } Py_DECREF(v); } return r; error: Py_XDECREF(r); return NULL;}typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);int_mysql__fetch_row( _mysql_ResultObject *self, PyObject **r, int skiprows, int maxrows, _PYFUNC *convert_row){ unsigned int i; MYSQL_ROW row; for (i = skiprows; i<(skiprows+maxrows); i++) { PyObject *v; if (!self->use) row = mysql_fetch_row(self->result); else { Py_BEGIN_ALLOW_THREADS; row = mysql_fetch_row(self->result); Py_END_ALLOW_THREADS; } if (!row && mysql_errno(&(((_mysql_ConnectionObject *)(self->conn))->connection))) { _mysql_Exception((_mysql_ConnectionObject *)self->conn); goto error; } if (!row) { if (MyTuple_Resize(r, i, 0) == -1) goto error; break; } v = convert_row(self, row); if (!v) goto error; PyTuple_SET_ITEM(*r, i, v); } return i-skiprows; error: return -1;}static char _mysql_ResultObject_fetch_row__doc__[] ="fetch_row([maxrows, how]) -- Fetches up to maxrows as a tuple.\n\The rows are formatted according to how:\n\\n\ 0 -- tuples (default)\n\ 1 -- dictionaries, key=column or table.column if duplicated\n\ 2 -- dictionaries, key=table.column\n\";static PyObject *_mysql_ResultObject_fetch_row( _mysql_ResultObject *self, PyObject *args, PyObject *kwargs){ typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW); static char *kwlist[] = { "maxrows", "how", NULL }; static _PYFUNC *row_converters[] = { _mysql_row_to_tuple, _mysql_row_to_dict, _mysql_row_to_dict_old }; _PYFUNC *convert_row; unsigned int maxrows=1, how=0, skiprows=0, rowsadded; PyObject *r=NULL; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii:fetch_row", kwlist, &maxrows, &how)) return NULL; check_result_connection(self); if (how < 0 || how >= sizeof(row_converters)) { PyErr_SetString(PyExc_ValueError, "how out of range"); return NULL; } convert_row = row_converters[how]; if (maxrows) { if (!(r = PyTuple_New(maxrows))) goto error; rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows, convert_row); if (rowsadded == -1) goto error; } else { if (self->use) { maxrows = 1000; if (!(r = PyTuple_New(maxrows))) goto error; while (1) { rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows, convert_row); if (rowsadded == -1) goto error; skiprows += rowsadded; if (rowsadded < maxrows) break; if (MyTuple_Resize(&r, skiprows+maxrows, 0) == -1) goto error; } } else { /* XXX if overflow, maxrows<0? */ maxrows = (int) mysql_num_rows(self->result); if (!(r = PyTuple_New(maxrows))) goto error; rowsadded = _mysql__fetch_row(self, &r, 0, maxrows, convert_row); if (rowsadded == -1) goto error; } } return r; error: Py_XDECREF(r); return NULL;}#if MYSQL_VERSION_ID >= 32303static char _mysql_ConnectionObject_change_user__doc__[] ="Changes the user and causes the database specified by db to\n\become the default (current) database on the connection\n\specified by mysql. In subsequent queries, this database is\n\the default for table references that do not include an\n\explicit database specifier.\n\\n\This function was introduced in MySQL Version 3.23.3.\n\\n\Fails unless the connected user can be authenticated or if he\n\doesn't have permission to use the database. In this case the\n\user and database are not changed.\n\\n\The db parameter may be set to None if you don't want to have\n\a default database.\n\";static PyObject *_mysql_ConnectionObject_change_user( _mysql_ConnectionObject *self, PyObject *args, PyObject *kwargs){ char *user, *pwd=NULL, *db=NULL; int r; static char *kwlist[] = { "user", "passwd", "db", NULL } ; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|ss:change_user", kwlist, &user, &pwd, &db)) return NULL; check_connection(self); Py_BEGIN_ALLOW_THREADS r = mysql_change_user(&(self->connection), user, pwd, db); Py_END_ALLOW_THREADS if (r) return _mysql_Exception(self); Py_INCREF(Py_None); return Py_None;}#endifstatic char _mysql_ConnectionObject_character_set_name__doc__[] ="Returns the default character set for the current connection.\n\Non-standard.\n\";static PyObject *_mysql_ConnectionObject_character_set_name( _mysql_ConnectionObject *self, PyObject *args){ const char *s; if (!PyArg_ParseTuple(args, "")) return NULL; check_connection(self);#if MYSQL_VERSION_ID >= 32321 s = mysql_character_set_name(&(self->connection));#else s = "latin1";#endif return PyString_FromString(s);}#if MYSQL_VERSION_ID >= 50007static char _mysql_ConnectionObject_set_character_set__doc__[] ="Sets the default character set for the current connection.\n\Non-standard.\n\";static PyObject *_mysql_ConnectionObject_set_character_set( _mysql_ConnectionObject *self, PyObject *args){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -