PHP_METHOD(TypeSet, create) { cassandra_type *self; cassandra_set *set; php5to7_zval_args args = NULL; int argc = 0, i; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "*", &args, &argc) == FAILURE) { return; } self = PHP_CASSANDRA_GET_TYPE(getThis()); object_init_ex(return_value, cassandra_set_ce); set = PHP_CASSANDRA_GET_SET(return_value); PHP5TO7_ZVAL_COPY(PHP5TO7_ZVAL_MAYBE_P(set->type), getThis()); if (argc > 0) { for (i = 0; i < argc; i++) { if (!php_cassandra_set_add(set, PHP5TO7_ZVAL_ARG(args[i]) TSRMLS_CC)) { PHP5TO7_MAYBE_EFREE(args); return; } } PHP5TO7_MAYBE_EFREE(args); } }
PHP_METHOD(TypeCollection, valueType) { cassandra_type *self; if (zend_parse_parameters_none() == FAILURE) { return; } self = PHP_CASSANDRA_GET_TYPE(getThis()); RETURN_ZVAL(PHP5TO7_ZVAL_MAYBE_P(self->value_type), 1, 0); }
PHP_METHOD(TypeCollection, __toString) { cassandra_type *self; smart_str string = PHP5TO7_SMART_STR_INIT; if (zend_parse_parameters_none() == FAILURE) { return; } self = PHP_CASSANDRA_GET_TYPE(getThis()); php_cassandra_type_string(self, &string TSRMLS_CC); smart_str_0(&string); PHP5TO7_RETVAL_STRING(PHP5TO7_SMART_STR_VAL(string)); smart_str_free(&string); }
PHP_METHOD(TypeMap, create) { cassandra_type *self; cassandra_map *map; php5to7_zval_args args = NULL; int argc = 0, i; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "*", &args, &argc) == FAILURE) { return; } if (argc % 2 == 1) { PHP5TO7_MAYBE_EFREE(args); zend_throw_exception_ex(cassandra_invalid_argument_exception_ce, 0 TSRMLS_CC, "Not enough values, maps can only be created " \ "from an even number of values, where each odd " \ "value is a key and each even value is a value, " \ "e.g create(key, value, key, value, key, value)"); return; } self = PHP_CASSANDRA_GET_TYPE(getThis()); object_init_ex(return_value, cassandra_map_ce); map = PHP_CASSANDRA_GET_MAP(return_value); PHP5TO7_ZVAL_COPY(PHP5TO7_ZVAL_MAYBE_P(map->type), getThis()); if (argc > 0) { for (i = 0; i < argc; i += 2) { if (!php_cassandra_map_set(map, PHP5TO7_ZVAL_ARG(args[i]), PHP5TO7_ZVAL_ARG(args[i + 1]) TSRMLS_CC)) { PHP5TO7_MAYBE_EFREE(args); return; } } PHP5TO7_MAYBE_EFREE(args); } }
PHP_METHOD(TypeCollection, create) { cassandra_type *self; cassandra_collection *collection; php5to7_zval_args args = NULL; int argc = 0, i; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "*", &args, &argc) == FAILURE) { return; } self = PHP_CASSANDRA_GET_TYPE(getThis()); object_init_ex(return_value, cassandra_collection_ce); collection = PHP_CASSANDRA_GET_COLLECTION(return_value); PHP5TO7_ZVAL_COPY(PHP5TO7_ZVAL_MAYBE_P(collection->type), getThis()); if (argc > 0) { for (i = 0; i < argc; i++) { if (!php_cassandra_validate_object(PHP5TO7_ZVAL_ARG(args[i]), PHP5TO7_ZVAL_MAYBE_P(self->value_type) TSRMLS_CC)) { PHP5TO7_MAYBE_EFREE(args); return; } if (!php_cassandra_collection_add(collection, PHP5TO7_ZVAL_ARG(args[i]) TSRMLS_CC)) { PHP5TO7_MAYBE_EFREE(args); return; } } PHP5TO7_MAYBE_EFREE(args); } }
#include "util/types.h" #include "src/Cassandra/UserTypeValue.h" #include "util/collections.h" #if PHP_MAJOR_VERSION >= 7 #include <zend_smart_str.h> #else #include <ext/standard/php_smart_str.h> #endif zend_class_entry *cassandra_type_user_type_ce = NULL; int php_cassandra_type_user_type_add(cassandra_type *type, const char *name, size_t name_length, zval *zsub_type TSRMLS_DC) { cassandra_type *sub_type = PHP_CASSANDRA_GET_TYPE(zsub_type); if (cass_data_type_add_sub_type_by_name_n(type->data_type, name, name_length, sub_type->data_type) != CASS_OK) { return 0; } PHP5TO7_ZEND_HASH_ADD(&type->types, name, name_length + 1, zsub_type, sizeof(zval *)); return 1; } PHP_METHOD(TypeUserType, __construct) { zend_throw_exception_ex(cassandra_logic_exception_ce, 0 TSRMLS_CC, "Instantiation of a Cassandra\\Type\\UserType type is not supported."