Use faster function to build tuples in adaptation.

Fixed a refcount bug too.
This commit is contained in:
Daniele Varrazzo 2010-11-08 00:39:00 +00:00
parent df05ea7a33
commit 225b276de5
2 changed files with 13 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2010-11-08 Daniele Varrazzo <daniele.varrazzo@gmail.com>
* psycopg/microprotocols.c: use faster function to build tuples.
* psycopg/microprotocols.c: fixed refcount bug.
2010-11-06 Daniele Varrazzo <daniele.varrazzo@gmail.com> 2010-11-06 Daniele Varrazzo <daniele.varrazzo@gmail.com>
* lib/extras.py: added NamedTupleCursor. * lib/extras.py: added NamedTupleCursor.

View File

@ -62,13 +62,16 @@ microprotocols_init(PyObject *dict)
int int
microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast) microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast)
{ {
PyObject *key;
if (proto == NULL) proto = (PyObject*)&isqlquoteType; if (proto == NULL) proto = (PyObject*)&isqlquoteType;
Dprintf("microprotocols_add: cast %p for (%s, ?)", cast, type->tp_name); Dprintf("microprotocols_add: cast %p for (%s, ?)", cast, type->tp_name);
PyDict_SetItem(psyco_adapters, key = PyTuple_Pack(2, (PyObject*)type, proto);
Py_BuildValue("(OO)", (PyObject*)type, proto), PyDict_SetItem(psyco_adapters, key, cast);
cast); Py_DECREF(key);
return 0; return 0;
} }
@ -92,7 +95,7 @@ microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
Dprintf("microprotocols_adapt: trying to adapt %s", obj->ob_type->tp_name); Dprintf("microprotocols_adapt: trying to adapt %s", obj->ob_type->tp_name);
/* look for an adapter in the registry */ /* look for an adapter in the registry */
key = Py_BuildValue("(OO)", (PyObject*)obj->ob_type, proto); key = PyTuple_Pack(2, Py_TYPE(obj), proto);
adapter = PyDict_GetItem(psyco_adapters, key); adapter = PyDict_GetItem(psyco_adapters, key);
Py_DECREF(key); Py_DECREF(key);
if (adapter) { if (adapter) {