PHP_METHOD(Rows, nextPageAsync) { cassandra_rows* self = NULL; cassandra_session* session = NULL; CassFuture* future = NULL; cassandra_future_rows* future_rows = NULL; if (zend_parse_parameters_none() == FAILURE) return; self = (cassandra_rows*) zend_object_store_get_object(getThis() TSRMLS_CC); if (!(self->result && cass_result_has_more_pages(self->result))) { object_init_ex(return_value, cassandra_future_value_ce); return; } ASSERT_SUCCESS(cass_statement_set_paging_state(self->statement->statement, self->result)); session = (cassandra_session*) zend_object_store_get_object(self->session TSRMLS_CC); future = cass_session_execute(session->session, self->statement->statement); object_init_ex(return_value, cassandra_future_rows_ce); future_rows = (cassandra_future_rows*) zend_object_store_get_object(return_value TSRMLS_CC); Z_ADDREF_P(self->session); future_rows->session = self->session; future_rows->statement = php_cassandra_add_ref(self->statement); future_rows->future = future; }
PHP_METHOD(FutureRows, get) { zval* timeout = NULL; cassandra_rows* rows = NULL; const CassResult* result = NULL; cassandra_future_rows* self = (cassandra_future_rows*) zend_object_store_get_object(getThis() TSRMLS_CC); if (self->rows) { *return_value = *self->rows; Z_ADDREF_P(return_value); return; } if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &timeout) == FAILURE) { return; } if (php_cassandra_future_wait_timed(self->future, timeout TSRMLS_CC) == FAILURE) { return; } if (php_cassandra_future_is_error(self->future TSRMLS_CC) == FAILURE) { return; } result = cass_future_get_result(self->future); if (!result) { zend_throw_exception_ex(cassandra_runtime_exception_ce, 0 TSRMLS_CC, "Future doesn't contain a result."); return; } MAKE_STD_ZVAL(self->rows); object_init_ex(self->rows, cassandra_rows_ce); Z_ADDREF_P(self->rows); rows = (cassandra_rows*) zend_object_store_get_object(self->rows TSRMLS_CC); if (php_cassandra_get_result(result, &rows->rows TSRMLS_CC) == FAILURE) { cass_result_free(result); zval_ptr_dtor(&self->rows); return; } if (self->statement) { Z_ADDREF_P(self->session); rows->statement = php_cassandra_add_ref(self->statement); rows->session = self->session; rows->result = result; } else { cass_result_free(result); } *return_value = *self->rows; Z_ADDREF_P(return_value); }
PHP_METHOD(Rows, nextPage) { zval* timeout = NULL; cassandra_session* session = NULL; CassFuture* future = NULL; const CassResult* result = NULL; cassandra_rows* rows = NULL; cassandra_rows* self = (cassandra_rows*) zend_object_store_get_object(getThis() TSRMLS_CC); if (!(self->result && cass_result_has_more_pages(self->result))) return; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &timeout) == FAILURE) { return; } ASSERT_SUCCESS(cass_statement_set_paging_state(self->statement->statement, self->result)); session = (cassandra_session*) zend_object_store_get_object(self->session TSRMLS_CC); future = cass_session_execute(session->session, self->statement->statement); if (php_cassandra_future_wait_timed(future, timeout TSRMLS_CC) == FAILURE) { return; } if (php_cassandra_future_is_error(future TSRMLS_CC) == FAILURE) { return; } result = cass_future_get_result(future); if (!result) { zend_throw_exception_ex(cassandra_runtime_exception_ce, 0 TSRMLS_CC, "Future doesn't contain a result."); return; } object_init_ex(return_value, cassandra_rows_ce); rows = (cassandra_rows*) zend_object_store_get_object(return_value TSRMLS_CC); if (php_cassandra_get_result(result, &rows->rows TSRMLS_CC) == FAILURE) { cass_result_free(result); zval_dtor(return_value); return; } Z_ADDREF_P(self->session); rows->statement = php_cassandra_add_ref(self->statement); rows->session = self->session; rows->result = result; }
PHP_METHOD(Rows, nextPageAsync) { cassandra_rows* self = NULL; cassandra_session* session = NULL; CassFuture* future = NULL; cassandra_future_rows* future_rows = NULL; cassandra_future_value* future_value; if (zend_parse_parameters_none() == FAILURE) return; self = (cassandra_rows*) zend_object_store_get_object(getThis() TSRMLS_CC); if (self->future_next_page) { RETURN_ZVAL(self->future_next_page, 1, 0); } if (self->next_page) { Z_ADDREF_P(self->next_page); object_init_ex(self->future_next_page, cassandra_future_value_ce); future_value = (cassandra_future_value*) zend_object_store_get_object(self->future_next_page TSRMLS_CC); future_value->value = self->next_page; RETURN_ZVAL(self->future_next_page, 1, 0); } if (self->result == NULL) { object_init_ex(return_value, cassandra_future_value_ce); return; } ASSERT_SUCCESS(cass_statement_set_paging_state((CassStatement*) self->statement->data, self->result)); session = (cassandra_session*) zend_object_store_get_object(self->session TSRMLS_CC); future = cass_session_execute(session->session, (CassStatement*) self->statement->data); object_init_ex(self->future_next_page, cassandra_future_rows_ce); future_rows = (cassandra_future_rows*) zend_object_store_get_object(self->future_next_page TSRMLS_CC); Z_ADDREF_P(self->session); future_rows->session = self->session; future_rows->statement = php_cassandra_add_ref(self->statement); future_rows->future = future; php_cassandra_rows_clear(self); RETURN_ZVAL(self->future_next_page, 1, 0); }
php5to7_zval php_cassandra_create_function(cassandra_ref* schema, const CassFunctionMeta *meta TSRMLS_DC) { php5to7_zval result; cassandra_function *function; const char *full_name; size_t full_name_length; PHP5TO7_ZVAL_UNDEF(result); PHP5TO7_ZVAL_MAYBE_MAKE(result); object_init_ex(PHP5TO7_ZVAL_MAYBE_P(result), cassandra_default_function_ce); function = PHP_CASSANDRA_GET_FUNCTION(PHP5TO7_ZVAL_MAYBE_P(result)); function->schema = php_cassandra_add_ref(schema); function->meta = meta; cass_function_meta_full_name(function->meta, &full_name, &full_name_length); PHP5TO7_ZVAL_MAYBE_MAKE(function->signature); PHP5TO7_ZVAL_STRINGL(PHP5TO7_ZVAL_MAYBE_P(function->signature), full_name, full_name_length); return result; } PHP_METHOD(DefaultFunction, name) { cassandra_function *self; if (zend_parse_parameters_none() == FAILURE) return;
php_cassandra_create_index(cassandra_ref *schema, const CassIndexMeta *meta TSRMLS_DC) { php5to7_zval result; cassandra_index *index; const char *name; size_t name_length; PHP5TO7_ZVAL_UNDEF(result); PHP5TO7_ZVAL_MAYBE_MAKE(result); object_init_ex(PHP5TO7_ZVAL_MAYBE_P(result), cassandra_default_index_ce); index = PHP_CASSANDRA_GET_INDEX(PHP5TO7_ZVAL_MAYBE_P(result)); index->meta = meta; index->schema = php_cassandra_add_ref(schema); cass_index_meta_name(meta, &name, &name_length); PHP5TO7_ZVAL_MAYBE_MAKE(index->name); PHP5TO7_ZVAL_STRINGL(PHP5TO7_ZVAL_MAYBE_P(index->name), name, name_length); return result; } PHP_METHOD(DefaultIndex, name) { cassandra_index *self; if (zend_parse_parameters_none() == FAILURE) return;
PHP_METHOD(Rows, nextPage) { zval* timeout = NULL; cassandra_session* session = NULL; CassFuture* future = NULL; const CassResult* result = NULL; cassandra_rows* rows = NULL; cassandra_future_rows* future_rows = NULL; cassandra_rows* self = (cassandra_rows*) zend_object_store_get_object(getThis() TSRMLS_CC); if (self->next_page) { RETURN_ZVAL(self->next_page, 1, 0); } if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &timeout) == FAILURE) { return; } if (self->future_next_page) { if (!instanceof_function(Z_OBJCE_P(self->future_next_page), cassandra_future_rows_ce TSRMLS_CC)) { zend_throw_exception_ex(cassandra_runtime_exception_ce, 0 TSRMLS_CC, "Unexpected future instance."); return; } future_rows = (cassandra_future_rows*) zend_object_store_get_object(self->future_next_page TSRMLS_CC); if (php_cassandra_future_wait_timed(future_rows->future, timeout TSRMLS_CC) == FAILURE) { return; } if (php_cassandra_future_is_error(future_rows->future TSRMLS_CC) == FAILURE) { return; } result = cass_future_get_result(future_rows->future); } else { if (self->result == NULL) { return; } ASSERT_SUCCESS(cass_statement_set_paging_state((CassStatement*) self->statement->data, self->result)); session = (cassandra_session*) zend_object_store_get_object(self->session TSRMLS_CC); future = cass_session_execute(session->session, (CassStatement*) self->statement->data); if (php_cassandra_future_wait_timed(future, timeout TSRMLS_CC) == FAILURE) { return; } if (php_cassandra_future_is_error(future TSRMLS_CC) == FAILURE) { return; } result = cass_future_get_result(future); cass_future_free(future); } if (!result) { zend_throw_exception_ex(cassandra_runtime_exception_ce, 0 TSRMLS_CC, "Future doesn't contain a result."); return; } MAKE_STD_ZVAL(self->next_page); object_init_ex(self->next_page, cassandra_rows_ce); rows = (cassandra_rows*) zend_object_store_get_object(self->next_page TSRMLS_CC); if (php_cassandra_get_result(result, &rows->rows TSRMLS_CC) == FAILURE) { cass_result_free(result); zval_dtor(self->next_page); self->next_page = NULL; return; } if (self->future_next_page) { zval_ptr_dtor(&self->future_next_page); self->future_next_page = NULL; } if (cass_result_has_more_pages(result)) { Z_ADDREF_P(self->session); rows->statement = php_cassandra_add_ref(self->statement); rows->session = self->session; rows->result = result; } else { cass_result_free(result); } php_cassandra_rows_clear(self); RETURN_ZVAL(self->next_page, 1, 0); }