/* {{{ Cassandra\Date::fromDateTime() */ PHP_METHOD(Date, fromDateTime) { cassandra_date *self; zval *zdatetime; php5to7_zval retval; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zdatetime) == FAILURE) { return; } zend_call_method_with_0_params(PHP5TO7_ZVAL_MAYBE_ADDR_OF(zdatetime), php_date_get_date_ce(), NULL, "gettimestamp", &retval); if (!PHP5TO7_ZVAL_IS_UNDEF(retval) && Z_TYPE_P(PHP5TO7_ZVAL_MAYBE_P(retval)) == IS_LONG) { object_init_ex(return_value, cassandra_date_ce); self = PHP_CASSANDRA_GET_DATE(return_value); self->date = cass_date_from_epoch(PHP5TO7_Z_LVAL_MAYBE_P(retval)); zval_ptr_dtor(&retval); return; } }
PHP_METHOD(FuturePreparedStatement, get) { zval *timeout = NULL; cassandra_statement *prepared_statement = NULL; cassandra_future_prepared_statement *self = PHP_CASSANDRA_GET_FUTURE_PREPARED_STATEMENT(getThis()); if (!PHP5TO7_ZVAL_IS_UNDEF(self->prepared_statement)) { RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->prepared_statement), 1, 0); } 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; } object_init_ex(return_value, cassandra_statement_ce); PHP5TO7_ZVAL_COPY(PHP5TO7_ZVAL_MAYBE_P(self->prepared_statement), return_value); prepared_statement = PHP_CASSANDRA_GET_STATEMENT(return_value); prepared_statement->prepared = cass_future_get_prepared(self->future); }
PHP_METHOD(ExecutionOptions, __get) { char *name; php5to7_size name_len; cassandra_execution_options *self = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } self = PHP_CASSANDRA_GET_EXECUTION_OPTIONS(getThis()); if (name_len == 11 && strncmp("consistency", name, name_len) == 0) { if (self->consistency == -1) { RETURN_NULL(); } RETURN_LONG(self->consistency); } else if (name_len == 17 && strncmp("serialConsistency", name, name_len) == 0) { if (self->serial_consistency == -1) { RETURN_NULL(); } RETURN_LONG(self->serial_consistency); } else if (name_len == 8 && strncmp("pageSize", name, name_len) == 0) { if (self->page_size == -1) { RETURN_NULL(); } RETURN_LONG(self->page_size); } else if (name_len == 16 && strncmp("pagingStateToken", name, name_len) == 0) { if (!self->paging_state_token) { RETURN_NULL(); } PHP5TO7_RETURN_STRINGL(self->paging_state_token, self->paging_state_token_size); } else if (name_len == 7 && strncmp("timeout", name, name_len) == 0) { if (PHP5TO7_ZVAL_IS_UNDEF(self->timeout)) { RETURN_NULL(); } RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->timeout), 1, 0); } else if (name_len == 9 && strncmp("arguments", name, name_len) == 0) { if (PHP5TO7_ZVAL_IS_UNDEF(self->arguments)) { RETURN_NULL(); } RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->arguments), 1, 0); } else if (name_len == 11 && strncmp("retryPolicy", name, name_len) == 0) { if (PHP5TO7_ZVAL_IS_UNDEF(self->retry_policy)) { RETURN_NULL(); } RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->retry_policy), 1, 0); } else if (name_len == 9 && strncmp("timestamp", name, name_len) == 0) { char *string; if (self->timestamp == INT64_MIN) { RETURN_NULL(); } #ifdef WIN32 spprintf(&string, 0, "%I64d", (long long int) self->timestamp); #else spprintf(&string, 0, "%lld", (long long int) self->timestamp); #endif PHP5TO7_RETVAL_STRING(string); efree(string); } }
PHP_METHOD(DefaultCluster, connect) { CassFuture *future = NULL; char *hash_key; php5to7_size hash_key_len = 0; char *keyspace = NULL; php5to7_size keyspace_len; zval *timeout = NULL; cassandra_psession *psession; cassandra_cluster *cluster = NULL; cassandra_session *session = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sz", &keyspace, &keyspace_len, &timeout) == FAILURE) { return; } cluster = PHP_CASSANDRA_GET_CLUSTER(getThis()); object_init_ex(return_value, cassandra_default_session_ce); session = PHP_CASSANDRA_GET_SESSION(return_value); session->default_consistency = cluster->default_consistency; session->default_page_size = cluster->default_page_size; session->persist = cluster->persist; if (!PHP5TO7_ZVAL_IS_UNDEF(session->default_timeout)) { PHP5TO7_ZVAL_COPY(PHP5TO7_ZVAL_MAYBE_P(session->default_timeout), PHP5TO7_ZVAL_MAYBE_P(cluster->default_timeout)); } if (session->persist) { php5to7_zend_resource_le *le; hash_key_len = spprintf(&hash_key, 0, "%s:session:%s", cluster->hash_key, SAFE_STR(keyspace)); if (PHP5TO7_ZEND_HASH_FIND(&EG(persistent_list), hash_key, hash_key_len + 1, le) && Z_RES_P(le)->type == php_le_cassandra_session()) { psession = (cassandra_psession *) Z_RES_P(le)->ptr; session->session = psession->session; future = psession->future; } } if (future == NULL) { php5to7_zend_resource_le resource; session->session = cass_session_new(); if (keyspace) { future = cass_session_connect_keyspace(session->session, cluster->cluster, keyspace); } else { future = cass_session_connect(session->session, cluster->cluster); } if (session->persist) { psession = (cassandra_psession *) pecalloc(1, sizeof(cassandra_psession), 1); psession->session = session->session; psession->future = future; #if PHP_MAJOR_VERSION >= 7 ZVAL_NEW_PERSISTENT_RES(&resource, 0, psession, php_le_cassandra_session()); PHP5TO7_ZEND_HASH_UPDATE(&EG(persistent_list), hash_key, hash_key_len + 1, &resource, sizeof(php5to7_zend_resource_le)); CASSANDRA_G(persistent_sessions)++; #else resource.type = php_le_cassandra_session(); resource.ptr = psession; PHP5TO7_ZEND_HASH_UPDATE(&EG(persistent_list), hash_key, hash_key_len + 1, resource, sizeof(php5to7_zend_resource_le)); CASSANDRA_G(persistent_sessions)++; #endif } } if (php_cassandra_future_wait_timed(future, timeout TSRMLS_CC) == FAILURE) { if (session->persist) { efree(hash_key); } else { cass_future_free(future); } return; } if (php_cassandra_future_is_error(future TSRMLS_CC) == FAILURE) { if (session->persist) { if (PHP5TO7_ZEND_HASH_DEL(&EG(persistent_list), hash_key, hash_key_len + 1)) { session->session = NULL; } efree(hash_key); } else { cass_future_free(future); } return; } if (session->persist) efree(hash_key); }