/* {{{ 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); }
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); }