+static void php_pqconn_object_read_event_handlers(void *o, zval *return_value)
+{
+ php_pqconn_object_t *obj = o;
+
+ array_init(return_value);
+ zend_hash_apply_with_arguments(&obj->intern->eventhandlers, apply_read_callbacks, 1, Z_ARRVAL_P(return_value));
+}
+
+static void php_pqconn_object_gc_event_handlers(void *o, zval *return_value)
+{
+ php_pqconn_object_t *obj = o;
+ zval *evhs;
+
+ ZEND_HASH_FOREACH_VAL(&obj->intern->eventhandlers, evhs)
+ {
+ zval *evh;
+
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(evhs), evh)
+ {
+ zval zcb;
+
+ add_next_index_zval(return_value, php_pq_callback_to_zval_no_addref(Z_PTR_P(evh), &zcb));
+ }
+ ZEND_HASH_FOREACH_END();
+ }
+ ZEND_HASH_FOREACH_END();
+}
+
+static void php_pqconn_object_read_listeners(void *o, zval *return_value)
+{
+ php_pqconn_object_t *obj = o;
+
+ array_init(return_value);
+ zend_hash_apply_with_arguments(&obj->intern->listeners, apply_read_callbacks, 1, Z_ARRVAL_P(return_value));
+}
+
+static void php_pqconn_object_gc_listeners(void *o, zval *return_value)
+{
+ php_pqconn_object_t *obj = o;
+ zval *listeners;
+
+ ZEND_HASH_FOREACH_VAL(&obj->intern->listeners, listeners)
+ {
+ zval *listener;
+
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(listeners), listener)
+ {
+ zval zcb;
+
+ add_next_index_zval(return_value, php_pq_callback_to_zval_no_addref(Z_PTR_P(listener), &zcb));
+ }
+ ZEND_HASH_FOREACH_END();
+ }
+ ZEND_HASH_FOREACH_END();
+}
+
+static void php_pqconn_object_read_converters(void *o, zval *return_value)