Exemple #1
0
/* {{{ proto array Riak\Bucket->index(string $index, string $from [, string $to])
Perform a secondary index lookup */
PHP_METHOD(RiakBucket, index)
{
    riack_string rsbucket, rsindex, rsfrom, rsto, *type;
    riack_string_list *resultlist;
    char *index, *from, *to;
    int indexlen, fromlen, tolen, riackstatus, i;
    riak_connection *connection;
    zval *zresult;
    tolen = 0; to = NULL;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", &index, &indexlen, &from, &fromlen, &to, &tolen) == FAILURE) {
        zend_throw_exception(riak_badarguments_exception_ce, "Bad or missing argument", 500 TSRMLS_CC);
        return;
    }
    connection = get_riak_connection(getThis() TSRMLS_CC);
    rsbucket = riack_name_from_bucket(getThis() TSRMLS_CC);
    type = riack_get_bucket_type_from_bucket(connection->client, getThis() TSRMLS_CC);
    THROW_EXCEPTION_IF_CONNECTION_IS_NULL(connection);

    rsindex.len = indexlen;
    rsindex.value = index;
    rsfrom.len = fromlen;
    rsfrom.value = from;
    if (to != NULL && tolen > 0) {
        rsto.len = tolen;
        rsto.value = to;
        RIACK_RETRY_OP(riackstatus, connection, riack_2i_query_range_ext(connection->client,
                &rsbucket, type, &rsindex, &rsfrom, &rsto, &resultlist));
    } else {
        RIACK_RETRY_OP(riackstatus, connection, riack_2i_query_exact_ext(connection->client,
                &rsbucket, type, &rsindex, &rsfrom, &resultlist));
    }
    RFREE(connection->client, type);
    CHECK_RIACK_STATUS_THROW_AND_RETURN_ON_ERROR(connection, riackstatus);

    MAKE_STD_ZVAL(zresult);
    array_init(zresult);
    for (i=0; i<resultlist->string_count; ++i) {
        add_next_index_stringl(zresult, resultlist->strings[i].value, resultlist->strings[i].len, 1);
    }
    riack_free_string_list_p(connection->client, &resultlist);
    RETURN_ZVAL(zresult, 0, 1);
}
Exemple #2
0
int riack_2i_query_exact(riack_client *client, riack_string *bucket, riack_string *index,
        riack_string *search_key, riack_string_list** result_keys)
{
    return riack_2i_query_exact_ext(client, bucket, NULL, index, search_key, result_keys);
}