Couchbase-Client

 view release on metacpan or  search on metacpan

xs/callbacks.c  view on Meta::CPAN

    libcouchbase_error_t err,
    const void *key, size_t nkey)
{
    plcb_callback_multi_get(instance, cookie, err, key, nkey,
                            NULL, 0, 0, 0);
}

static void stat_callback(
    libcouchbase_t instance, const void *cookie,
    const char *server,
    libcouchbase_error_t err,
    const void *stat_key, size_t nkey,
    const void *bytes, size_t nbytes)
{
    PLCB_t *object;
    SV *server_sv, *data_sv, *key_sv;
    dSP;
    
    object = (PLCB_t*)libcouchbase_get_cookie(instance);
    
    if(stat_key == NULL && server == NULL) {
        PLCB_sync_t sync;
        sync.parent = object;
        object->npending = 1;
        signal_done(&sync);
        return;
    }
    
    server_sv = newSVpvn(server, strlen(server));
    if(nkey) {
        key_sv = newSVpvn(stat_key, nkey);
    } else {
        key_sv = newSVpvn("", 0);
    }
    
    if(nbytes) {
        data_sv = newSVpvn(bytes, nbytes);
    } else {
        data_sv = newSVpvn("", 0);
    }
    
    if(!object->stats_hv) {
        die("We have nothing to write our stats to!");
    }
    
    ENTER;
    SAVETMPS;
    
    PUSHMARK(SP);
    XPUSHs(sv_2mortal(newRV_inc((SV*)object->stats_hv)));
    XPUSHs(sv_2mortal(server_sv));
    XPUSHs(sv_2mortal(key_sv));
    XPUSHs(sv_2mortal(data_sv));
    PUTBACK;
    
    call_pv(PLCB_STATS_SUBNAME, G_DISCARD);
    FREETMPS;
    LEAVE;    
}

void plcb_callbacks_set_multi(PLCB_t *object)
{
    libcouchbase_t instance = object->instance;
    libcouchbase_set_get_callback(instance, plcb_callback_multi_get);
    libcouchbase_set_touch_callback(instance, keyop_multi_callback);
}

void plcb_callbacks_set_single(PLCB_t *object)
{
    libcouchbase_t instance = object->instance;
    libcouchbase_set_get_callback(instance, plcb_callback_get);
    libcouchbase_set_touch_callback(instance, keyop_callback);
}

void plcb_callbacks_setup(PLCB_t *object)
{
    libcouchbase_t instance = object->instance;
    libcouchbase_set_get_callback(instance, plcb_callback_get);
    libcouchbase_set_storage_callback(instance, plcb_callback_storage);
    libcouchbase_set_error_callback(instance, plcb_callback_error);
#ifdef PLCB_HAVE_CONNFAIL
    libcouchbase_set_connfail_callback(instance, plcb_callback_connfail);
#endif

    libcouchbase_set_touch_callback(instance, keyop_callback);
    libcouchbase_set_remove_callback(instance, keyop_callback);
    libcouchbase_set_arithmetic_callback(instance, arithmetic_callback);
    libcouchbase_set_stat_callback(instance, stat_callback);
    
    libcouchbase_set_cookie(instance, object);
}



( run in 1.137 second using v1.01-cache-2.11-cpan-140bd7fdf52 )