예제 #1
0
SV*
PLCB_op_counter(PLCB_t *object, plcb_SINGLEOP *opinfo)
{
    lcb_CMDCOUNTER ccmd = { 0 };
    lcb_error_t err = LCB_SUCCESS;
    
    key_from_so(opinfo, (lcb_CMDBASE *)&ccmd);
    PLCB_args_arithmetic(object, opinfo, &ccmd);
    err = lcb_counter3(object->instance, opinfo->cookie, &ccmd);
    return plcb_opctx_return(opinfo, err);
}
예제 #2
0
파일: counter.c 프로젝트: Demotix/couchnode
LIBCOUCHBASE_API
lcb_error_t lcb_arithmetic(lcb_t instance,
                           const void *cookie,
                           lcb_size_t num,
                           const lcb_arithmetic_cmd_t *const *items)
{
    unsigned ii;

    mcreq_sched_enter(&instance->cmdq);

    for (ii = 0; ii < num; ii++) {
        const lcb_arithmetic_cmd_t *src = items[ii];
        lcb_CMDCOUNTER dst;
        lcb_error_t err;

        memset(&dst, 0, sizeof(dst));

        dst.create = src->v.v0.create;
        dst.delta = src->v.v0.delta;
        dst.initial = src->v.v0.initial;
        dst.key.type = LCB_KV_COPY;
        dst.key.contig.bytes = src->v.v0.key;
        dst.key.contig.nbytes = src->v.v0.nkey;
        dst._hashkey.type = LCB_KV_COPY;
        dst._hashkey.contig.bytes = src->v.v0.hashkey;
        dst._hashkey.contig.nbytes = src->v.v0.nhashkey;
        dst.exptime = src->v.v0.exptime;
        err = lcb_counter3(instance, cookie, &dst);
        if (err != LCB_SUCCESS) {
            mcreq_sched_fail(&instance->cmdq);
            return err;
        }
    }

    mcreq_sched_leave(&instance->cmdq, 1);
    SYNCMODE_INTERCEPT(instance)
}