예제 #1
0
파일: touch.c 프로젝트: Sweebr/couchnode
LIBCOUCHBASE_API
lcb_error_t
lcb_touch(lcb_t instance, const void *cookie, lcb_size_t num,
          const lcb_touch_cmd_t * const * items)
{
    mc_CMDQUEUE *cq = &instance->cmdq;
    unsigned ii;

    mcreq_sched_enter(&instance->cmdq);
    for (ii = 0; ii < num; ii++) {
        const lcb_touch_cmd_t *src = items[ii];
        lcb_CMDTOUCH dst;
        lcb_error_t err;

        memset(&dst, 0, sizeof(dst));
        dst.key.contig.bytes = src->v.v0.key;
        dst.key.contig.nbytes = src->v.v0.nkey;
        dst.hashkey.contig.bytes = src->v.v0.hashkey;
        dst.hashkey.contig.nbytes = src->v.v0.nhashkey;
        dst.exptime = src->v.v0.exptime;
        err = lcb_touch3(instance, cookie, &dst);
        if (err != LCB_SUCCESS) {
            mcreq_sched_fail(cq);
            return err;
        }
    }
    mcreq_sched_leave(cq, 1);
    SYNCMODE_INTERCEPT(instance)
}
예제 #2
0
SV *
PLCB_op_get(PLCB_t *object, plcb_SINGLEOP *opinfo)
{
    lcb_error_t err = LCB_SUCCESS;
    lcb_CMDGET gcmd = { 0 };

    PLCB_args_get(object, opinfo, &gcmd);
    key_from_so(opinfo, (lcb_CMDBASE*)&gcmd);
    if (opinfo->cmdbase == PLCB_CMD_TOUCH) {
        err = lcb_touch3(object->instance, opinfo->cookie, (lcb_CMDTOUCH*)&gcmd);
    } else {
        err = lcb_get3(object->instance, opinfo->cookie, &gcmd);
    }
    return plcb_opctx_return(opinfo, err);
}