mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-02-07 12:50:32 +03:00
Less lookups and more efficient calls in microprotocols_getquoted().
This commit is contained in:
parent
422fede38e
commit
753b580d72
|
@ -2,6 +2,8 @@
|
|||
|
||||
* Replaced PyObject_CallFunction() with *ObjArgs() where more efficient.
|
||||
|
||||
* psycopg/microprotocols.c: small optimizations.
|
||||
|
||||
2010-11-08 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
|
||||
* psycopg/microprotocols.c: use faster function to build tuples.
|
||||
|
|
|
@ -188,30 +188,41 @@ PyObject *
|
|||
microprotocol_getquoted(PyObject *obj, connectionObject *conn)
|
||||
{
|
||||
PyObject *res = NULL;
|
||||
PyObject *tmp = microprotocols_adapt(
|
||||
obj, (PyObject*)&isqlquoteType, NULL);
|
||||
PyObject *prepare = NULL;
|
||||
PyObject *adapted;
|
||||
|
||||
if (!(adapted = microprotocols_adapt(obj, (PyObject*)&isqlquoteType, NULL))) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (tmp != NULL) {
|
||||
Dprintf("microprotocol_getquoted: adapted to %s",
|
||||
tmp->ob_type->tp_name);
|
||||
adapted->ob_type->tp_name);
|
||||
|
||||
/* if requested prepare the object passing it the connection */
|
||||
if (PyObject_HasAttrString(tmp, "prepare") && conn) {
|
||||
res = PyObject_CallMethod(tmp, "prepare", "O", (PyObject*)conn);
|
||||
if (res == NULL) {
|
||||
Py_DECREF(tmp);
|
||||
return NULL;
|
||||
if (conn) {
|
||||
if ((prepare = PyObject_GetAttrString(adapted, "prepare"))) {
|
||||
res = PyObject_CallFunctionObjArgs(
|
||||
prepare, (PyObject *)conn, NULL);
|
||||
if (res) {
|
||||
Py_DECREF(res);
|
||||
res = NULL;
|
||||
} else {
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
else {
|
||||
Py_DECREF(res);
|
||||
/* adapted.prepare not found */
|
||||
PyErr_Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/* call the getquoted method on tmp (that should exist because we
|
||||
/* call the getquoted method on adapted (that should exist because we
|
||||
adapted to the right protocol) */
|
||||
res = PyObject_CallMethod(tmp, "getquoted", NULL);
|
||||
Py_DECREF(tmp);
|
||||
}
|
||||
res = PyObject_CallMethod(adapted, "getquoted", NULL);
|
||||
|
||||
exit:
|
||||
Py_XDECREF(adapted);
|
||||
Py_XDECREF(prepare);
|
||||
|
||||
/* we return res with one extra reference, the caller shall free it */
|
||||
return res;
|
||||
|
|
Loading…
Reference in New Issue
Block a user