PyObject * psyco_microprotocols_adapt(cursorObject *self, PyObject *args) { PyObject *obj, *alt = NULL; PyObject *proto = (PyObject*)&isqlquoteType; if (!PyArg_ParseTuple(args, "O|OO", &obj, &proto, &alt)) return NULL; return microprotocols_adapt(obj, proto, alt); }
PyObject * microprotocol_getquoted(PyObject *obj, connectionObject *conn) { PyObject *res = NULL; PyObject *prepare = NULL; PyObject *adapted; if (!(adapted = microprotocols_adapt(obj, (PyObject*)&isqlquoteType, NULL))) { goto exit; } Dprintf("microprotocol_getquoted: adapted to %s", Py_TYPE(adapted)->tp_name); /* if requested prepare the object passing it the connection */ 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 { /* adapted.prepare not found */ PyErr_Clear(); } } /* call the getquoted method on adapted (that should exist because we adapted to the right protocol) */ res = PyObject_CallMethod(adapted, "getquoted", NULL); /* Convert to bytes. */ if (res && PyUnicode_CheckExact(res)) { PyObject *b; const char *codec; codec = (conn && conn->codec) ? conn->codec : "utf8"; b = PyUnicode_AsEncodedString(res, codec, NULL); Py_DECREF(res); res = b; } exit: Py_XDECREF(adapted); Py_XDECREF(prepare); /* we return res with one extra reference, the caller shall free it */ return res; }