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; }