X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fphp_pqtypes.c;h=b1f36cf27e5fb2aa4b6bb2b62c81e7455f26981a;hb=HEAD;hp=8fd12e064e26e4ab92a0859e49a4af0c1f7a7116;hpb=21f575491d25e002d3d5a82b71430757e302f352;p=m6w6%2Fext-pq diff --git a/src/php_pqtypes.c b/src/php_pqtypes.c index 8fd12e0..b1f36cf 100644 --- a/src/php_pqtypes.c +++ b/src/php_pqtypes.c @@ -54,13 +54,13 @@ static zend_object *php_pqtypes_create_object(zend_class_entry *class_type) return &php_pqtypes_create_object_ex(class_type, NULL)->zo; } -static void php_pqtypes_object_read_connection(zval *object, void *o, zval *return_value) +static void php_pqtypes_object_read_connection(void *o, zval *return_value) { php_pqtypes_object_t *obj = o; php_pq_object_to_zval(obj->intern->conn, return_value); } -static void php_pqtypes_object_gc_connection(zval *object, void *o, zval *return_value) +static void php_pqtypes_object_gc_connection(void *o, zval *return_value) { php_pqtypes_object_t *obj = o; zval zconn; @@ -69,7 +69,7 @@ static void php_pqtypes_object_gc_connection(zval *object, void *o, zval *return add_next_index_zval(return_value, &zconn); } -static int has_dimension(HashTable *ht, zval *member, zend_string **key, zend_long *index) +static inline int has_dimension(HashTable *ht, zval *member, zend_string **key, zend_long *index) { if (Z_TYPE_P(member) == IS_LONG) { *index = Z_LVAL_P(member); @@ -94,9 +94,9 @@ static int has_dimension(HashTable *ht, zval *member, zend_string **key, zend_lo } } -static int php_pqtypes_object_has_dimension(zval *object, zval *member, int check_empty) +static inline int php_pqtypes_object_has_dimension_ex(zend_object *object, zval *member, int check_empty) { - php_pqtypes_object_t *obj = PHP_PQ_OBJ(object, NULL); + php_pqtypes_object_t *obj = PHP_PQ_OBJ(NULL, object); zend_string *key = NULL; zend_long index = 0; @@ -123,10 +123,21 @@ static int php_pqtypes_object_has_dimension(zval *object, zval *member, int chec return 0; } +#if PHP_VERSION_ID >= 80000 +static int php_pqtypes_object_has_dimension(zend_object *object, zval *member, int check_empty) +{ + return php_pqtypes_object_has_dimension_ex(object, member, check_empty); +} +#else +static int php_pqtypes_object_has_dimension(zval *object, zval *member, int check_empty) +{ + return php_pqtypes_object_has_dimension_ex(Z_OBJ_P(object), member, check_empty); +} +#endif -static zval *php_pqtypes_object_read_dimension(zval *object, zval *member, int type, zval *rv) +static inline zval *php_pqtypes_object_read_dimension_ex(zend_object *object, zval *member, int type, zval *rv) { - php_pqtypes_object_t *obj = PHP_PQ_OBJ(object, NULL); + php_pqtypes_object_t *obj = PHP_PQ_OBJ(NULL, object); zend_string *key = NULL; zend_long index = 0; zval *data = NULL; @@ -142,6 +153,41 @@ static zval *php_pqtypes_object_read_dimension(zval *object, zval *member, int t return data; } +#if PHP_VERSION_ID >= 80000 +static zval *php_pqtypes_object_read_dimension(zend_object *object, zval *member, int type, zval *rv) +{ + return php_pqtypes_object_read_dimension_ex(object, member, type, rv); +} +#else +static zval *php_pqtypes_object_read_dimension(zval *object, zval *member, int type, zval *rv) +{ + return php_pqtypes_object_read_dimension_ex(Z_OBJ_P(object), member, type, rv); +} +#endif + +#if PHP_VERSION_ID >= 80000 +static void php_pqtypes_object_write_dimension(zend_object *object, zval *offset, zval *value) +{ + throw_exce(EX_RUNTIME, "pq\\Types object must not be modified"); +} +#else +static void php_pqtypes_object_write_dimension(zval *object, zval *offset, zval *value) +{ + throw_exce(EX_RUNTIME, "pq\\Types object must not be modified"); +} +#endif + +#if PHP_VERSION_ID >= 80000 +static void php_pqtypes_object_unset_dimension(zend_object *object, zval *offset) +{ + throw_exce(EX_RUNTIME, "pq\\Types object must not be modified"); +} +#else +static void php_pqtypes_object_unset_dimension(zval *object, zval *offset) +{ + throw_exce(EX_RUNTIME, "pq\\Types object must not be modified"); +} +#endif ZEND_BEGIN_ARG_INFO_EX(ai_pqtypes_construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, connection, pq\\Connection, 0) @@ -170,19 +216,18 @@ static PHP_METHOD(pqtypes, __construct) { zend_hash_init(&obj->intern->types, 512, NULL, ZVAL_PTR_DTOR, 0); if (znsp) { - zend_call_method_with_1_params(getThis(), Z_OBJCE_P(getThis()), NULL, "refresh", NULL, znsp); + php_pq_call_method(getThis(), "refresh", 1, NULL, znsp); } else { - zend_call_method_with_0_params(getThis(), Z_OBJCE_P(getThis()), NULL, "refresh", NULL); + php_pq_call_method(getThis(), "refresh", 0, NULL); } } } } #define PHP_PQ_TYPES_QUERY \ - "select t.oid, t.* " \ + "select t.oid, t.typname, t.* " \ "from pg_type t join pg_namespace n on t.typnamespace=n.oid " \ - "where typisdefined " \ - "and typrelid=0" + "where typisdefined" #ifndef PHP_PQ_OID_TEXT # define PHP_PQ_OID_TEXT 25 #endif @@ -272,7 +317,7 @@ static PHP_METHOD(pqtypes, refresh) { } static zend_function_entry php_pqtypes_methods[] = { - PHP_ME(pqtypes, __construct, ai_pqtypes_construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) + PHP_ME(pqtypes, __construct, ai_pqtypes_construct, ZEND_ACC_PUBLIC) PHP_ME(pqtypes, refresh, ai_pqtypes_refresh, ZEND_ACC_PUBLIC) {0} }; @@ -302,14 +347,14 @@ PHP_MINIT_FUNCTION(pqtypes) php_pqtypes_object_handlers.read_property = php_pq_object_read_prop; php_pqtypes_object_handlers.write_property = php_pq_object_write_prop; php_pqtypes_object_handlers.clone_obj = NULL; - php_pqtypes_object_handlers.get_property_ptr_ptr = NULL; + php_pqtypes_object_handlers.get_property_ptr_ptr = php_pq_object_get_prop_ptr_null; php_pqtypes_object_handlers.get_gc = php_pq_object_get_gc; php_pqtypes_object_handlers.get_properties = php_pq_object_properties; php_pqtypes_object_handlers.get_debug_info = php_pq_object_debug_info; php_pqtypes_object_handlers.has_dimension = php_pqtypes_object_has_dimension; php_pqtypes_object_handlers.read_dimension = php_pqtypes_object_read_dimension; - php_pqtypes_object_handlers.unset_dimension = NULL; - php_pqtypes_object_handlers.write_dimension = NULL; + php_pqtypes_object_handlers.unset_dimension = php_pqtypes_object_unset_dimension; + php_pqtypes_object_handlers.write_dimension = php_pqtypes_object_write_dimension; zend_hash_init(&php_pqtypes_object_prophandlers, 1, NULL, php_pq_object_prophandler_dtor, 1);