/** * Begin GLUE */ static void *create_event_python(lcb_io_opt_t io, pycbc_evtype_t evtype) { PyObject *meth, *ret, *lookup; PyTypeObject *defltype; pycbc_iops_t *pio = (pycbc_iops_t *)io; if (evtype == PYCBC_EVTYPE_IO) { defltype = &pycbc_IOEventType; lookup = pycbc_helpers.ioname_mkevent; } else { defltype = &pycbc_TimerEventType; lookup = pycbc_helpers.ioname_mktimer; } meth = PyObject_GetAttr(pio->pyio, lookup); if (meth) { ret = PyObject_CallObject(meth, NULL); } else { PyErr_Clear(); ret = PYCBC_TYPE_CTOR(defltype); } ((pycbc_Event *)ret)->type = evtype; return ret; }
/** * Begin GLUE */ static void * create_event_python(lcb_io_opt_t io, pycbc_evtype_t evtype) { PyObject *meth, *ret; PyTypeObject *defltype; pycbc_IOPSWrapper *pio = PYCBC_IOW_FROM_IOPS(io); if (evtype == PYCBC_EVTYPE_IO) { defltype = &pycbc_IOEventType; meth = pio->mkevent; } else { defltype = &pycbc_TimerEventType; meth = pio->mktimer; } if (meth) { ret = PyObject_CallObject(meth, NULL); if (!ret) { PyErr_PrintEx(0); abort(); } } else { PyErr_Clear(); ret = PYCBC_TYPE_CTOR(defltype); } ((pycbc_Event *)ret)->type = evtype; ((pycbc_Event *)ret)->parent = (PyObject *)pio; Py_INCREF(pio); return ret; }
PyObject * pycbc_Bucket__fts_query(pycbc_Bucket *self, PyObject *args, PyObject *kwargs) { int rv; PyObject *ret = NULL; pycbc_MultiResult *mres; pycbc_ViewResult *vres; lcb_error_t rc; lcb_CMDFTS cmd = { 0 }; const char *params; pycbc_strlen_t nparams; static char *kwlist[] = { "params", NULL }; rv = PyArg_ParseTupleAndKeywords(args, kwargs, "s#", kwlist, ¶ms, &nparams); if (!rv) { PYCBC_EXCTHROW_ARGS(); return NULL; } if (-1 == pycbc_oputil_conn_lock(self)) { return NULL; } if (self->pipeline_queue) { PYCBC_EXC_WRAP(PYCBC_EXC_PIPELINE, 0, "FTS queries cannot be executed in pipeline context"); } mres = (pycbc_MultiResult *)pycbc_multiresult_new(self); vres = (pycbc_ViewResult *)PYCBC_TYPE_CTOR(&pycbc_ViewResultType); pycbc_httpresult_init(&vres->base, mres); vres->rows = PyList_New(0); vres->base.format = PYCBC_FMT_JSON; vres->base.htype = PYCBC_HTTP_HN1QL; cmd.callback = fts_row_callback; cmd.query = params; cmd.nquery = nparams; cmd.handle = &vres->base.u.fts; rc = lcb_fts_query(self->instance, mres, &cmd); if (rc != LCB_SUCCESS) { PYCBC_EXC_WRAP(PYCBC_EXC_LCBERR, rc, "Couldn't schedule fts query"); goto GT_DONE; } ret = (PyObject *)mres; mres = NULL; GT_DONE: Py_XDECREF(mres); pycbc_oputil_conn_unlock(self); return ret; }
PyObject * pycbc_Bucket__view_request(pycbc_Bucket *self, PyObject *args, PyObject *kwargs) { int rv; PyObject *ret = NULL; pycbc_MultiResult *mres = NULL; pycbc_ViewResult *vres = NULL; lcb_CMDVIEWQUERY vcmd = { 0 }; viewpath_st vp = { NULL }; lcb_error_t rc; const char *view = NULL, *design = NULL; PyObject *options = NULL; int flags; static char *kwlist[] = { "design", "view", "options", "_flags", NULL }; rv = PyArg_ParseTupleAndKeywords(args, kwargs, "ss|Oi", kwlist, &design, &view, &options, &flags); if (!rv) { PYCBC_EXCTHROW_ARGS(); return NULL; } if (-1 == pycbc_oputil_conn_lock(self)) { return NULL; } if (self->pipeline_queue) { PYCBC_EXC_WRAP(PYCBC_EXC_PIPELINE, 0, "HTTP/View Requests cannot be executed in " "pipeline context"); goto GT_DONE; } mres = (pycbc_MultiResult *)pycbc_multiresult_new(self); vres = (pycbc_ViewResult *)PYCBC_TYPE_CTOR(&pycbc_ViewResultType); vres->base.htype = PYCBC_HTTP_HVIEW; pycbc_httpresult_init(&vres->base, mres); rv = get_viewpath_str(self, &vp, options); if (rv != 0) { goto GT_DONE; } vcmd.ddoc = design; vcmd.nddoc = strlen(design); vcmd.view = view; vcmd.nview = strlen(view); vcmd.optstr = vp.optstr; vcmd.noptstr = vp.noptstr; vcmd.postdata = vp.body; vcmd.npostdata = vp.nbody; vcmd.handle = &vres->base.u.vh; vcmd.callback = row_callback; vcmd.cmdflags = flags; vres->rows = PyList_New(0); vres->base.format = PYCBC_FMT_JSON; rc = lcb_view_query(self->instance, mres, &vcmd); if (rc != LCB_SUCCESS) { PYCBC_EXC_WRAP(PYCBC_EXC_LCBERR, rc, "Couldn't schedule view"); goto GT_DONE; } ret = (PyObject*)mres; mres = NULL; /* Avoid GT_DONE decref */ GT_DONE: Py_XDECREF(mres); Py_XDECREF(vp.bk); pycbc_oputil_conn_unlock(self); return ret; }
PyObject * pycbc_Bucket__n1ql_query(pycbc_Bucket *self, PyObject *args, PyObject *kwargs) { int rv; PyObject *ret = NULL; pycbc_MultiResult *mres; pycbc_ViewResult *vres; lcb_error_t rc; lcb_CMDN1QL cmd = { 0 }; const char *params; pycbc_strlen_t nparams; int prepared = 0, cross_bucket = 0; static char *kwlist[] = { "params", "prepare", "cross_bucket", NULL }; rv = PyArg_ParseTupleAndKeywords( args, kwargs, "s#|ii", kwlist, ¶ms, &nparams, &prepared, &cross_bucket); if (!rv) { PYCBC_EXCTHROW_ARGS(); return NULL; } if (-1 == pycbc_oputil_conn_lock(self)) { return NULL; } if (self->pipeline_queue) { PYCBC_EXC_WRAP(PYCBC_EXC_PIPELINE, 0, "N1QL queries cannot be executed in " "pipeline context"); } mres = (pycbc_MultiResult *)pycbc_multiresult_new(self); vres = (pycbc_ViewResult *)PYCBC_TYPE_CTOR(&pycbc_ViewResultType); pycbc_httpresult_init(&vres->base, mres); vres->rows = PyList_New(0); vres->base.format = PYCBC_FMT_JSON; vres->base.htype = PYCBC_HTTP_HN1QL; cmd.content_type = "application/json"; cmd.callback = n1ql_row_callback; cmd.query = params; cmd.nquery = nparams; cmd.handle = &vres->base.u.nq; if (prepared) { cmd.cmdflags |= LCB_CMDN1QL_F_PREPCACHE; } if (cross_bucket) { cmd.cmdflags |= LCB_CMD_F_MULTIAUTH; } rc = lcb_n1ql_query(self->instance, mres, &cmd); if (rc != LCB_SUCCESS) { PYCBC_EXC_WRAP(PYCBC_EXC_LCBERR, rc, "Couldn't schedule n1ql query"); goto GT_DONE; } ret = (PyObject *)mres; mres = NULL; GT_DONE: Py_XDECREF(mres); pycbc_oputil_conn_unlock(self); return ret; }