|
|
|
@ -40,29 +40,30 @@ |
|
|
|
#include "php_oci8.h" |
|
|
|
#include "php_oci8_int.h" |
|
|
|
|
|
|
|
/* {{{ callback_fn() |
|
|
|
/* {{{ callback_fn() |
|
|
|
OCI TAF callback function, calling userspace function */ |
|
|
|
sb4 callback_fn(OCISvcCtx *svchp, OCIEnv *envhp, php_oci_connection *fo_ctx, ub4 fo_type, ub4 fo_event) |
|
|
|
sb4 callback_fn(void *svchp, void *envhp, void *fo_ctx, ub4 fo_type, ub4 fo_event) |
|
|
|
{ |
|
|
|
/* Create zval */ |
|
|
|
zval retval, params[3]; |
|
|
|
php_oci_connection *connection = (php_oci_connection*)fo_ctx; |
|
|
|
|
|
|
|
/* Default return value */ |
|
|
|
sb4 returnValue = 0; |
|
|
|
|
|
|
|
/* Check if userspace callback function was disabled */ |
|
|
|
if (Z_ISUNDEF(fo_ctx->taf_callback) || Z_ISNULL(fo_ctx->taf_callback)) { |
|
|
|
/* Check if userspace callback function was unregistered */ |
|
|
|
if (Z_ISUNDEF(connection->taf_callback) || Z_ISNULL(connection->taf_callback)) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* Initialize zval */ |
|
|
|
ZVAL_RES(¶ms[0], fo_ctx->id); |
|
|
|
ZVAL_RES(¶ms[0], connection->id); |
|
|
|
ZVAL_LONG(¶ms[1], fo_event); |
|
|
|
ZVAL_LONG(¶ms[2], fo_type); |
|
|
|
|
|
|
|
/* Call user function (if possible) */ |
|
|
|
if (call_user_function(EG(function_table), NULL, &fo_ctx->taf_callback, &retval, 3, params) == FAILURE) { |
|
|
|
php_error_docref(NULL, E_WARNING, "Unable to call taf callback function, is it defined?"); |
|
|
|
if (call_user_function(EG(function_table), NULL, &connection->taf_callback, &retval, 3, params) == FAILURE) { |
|
|
|
php_error_docref(NULL, E_WARNING, "Unable to call Oracle TAF callback function"); |
|
|
|
} |
|
|
|
|
|
|
|
/* Set return value */ |
|
|
|
@ -83,10 +84,10 @@ sb4 callback_fn(OCISvcCtx *svchp, OCIEnv *envhp, php_oci_connection *fo_ctx, ub4 |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
/* {{{ php_oci_disable_taf_callback() |
|
|
|
Disables the userspace callback function for Oracle TAF, |
|
|
|
/* {{{ php_oci_unregister_taf_callback() |
|
|
|
Unregister the userspace callback function for Oracle TAF, |
|
|
|
while keeping the OCI callback alive */ |
|
|
|
int php_oci_disable_taf_callback(php_oci_connection *connection) |
|
|
|
int php_oci_unregister_taf_callback(php_oci_connection *connection) |
|
|
|
{ |
|
|
|
return php_oci_register_taf_callback(connection, NULL); |
|
|
|
} |
|
|
|
@ -103,9 +104,9 @@ int php_oci_register_taf_callback(php_oci_connection *connection, zval *callback |
|
|
|
OCIFocbkStruct failover; |
|
|
|
|
|
|
|
if (!callback) { |
|
|
|
/* Disable callback */ |
|
|
|
/* Unregister callback */ |
|
|
|
if (Z_ISUNDEF(connection->taf_callback) || Z_ISNULL(connection->taf_callback)) { |
|
|
|
return 0; // Nothing to disable |
|
|
|
return 0; // Nothing to unregister |
|
|
|
} |
|
|
|
|
|
|
|
registered = 1; |
|
|
|
|