summaryrefslogtreecommitdiff
path: root/ext/interbase
diff options
context:
space:
mode:
authorSVN Migration <svn@php.net>2008-12-03 20:30:45 +0000
committerSVN Migration <svn@php.net>2008-12-03 20:30:45 +0000
commit2876046398950e59c3b3c460e67e6fec7ff2ba3c (patch)
tree33b2b8b4b859960a6446ad19d0ada1c55f9cfcda /ext/interbase
parent3fb86b0b9e79e6a3312b694f30ee627e2e1b325c (diff)
downloadphp-git-php-5.3.0alpha2.tar.gz
This commit was manufactured by cvs2svn to create tag 'php_5_3_0alpha2'.php-5.3.0alpha2
Diffstat (limited to 'ext/interbase')
-rw-r--r--ext/interbase/ibase_events.c75
-rw-r--r--ext/interbase/ibase_query.c260
-rw-r--r--ext/interbase/ibase_service.c9
-rw-r--r--ext/interbase/interbase.c193
-rwxr-xr-xext/interbase/tests/interbase.inc3
5 files changed, 312 insertions, 228 deletions
diff --git a/ext/interbase/ibase_events.c b/ext/interbase/ibase_events.c
index 64842dd505..b4c204ba26 100644
--- a/ext/interbase/ibase_events.c
+++ b/ext/interbase/ibase_events.c
@@ -126,9 +126,8 @@ static void _php_ibase_event_block(ibase_db_link *ib_link, unsigned short count,
Waits for any one of the passed Interbase events to be posted by the database, and returns its name */
PHP_FUNCTION(ibase_wait_event)
{
- zval ***args;
+ zval **args[16];
ibase_db_link *ib_link;
- int num_args;
char *event_buffer, *result_buffer, *events[15];
unsigned short i = 0, event_count = 0, buffer_size;
unsigned long occurred_event[15];
@@ -140,25 +139,22 @@ PHP_FUNCTION(ibase_wait_event)
WRONG_PARAM_COUNT;
}
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &num_args) == FAILURE) {
- return;
+ if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
+ RETURN_FALSE;
}
if (Z_TYPE_PP(args[0]) == IS_RESOURCE) {
- if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, args[0], -1, "InterBase link", le_link, le_plink)) {
- efree(args);
- RETURN_FALSE;
- }
+
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[0], -1, "InterBase link", le_link, le_plink);
i = 1;
+
} else {
+
if (ZEND_NUM_ARGS() > 15) {
- efree(args);
WRONG_PARAM_COUNT;
}
- if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, NULL, IBG(default_link), "InterBase link", le_link, le_plink)) {
- efree(args);
- RETURN_FALSE;
- }
+
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), "InterBase link", le_link, le_plink);
}
for (; i < ZEND_NUM_ARGS(); ++i) {
@@ -173,7 +169,6 @@ PHP_FUNCTION(ibase_wait_event)
if (isc_wait_for_event(IB_STATUS, &ib_link->handle, buffer_size, event_buffer, result_buffer)) {
_php_ibase_error(TSRMLS_C);
_php_ibase_event_free(event_buffer,result_buffer);
- efree(args);
RETURN_FALSE;
}
@@ -183,7 +178,6 @@ PHP_FUNCTION(ibase_wait_event)
if (occurred_event[i]) {
char *result = estrdup(events[i]);
_php_ibase_event_free(event_buffer,result_buffer);
- efree(args);
RETURN_STRING(result,0);
}
}
@@ -191,7 +185,6 @@ PHP_FUNCTION(ibase_wait_event)
/* If we reach this line, isc_wait_for_event() did return, but we don't know
which event fired. */
_php_ibase_event_free(event_buffer,result_buffer);
- efree(args);
RETURN_FALSE;
}
/* }}} */
@@ -267,71 +260,55 @@ PHP_FUNCTION(ibase_set_event_handler)
* link resource id (int) as arguments. The value returned from the function is
* used to determine if the event handler should remain set.
*/
- char *cb_name;
- zval ***args, **cb_arg;
+
+ zval **args[17], **cb_arg;
ibase_db_link *ib_link;
ibase_event *event;
unsigned short i = 1, buffer_size;
- int link_res_id, num_args;
+ int link_res_id;
RESET_ERRMSG;
-
- /* Minimum and maximum number of arguments allowed */
+
+ /* no more than 15 events */
if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 17) {
WRONG_PARAM_COUNT;
}
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &num_args) == FAILURE) {
- return;
+ if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
+ RETURN_FALSE;
}
/* get a working link */
if (Z_TYPE_PP(args[0]) != IS_STRING) {
- /* resource, callback, event_1 [, ... event_15]
- * No more than 15 events
- */
- if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 17) {
- efree(args);
- WRONG_PARAM_COUNT;
- }
cb_arg = args[1];
i = 2;
- if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, args[0], -1, "InterBase link", le_link, le_plink)) {
- efree(args);
- RETURN_FALSE;
- }
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[0], -1,
+ "InterBase link", le_link, le_plink);
convert_to_long_ex(args[0]);
link_res_id = Z_LVAL_PP(args[0]);
} else {
- /* callback, event_1 [, ... event_15]
- * No more than 15 events
- */
- if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 16) {
- efree(args);
+
+ if (ZEND_NUM_ARGS() > 16) {
WRONG_PARAM_COUNT;
}
cb_arg = args[0];
- if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, NULL, IBG(default_link), "InterBase link", le_link, le_plink)) {
- efree(args);
- RETURN_FALSE;
- }
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link),
+ "InterBase link", le_link, le_plink);
link_res_id = IBG(default_link);
}
/* get the callback */
- if (!zend_is_callable(*cb_arg, 0, &cb_name TSRMLS_CC)) {
- _php_ibase_module_error("Callback argument %s is not a callable function" TSRMLS_CC, cb_name);
- efree(cb_name);
- efree(args);
+ if (!zend_is_callable(*cb_arg, 0, NULL TSRMLS_CC)) {
+ _php_ibase_module_error("Callback argument %s is not a callable function"
+ TSRMLS_CC, Z_STRVAL_PP(cb_arg));
RETURN_FALSE;
}
- efree(cb_name);
/* allocate the event resource */
event = (ibase_event *) safe_emalloc(sizeof(ibase_event), 1, 0);
@@ -362,7 +339,6 @@ PHP_FUNCTION(ibase_set_event_handler)
_php_ibase_error(TSRMLS_C);
efree(event);
- efree(args);
RETURN_FALSE;
}
@@ -371,7 +347,6 @@ PHP_FUNCTION(ibase_set_event_handler)
ZEND_REGISTER_RESOURCE(return_value, event, le_event);
zend_list_addref(Z_LVAL_P(return_value));
- efree(args);
}
/* }}} */
diff --git a/ext/interbase/ibase_query.c b/ext/interbase/ibase_query.c
index 9bc7b5102b..5f24ff84ec 100644
--- a/ext/interbase/ibase_query.c
+++ b/ext/interbase/ibase_query.c
@@ -1070,7 +1070,7 @@ PHP_FUNCTION(ibase_query)
{
zval *zlink, *ztrans, ***bind_args = NULL;
char *query;
- int bind_i, query_len, bind_num;
+ int bind_i, query_len;
long trans_res_id = 0;
ibase_db_link *ib_link = NULL;
ibase_trans *trans = NULL;
@@ -1176,9 +1176,11 @@ PHP_FUNCTION(ibase_query)
if (bind_n < expected_n) {
break;
}
- } else if (bind_n > 0) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &bind_args, &bind_num) == FAILURE) {
- return;
+ } else if (bind_n > 0) {
+ bind_args = (zval ***) safe_emalloc(sizeof(zval **), ZEND_NUM_ARGS(), 0);
+
+ if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), bind_args)) {
+ break;
}
}
@@ -1211,32 +1213,42 @@ PHP_FUNCTION(ibase_query)
PHP_FUNCTION(ibase_affected_rows)
{
ibase_trans *trans = NULL;
- ibase_db_link *ib_link;
- zval *arg;
-
+
RESET_ERRMSG;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg) == FAILURE) {
- return;
- }
- if (ZEND_NUM_ARGS() == 0) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK, le_link, le_plink);
- if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
- RETURN_FALSE;
- }
- trans = ib_link->tr_list->trans;
- } else {
- /* one id was passed, could be db or trans id */
- _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, &arg, &ib_link, &trans);
- if (trans == NULL) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, &arg, -1, LE_LINK, le_link, le_plink);
+ switch (ZEND_NUM_ARGS()) {
+
+ ibase_db_link *ib_link;
+ zval **arg;
+ case 0:
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
+ le_link, le_plink);
if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
RETURN_FALSE;
}
trans = ib_link->tr_list->trans;
- }
+ break;
+
+ case 1:
+ if (zend_get_parameters_ex(1, &arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ /* one id was passed, could be db or trans id */
+ _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, arg, &ib_link, &trans);
+ if (trans == NULL) {
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, arg, -1, LE_LINK, le_link, le_plink);
+
+ if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
+ RETURN_FALSE;
+ }
+ trans = ib_link->tr_list->trans;
+ }
+ break;
+
+ default:
+ WRONG_PARAM_COUNT;
+ break;
}
RETURN_LONG(trans->affected_rows);
}
@@ -1267,20 +1279,21 @@ PHP_FUNCTION(ibase_num_rows)
* sets.
*/
- zval *result_arg;
+ zval **result_arg;
ibase_result *ib_result;
static char info_count[] = {isc_info_sql_records};
char result[64];
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result_arg) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result_arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
- if (isc_dsql_sql_info(IB_STATUS, &ib_result->stmt, sizeof(info_count), info_count, sizeof(result), result)) {
+ if (isc_dsql_sql_info(IB_STATUS, &ib_result->stmt, sizeof(info_count), info_count,
+ sizeof(result), result)) {
_php_ibase_error(TSRMLS_C);
RETURN_FALSE;
}
@@ -1488,24 +1501,40 @@ static int _php_ibase_arr_zval(zval *ar_zval, char *data, unsigned long data_siz
static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) /* {{{ */
{
- zval *result_arg;
+ zval **result_arg, **flag_arg;
long i, array_cnt = 0, flag = 0;
ibase_result *ib_result;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &result_arg, &flag)) {
- return;
+ switch (ZEND_NUM_ARGS()) {
+ case 1:
+ if (FAILURE == zend_get_parameters_ex(1, &result_arg)) {
+ RETURN_FALSE;
+ }
+ break;
+ case 2:
+ if (FAILURE == zend_get_parameters_ex(2, &result_arg, &flag_arg)) {
+ RETURN_FALSE;
+ }
+ convert_to_long_ex(flag_arg);
+ flag = Z_LVAL_PP(flag_arg);
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
}
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
if (ib_result->out_sqlda == NULL || !ib_result->has_more_rows) {
RETURN_FALSE;
}
if (ib_result->statement_type != isc_info_sql_stmt_exec_procedure) {
+
if (isc_dsql_fetch(IB_STATUS, &ib_result->stmt, 1, ib_result->out_sqlda)) {
+
ib_result->has_more_rows = 0;
if (IB_STATUS[0] && IB_STATUS[1]) { /* error in fetch */
_php_ibase_error(TSRMLS_C);
@@ -1700,20 +1729,19 @@ PHP_FUNCTION(ibase_fetch_object)
Assign a name to a result for use with ... WHERE CURRENT OF <name> statements */
PHP_FUNCTION(ibase_name_result)
{
- zval *result_arg;
- char *name_arg;
- int name_arg_len;
+ zval **result_arg, **name_arg;
ibase_result *ib_result;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &result_arg, &name_arg, &name_arg_len) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, &name_arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
+ convert_to_string_ex(name_arg);
- if (isc_dsql_set_cursor_name(IB_STATUS, &ib_result->stmt, name_arg, 0)) {
+ if (isc_dsql_set_cursor_name(IB_STATUS, &ib_result->stmt, Z_STRVAL_PP(name_arg), 0)) {
_php_ibase_error(TSRMLS_C);
RETURN_FALSE;
}
@@ -1726,64 +1754,81 @@ PHP_FUNCTION(ibase_name_result)
Free the memory used by a result */
PHP_FUNCTION(ibase_free_result)
{
- zval *result_arg;
+ zval **result_arg;
ibase_result *ib_result;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result_arg) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result_arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
- zend_list_delete(Z_RESVAL_P(result_arg));
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
+ zend_list_delete(Z_LVAL_PP(result_arg));
RETURN_TRUE;
}
/* }}} */
-/* {{{ proto resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])
+/* {{{ proto resource ibase_prepare([resource link_identifier, ] string query)
Prepare a query for later execution */
PHP_FUNCTION(ibase_prepare)
{
- zval *link_arg, *trans_arg;
+ zval **link_arg, **trans_arg, **query_arg;
ibase_db_link *ib_link;
ibase_trans *trans = NULL;
- int query_len, trans_res_id = 0;
+ int trans_res_id = 0;
ibase_query *ib_query;
char *query;
RESET_ERRMSG;
-
- if (ZEND_NUM_ARGS() == 1) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &query, &query_len) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK, le_link, le_plink);
- } else if (ZEND_NUM_ARGS() == 2) {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &link_arg, &query, &query_len) == FAILURE) {
- return;
- }
- _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, &link_arg, &ib_link, &trans);
- if (trans != NULL) {
- trans_res_id = Z_RESVAL_P(link_arg);
- }
- } else {
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrs", &link_arg, &trans_arg, &query, &query_len) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, &link_arg, -1, LE_LINK, le_link, le_plink);
- ZEND_FETCH_RESOURCE(trans, ibase_trans *, &trans_arg, -1, LE_TRANS, le_trans);
- trans_res_id = Z_RESVAL_P(trans_arg);
+ switch (ZEND_NUM_ARGS()) {
+ case 1:
+ if (zend_get_parameters_ex(1, &query_arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
+ le_link, le_plink);
+ break;
+ case 2:
+ if (zend_get_parameters_ex(2, &link_arg, &query_arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAM_PASSTHRU, link_arg, &ib_link, &trans);
+
+ if (trans != NULL) {
+ convert_to_long_ex(link_arg);
+ trans_res_id = Z_LVAL_PP(link_arg);
+ }
+
+ break;
+ case 3:
+ if (zend_get_parameters_ex(3, &link_arg, &trans_arg, &query_arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link*, link_arg, -1, LE_LINK, le_link, le_plink);
+ ZEND_FETCH_RESOURCE(trans, ibase_trans*, trans_arg, -1, LE_TRANS, le_trans);
+
+ convert_to_long_ex(trans_arg);
+ trans_res_id = Z_LVAL_PP(trans_arg);
+
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
}
+ convert_to_string_ex(query_arg);
+ query = Z_STRVAL_PP(query_arg);
+
if (FAILURE == _php_ibase_def_trans(ib_link, &trans TSRMLS_CC)) {
RETURN_FALSE;
}
ib_query = (ibase_query *) emalloc(sizeof(ibase_query));
- if (FAILURE == _php_ibase_alloc_query(ib_query, ib_link, trans, query, ib_link->dialect, trans_res_id TSRMLS_CC)) {
+ if (FAILURE == _php_ibase_alloc_query(ib_query, ib_link, trans, query, ib_link->dialect,
+ trans_res_id TSRMLS_CC)) {
efree(ib_query);
RETURN_FALSE;
}
@@ -1817,17 +1862,16 @@ PHP_FUNCTION(ibase_execute)
if (bind_n != expected_n) {
php_error_docref(NULL TSRMLS_CC, (bind_n < expected_n) ? E_WARNING : E_NOTICE,
"Statement expects %d arguments, %d given", expected_n, bind_n);
-
if (bind_n < expected_n) {
break;
}
- }
- /* have variables to bind */
- args = (zval ***) do_alloca((expected_n + 1) * sizeof(zval **), use_heap);
+ } else if (bind_n > 0) { /* have variables to bind */
+ args = (zval ***) do_alloca(ZEND_NUM_ARGS() * sizeof(zval **), use_heap);
- if (FAILURE == zend_get_parameters_array_ex((expected_n + 1), args)) {
- break;
+ if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)) {
+ break;
+ }
}
/* Have we used this cursor before and it's still open (exec proc has no cursor) ? */
@@ -1873,17 +1917,17 @@ PHP_FUNCTION(ibase_execute)
Free memory used by a query */
PHP_FUNCTION(ibase_free_query)
{
- zval *query_arg;
+ zval **query_arg;
ibase_query *ib_query;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &query_arg) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &query_arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &query_arg, -1, LE_QUERY, le_query);
- zend_list_delete(Z_RESVAL_P(query_arg));
+ ZEND_FETCH_RESOURCE(ib_query, ibase_query *, query_arg, -1, LE_QUERY, le_query);
+ zend_list_delete(Z_LVAL_PP(query_arg));
RETURN_TRUE;
}
/* }}} */
@@ -1892,29 +1936,29 @@ PHP_FUNCTION(ibase_free_query)
Get the number of fields in result */
PHP_FUNCTION(ibase_num_fields)
{
- zval *result;
+ zval **result;
int type;
XSQLDA *sqlda;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ WRONG_PARAM_COUNT;
}
- zend_list_find(Z_RESVAL_P(result), &type);
+ zend_list_find(Z_LVAL_PP(result), &type);
if (type == le_query) {
ibase_query *ib_query;
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &result, -1, LE_QUERY, le_query);
+ ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result, -1, LE_QUERY, le_query);
sqlda = ib_query->out_sqlda;
} else {
ibase_result *ib_result;
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result, -1, LE_RESULT, le_result);
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result, -1, LE_RESULT, le_result);
sqlda = ib_result->out_sqlda;
- }
+ }
if (sqlda == NULL) {
RETURN_LONG(0);
@@ -2015,28 +2059,27 @@ static void _php_ibase_field_info(zval *return_value, XSQLVAR *var) /* {{{ */
Get information about a field */
PHP_FUNCTION(ibase_field_info)
{
- zval *result_arg;
- long field_arg;
+ zval **result_arg, **field_arg;
int type;
XSQLDA *sqlda;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &result_arg, &field_arg) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result_arg, &field_arg)==FAILURE) {
+ WRONG_PARAM_COUNT;
}
- zend_list_find(Z_RESVAL_P(result_arg), &type);
+ zend_list_find(Z_LVAL_PP(result_arg), &type);
if (type == le_query) {
ibase_query *ib_query;
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &result_arg, -1, LE_QUERY, le_query);
+ ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result_arg, -1, LE_QUERY, le_query);
sqlda = ib_query->out_sqlda;
} else {
ibase_result *ib_result;
- ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
sqlda = ib_result->out_sqlda;
}
@@ -2045,10 +2088,12 @@ PHP_FUNCTION(ibase_field_info)
RETURN_FALSE;
}
- if (field_arg < 0 || field_arg >= sqlda->sqld) {
+ convert_to_long_ex(field_arg);
+
+ if (Z_LVAL_PP(field_arg) < 0 || Z_LVAL_PP(field_arg) >= sqlda->sqld) {
RETURN_FALSE;
}
- _php_ibase_field_info(return_value, sqlda->sqlvar + field_arg);
+ _php_ibase_field_info(return_value,sqlda->sqlvar + Z_LVAL_PP(field_arg));
}
/* }}} */
@@ -2056,16 +2101,16 @@ PHP_FUNCTION(ibase_field_info)
Get the number of params in a prepared query */
PHP_FUNCTION(ibase_num_params)
{
- zval *result;
+ zval **result;
ibase_query *ib_query;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &result, -1, LE_QUERY, le_query);
+ ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result, -1, LE_QUERY, le_query);
if (ib_query->in_sqlda == NULL) {
RETURN_LONG(0);
@@ -2079,27 +2124,28 @@ PHP_FUNCTION(ibase_num_params)
Get information about a parameter */
PHP_FUNCTION(ibase_param_info)
{
- zval *result_arg;
- long field_arg;
+ zval **result_arg, **field_arg;
ibase_query *ib_query;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &result_arg, &field_arg) == FAILURE) {
- return;
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, &field_arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &result_arg, -1, LE_QUERY, le_query);
+ ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result_arg, -1, LE_QUERY, le_query);
if (ib_query->in_sqlda == NULL) {
RETURN_FALSE;
}
- if (field_arg < 0 || field_arg >= ib_query->in_sqlda->sqld) {
+ convert_to_long_ex(field_arg);
+
+ if (Z_LVAL_PP(field_arg) < 0 || Z_LVAL_PP(field_arg) >= ib_query->in_sqlda->sqld) {
RETURN_FALSE;
}
- _php_ibase_field_info(return_value,ib_query->in_sqlda->sqlvar + field_arg);
+ _php_ibase_field_info(return_value,ib_query->in_sqlda->sqlvar + Z_LVAL_PP(field_arg));
}
/* }}} */
diff --git a/ext/interbase/ibase_service.c b/ext/interbase/ibase_service.c
index 087ebaca52..9107ae6634 100644
--- a/ext/interbase/ibase_service.c
+++ b/ext/interbase/ibase_service.c
@@ -229,7 +229,8 @@ PHP_FUNCTION(ibase_service_attach)
user, isc_spb_password, (char)plen, pass, host);
if (spb_len > sizeof(buf) || spb_len == -1) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)" TSRMLS_CC, spb_len);
+ _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
+ TSRMLS_CC, spb_len);
RETURN_FALSE;
}
@@ -450,7 +451,8 @@ static void _php_ibase_backup_restore(INTERNAL_FUNCTION_PARAMETERS, char operati
}
if (spb_len > sizeof(buf) || spb_len <= 0) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)" TSRMLS_CC, spb_len);
+ _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
+ TSRMLS_CC, spb_len);
RETURN_FALSE;
}
@@ -558,7 +560,8 @@ options_argument:
}
if (spb_len > sizeof(buf) || spb_len == -1) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)" TSRMLS_CC, spb_len);
+ _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
+ TSRMLS_CC, spb_len);
RETURN_FALSE;
}
diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c
index 4c769c39e0..63f440223e 100644
--- a/ext/interbase/interbase.c
+++ b/ext/interbase/interbase.c
@@ -43,18 +43,19 @@
#define COMMIT 1
#define RETAIN 2
-#define CHECK_LINK(link) { if (link==-1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "A link to the server could not be established"); RETURN_FALSE; } }
-
ZEND_DECLARE_MODULE_GLOBALS(ibase)
static PHP_GINIT_FUNCTION(ibase);
/* {{{ arginfo */
+static
ZEND_BEGIN_ARG_INFO(arginfo_ibase_errmsg, 0)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO(arginfo_ibase_errcode, 0)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_connect, 0, 0, 1)
ZEND_ARG_INFO(0, database)
ZEND_ARG_INFO(0, username)
@@ -65,6 +66,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_connect, 0, 0, 1)
ZEND_ARG_INFO(0, role)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_pconnect, 0, 0, 1)
ZEND_ARG_INFO(0, database)
ZEND_ARG_INFO(0, username)
@@ -75,14 +77,17 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_pconnect, 0, 0, 1)
ZEND_ARG_INFO(0, role)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_close, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_drop_db, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_trans, 0, 0, 0)
ZEND_ARG_INFO(0, trans_args)
ZEND_ARG_INFO(0, link_identifier)
@@ -90,70 +95,85 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_trans, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_commit, 0, 0, 1)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_rollback, 0, 0, 1)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_commit_ret, 0, 0, 1)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_rollback_ret, 0, 0, 1)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_gen_id, 0, 0, 1)
ZEND_ARG_INFO(0, generator)
ZEND_ARG_INFO(0, increment)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_create, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_open, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, blob_id)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_add, 0, 0, 2)
ZEND_ARG_INFO(0, blob_handle)
ZEND_ARG_INFO(0, data)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_get, 0, 0, 2)
ZEND_ARG_INFO(0, blob_handle)
ZEND_ARG_INFO(0, len)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_close, 0, 0, 1)
ZEND_ARG_INFO(0, blob_handle)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_cancel, 0, 0, 1)
ZEND_ARG_INFO(0, blob_handle)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_info, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, blob_id)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_echo, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, blob_id)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_blob_import, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, file)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_query, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, link_identifier)
@@ -162,73 +182,88 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_query, 0, 0, 0)
ZEND_ARG_INFO(0, bind_arg)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_affected_rows, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_END_ARG_INFO()
#if abies_0
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_num_rows, 0, 0, 1)
ZEND_ARG_INFO(0, result_identifier)
ZEND_END_ARG_INFO()
#endif
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_fetch_row, 0, 0, 1)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, fetch_flags)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_fetch_assoc, 0, 0, 1)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, fetch_flags)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_fetch_object, 0, 0, 1)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, fetch_flags)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_name_result, 0, 0, 2)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, name)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_free_result, 0, 0, 1)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_prepare, 0, 0, 0)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, query)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_execute, 0, 0, 1)
ZEND_ARG_INFO(0, query)
ZEND_ARG_INFO(0, bind_arg)
ZEND_ARG_INFO(0, bind_arg)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_free_query, 0, 0, 1)
ZEND_ARG_INFO(0, query)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_num_fields, 0, 0, 1)
ZEND_ARG_INFO(0, query_result)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_field_info, 0, 0, 2)
ZEND_ARG_INFO(0, query_result)
ZEND_ARG_INFO(0, field_number)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_num_params, 0, 0, 1)
ZEND_ARG_INFO(0, query)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_param_info, 0, 0, 2)
ZEND_ARG_INFO(0, query)
ZEND_ARG_INFO(0, field_number)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_add_user, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, user_name)
@@ -238,6 +273,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_add_user, 0, 0, 3)
ZEND_ARG_INFO(0, last_name)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_modify_user, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, user_name)
@@ -247,6 +283,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_modify_user, 0, 0, 3)
ZEND_ARG_INFO(0, last_name)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_delete_user, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, user_name)
@@ -256,16 +293,19 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_delete_user, 0, 0, 3)
ZEND_ARG_INFO(0, last_name)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_service_attach, 0, 0, 3)
ZEND_ARG_INFO(0, host)
ZEND_ARG_INFO(0, dba_username)
ZEND_ARG_INFO(0, dba_password)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_service_detach, 0, 0, 1)
ZEND_ARG_INFO(0, service_handle)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_backup, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, source_db)
@@ -274,6 +314,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_backup, 0, 0, 3)
ZEND_ARG_INFO(0, verbose)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_restore, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, source_file)
@@ -282,6 +323,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_restore, 0, 0, 3)
ZEND_ARG_INFO(0, verbose)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_maintain_db, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, db)
@@ -289,6 +331,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_maintain_db, 0, 0, 3)
ZEND_ARG_INFO(0, argument)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_db_info, 0, 0, 3)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, db)
@@ -296,17 +339,20 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_db_info, 0, 0, 3)
ZEND_ARG_INFO(0, argument)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_server_info, 0, 0, 2)
ZEND_ARG_INFO(0, service_handle)
ZEND_ARG_INFO(0, action)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_wait_event, 0, 0, 1)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, event)
ZEND_ARG_INFO(0, event2)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_set_event_handler, 0, 0, 2)
ZEND_ARG_INFO(0, link_identifier)
ZEND_ARG_INFO(0, handler)
@@ -314,6 +360,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_set_event_handler, 0, 0, 2)
ZEND_ARG_INFO(0, event2)
ZEND_END_ARG_INFO()
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_ibase_free_event_handler, 0, 0, 1)
ZEND_ARG_INFO(0, event)
ZEND_END_ARG_INFO()
@@ -1051,25 +1098,30 @@ PHP_FUNCTION(ibase_pconnect)
Close an InterBase connection */
PHP_FUNCTION(ibase_close)
{
- zval *link_arg = NULL;
+ zval **link_arg = NULL;
ibase_db_link *ib_link;
int link_id;
RESET_ERRMSG;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &link_arg) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- link_id = IBG(default_link);
- CHECK_LINK(link_id);
- IBG(default_link) = -1;
- } else {
- link_id = Z_RESVAL_P(link_arg);
+ switch (ZEND_NUM_ARGS()) {
+ case 0:
+ link_id = IBG(default_link);
+ IBG(default_link) = -1;
+ break;
+ case 1:
+ if (zend_get_parameters_ex(1, &link_arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ convert_to_long_ex(link_arg);
+ link_id = Z_LVAL_PP(link_arg);
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
}
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, &link_arg, link_id, LE_LINK, le_link, le_plink);
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, link_arg, link_id, LE_LINK, le_link, le_plink);
zend_list_delete(link_id);
RETURN_TRUE;
}
@@ -1079,26 +1131,31 @@ PHP_FUNCTION(ibase_close)
Drop an InterBase database */
PHP_FUNCTION(ibase_drop_db)
{
- zval *link_arg = NULL;
+ zval **link_arg = NULL;
ibase_db_link *ib_link;
ibase_tr_list *l;
int link_id;
RESET_ERRMSG;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &link_arg) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS() == 0) {
- link_id = IBG(default_link);
- CHECK_LINK(link_id);
- IBG(default_link) = -1;
- } else {
- link_id = Z_RESVAL_P(link_arg);
+
+ switch (ZEND_NUM_ARGS()) {
+ case 0:
+ link_id = IBG(default_link);
+ IBG(default_link) = -1;
+ break;
+ case 1:
+ if (zend_get_parameters_ex(1, &link_arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ convert_to_long_ex(link_arg);
+ link_id = Z_LVAL_PP(link_arg);
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
}
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, &link_arg, link_id, LE_LINK, le_link, le_plink);
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, link_arg, link_id, LE_LINK, le_link, le_plink);
if (isc_drop_database(IB_STATUS, &ib_link->handle)) {
_php_ibase_error(TSRMLS_C);
@@ -1140,9 +1197,9 @@ PHP_FUNCTION(ibase_trans)
long trans_argl = 0;
char *tpb;
ISC_TEB *teb;
- zval ***args = NULL;
+ zval ***args = (zval ***) safe_emalloc(sizeof(zval **),argn,0);
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, &argn) == FAILURE) {
+ if (zend_get_parameters_array_ex(argn, args) == FAILURE) {
efree(args);
efree(ib_link);
RETURN_FALSE;
@@ -1157,13 +1214,8 @@ PHP_FUNCTION(ibase_trans)
if (Z_TYPE_PP(args[i]) == IS_RESOURCE) {
- if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link[link_cnt], ibase_db_link *, args[i], -1, LE_LINK, le_link, le_plink)) {
- efree(teb);
- efree(tpb);
- efree(ib_link);
- efree(args);
- RETURN_FALSE;
- }
+ ZEND_FETCH_RESOURCE2(ib_link[link_cnt], ibase_db_link *, args[i], -1,
+ LE_LINK, le_link, le_plink);
/* copy the most recent modifier string into tbp[] */
memcpy(&tpb[TPB_MAX_SIZE * link_cnt], last_tpb, TPB_MAX_SIZE);
@@ -1227,10 +1279,8 @@ PHP_FUNCTION(ibase_trans)
if (link_cnt == 0) {
link_cnt = 1;
- if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link[0], ibase_db_link *, NULL, IBG(default_link), LE_LINK, le_link, le_plink)) {
- efree(ib_link);
- RETURN_FALSE;
- }
+ ZEND_FETCH_RESOURCE2(ib_link[0], ibase_db_link *, NULL, IBG(default_link), LE_LINK,
+ le_link, le_plink);
result = isc_start_transaction(IB_STATUS, &tr_handle, 1, &ib_link[0]->handle, tpb_len, last_tpb);
}
@@ -1310,42 +1360,55 @@ static void _php_ibase_trans_end(INTERNAL_FUNCTION_PARAMETERS, int commit) /* {{
ibase_trans *trans = NULL;
int res_id = 0;
ISC_STATUS result;
- ibase_db_link *ib_link;
- zval *arg = NULL;
- int type;
RESET_ERRMSG;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg) == FAILURE) {
- return;
- }
- if (ZEND_NUM_ARGS() == 0) {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK, le_link, le_plink);
- if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
- /* this link doesn't have a default transaction */
- _php_ibase_module_error("Default link has no default transaction" TSRMLS_CC);
- RETURN_FALSE;
- }
- trans = ib_link->tr_list->trans;
- } else {
- /* one id was passed, could be db or trans id */
- if (zend_list_find(Z_RESVAL_P(arg), &type) && type == le_trans) {
- ZEND_FETCH_RESOURCE(trans, ibase_trans *, &arg, -1, LE_TRANS, le_trans);
- res_id = Z_RESVAL_P(arg);
- } else {
- ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, &arg, -1, LE_LINK, le_link, le_plink);
+ switch (ZEND_NUM_ARGS()) {
+
+ ibase_db_link *ib_link;
+ zval **arg;
+ int type;
+ case 0:
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, IBG(default_link), LE_LINK,
+ le_link, le_plink);
if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
/* this link doesn't have a default transaction */
- _php_ibase_module_error("Link has no default transaction" TSRMLS_CC);
+ _php_ibase_module_error("Default link has no default transaction" TSRMLS_CC);
RETURN_FALSE;
}
trans = ib_link->tr_list->trans;
- }
+ break;
+
+ case 1:
+ if (zend_get_parameters_ex(1, &arg) == FAILURE) {
+ RETURN_FALSE;
+ }
+ /* one id was passed, could be db or trans id */
+ if (zend_list_find(Z_LVAL_PP(arg), &type) && type == le_trans) {
+ ZEND_FETCH_RESOURCE(trans, ibase_trans *, arg, -1, LE_TRANS, le_trans);
+
+ convert_to_long_ex(arg);
+ res_id = Z_LVAL_PP(arg);
+ } else {
+ ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, arg, -1, LE_LINK, le_link, le_plink);
+
+ if (ib_link->tr_list == NULL || ib_link->tr_list->trans == NULL) {
+ /* this link doesn't have a default transaction */
+ _php_ibase_module_error("Link has no default transaction" TSRMLS_CC);
+ RETURN_FALSE;
+ }
+ trans = ib_link->tr_list->trans;
+ }
+ break;
+
+ default:
+ WRONG_PARAM_COUNT;
+ break;
}
switch (commit) {
+
default: /* == case ROLLBACK: */
result = isc_rollback_transaction(IB_STATUS, &trans->handle);
break;
@@ -1366,7 +1429,7 @@ static void _php_ibase_trans_end(INTERNAL_FUNCTION_PARAMETERS, int commit) /* {{
}
/* Don't try to destroy implicitly opened transaction from list... */
- if ((commit & RETAIN) == 0 && res_id != 0) {
+ if ( (commit & RETAIN) == 0 && res_id != 0) {
zend_list_delete(res_id);
}
RETURN_TRUE;
diff --git a/ext/interbase/tests/interbase.inc b/ext/interbase/tests/interbase.inc
index 42eb6e5915..1401d9b821 100755
--- a/ext/interbase/tests/interbase.inc
+++ b/ext/interbase/tests/interbase.inc
@@ -104,9 +104,6 @@ function rand_number($len , $prec = -1, $sign = 1)
}
} else if ($prec == 0) {
$n = substr(rand() . rand(), 0, rand() % $len + 1);
- } else if (($prec - $len) == 0) {
- $n = substr(rand() . rand(), 0, 1);
- $n .= "." . substr(rand(), 0, $prec);
} else {
$n = substr(rand() . rand(), 0, rand() % ($len - $prec) + 1);
$n .= "." . substr(rand(), 0, $prec);