X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=src%2Fphp_pqconn.c;h=cb2d72f08321385cde82d901de7406064d60a34d;hp=916acdcbd3232345e26e1fd12c378a8458a4b19d;hb=c5e31d5d4f67df1d1b6ac95d36f5b0c38afc866d;hpb=7e633cc0ddf139abbfc591b1e27d0bf9f17bebbf diff --git a/src/php_pqconn.c b/src/php_pqconn.c index 916acdc..cb2d72f 100644 --- a/src/php_pqconn.c +++ b/src/php_pqconn.c @@ -428,7 +428,7 @@ static void php_pqconn_wakeup(php_persistent_handle_factory_t *f, void **handle // FIXME: ping server } -static inline PGresult *unlisten(php_pqconn_t *conn, const char *channel_str, size_t channel_len TSRMLS_DC) +static inline PGresult *unlisten(PGconn *conn, const char *channel_str, size_t channel_len TSRMLS_DC) { char *quoted_channel = PQescapeIdentifier(conn, channel_str, channel_len); PGresult *res = NULL; @@ -440,7 +440,7 @@ static inline PGresult *unlisten(php_pqconn_t *conn, const char *channel_str, si smart_str_appends(&cmd, quoted_channel); smart_str_0(&cmd); - res = PQexec(conn, cmd); + res = PQexec(conn, cmd.c); smart_str_free(&cmd); PQfreemem(quoted_channel); @@ -1655,6 +1655,30 @@ static PHP_METHOD(pqconn, trace) { } } +ZEND_BEGIN_ARG_INFO_EX(ai_pqconn_off, 0, 0, 1) + ZEND_ARG_INFO(0, type) +ZEND_END_ARG_INFO(); +static PHP_METHOD(pqconn, off) { + zend_error_handling zeh; + char *type_str; + int type_len; + STATUS rv; + + zend_replace_error_handling(EH_THROW, exce(EX_INVALID_ARGUMENT), &zeh TSRMLS_CC); + rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &type_str, &type_len); + zend_restore_error_handling(&zeh TSRMLS_CC); + + if (SUCCESS == rv) { + php_pqconn_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + if (!obj->intern) { + throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized"); + } else { + RETURN_BOOL(SUCCESS == zend_hash_del(&obj->intern->eventhandlers, type_str, type_len + 1)); + } + } +} + ZEND_BEGIN_ARG_INFO_EX(ai_pqconn_on, 0, 0, 2) ZEND_ARG_INFO(0, type) ZEND_ARG_INFO(0, callable) @@ -1758,6 +1782,7 @@ static zend_function_entry php_pqconn_methods[] = { PHP_ME(pqconn, startTransaction, ai_pqconn_start_transaction, ZEND_ACC_PUBLIC) PHP_ME(pqconn, startTransactionAsync, ai_pqconn_start_transaction_async, ZEND_ACC_PUBLIC) PHP_ME(pqconn, trace, ai_pqconn_trace, ZEND_ACC_PUBLIC) + PHP_ME(pqconn, off, ai_pqconn_off, ZEND_ACC_PUBLIC) PHP_ME(pqconn, on, ai_pqconn_on, ZEND_ACC_PUBLIC) PHP_ME(pqconn, setConverter, ai_pqconn_set_converter, ZEND_ACC_PUBLIC) {0}