mirror of
https://github.com/php/php-src.git
synced 2024-09-23 02:47:26 +00:00
- New parameter parsing API
This commit is contained in:
parent
d0977cb642
commit
9dc4271531
@ -1211,42 +1211,32 @@ 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;
|
||||
}
|
||||
|
||||
switch (ZEND_NUM_ARGS()) {
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1277,21 +1267,20 @@ 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_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result_arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result_arg) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@ -1494,40 +1483,25 @@ 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, **flag_arg;
|
||||
zval *result_arg;
|
||||
long flag_arg;
|
||||
long i, array_cnt = 0, flag = 0;
|
||||
ibase_result *ib_result;
|
||||
|
||||
RESET_ERRMSG;
|
||||
|
||||
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;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &result_arg, &flag)) {
|
||||
return;
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1722,19 +1696,20 @@ 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, **name_arg;
|
||||
zval *result_arg;
|
||||
char *name_arg;
|
||||
int name_arg_len;
|
||||
ibase_result *ib_result;
|
||||
|
||||
RESET_ERRMSG;
|
||||
|
||||
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, &name_arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &result_arg, &name_arg, &name_arg_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
|
||||
convert_to_string_ex(name_arg);
|
||||
ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
|
||||
|
||||
if (isc_dsql_set_cursor_name(IB_STATUS, &ib_result->stmt, Z_STRVAL_PP(name_arg), 0)) {
|
||||
if (isc_dsql_set_cursor_name(IB_STATUS, &ib_result->stmt, name_arg, 0)) {
|
||||
_php_ibase_error(TSRMLS_C);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
@ -1747,81 +1722,64 @@ 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_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result_arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result_arg) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, LE_RESULT, le_result);
|
||||
zend_list_delete(Z_LVAL_PP(result_arg));
|
||||
ZEND_FETCH_RESOURCE(ib_result, ibase_result *, &result_arg, -1, LE_RESULT, le_result);
|
||||
zend_list_delete(Z_RESVAL_P(result_arg));
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto resource ibase_prepare([resource link_identifier, ] string query)
|
||||
/* {{{ proto resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])
|
||||
Prepare a query for later execution */
|
||||
PHP_FUNCTION(ibase_prepare)
|
||||
{
|
||||
zval **link_arg, **trans_arg, **query_arg;
|
||||
zval *link_arg, *trans_arg;
|
||||
ibase_db_link *ib_link;
|
||||
ibase_trans *trans = NULL;
|
||||
int trans_res_id = 0;
|
||||
int query_len, 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);
|
||||
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@ -1911,17 +1869,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_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &query_arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &query_arg) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(ib_query, ibase_query *, query_arg, -1, LE_QUERY, le_query);
|
||||
zend_list_delete(Z_LVAL_PP(query_arg));
|
||||
ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &query_arg, -1, LE_QUERY, le_query);
|
||||
zend_list_delete(Z_RESVAL_P(query_arg));
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
@ -1930,29 +1888,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_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &result)==FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
zend_list_find(Z_LVAL_PP(result), &type);
|
||||
zend_list_find(Z_RESVAL_P(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);
|
||||
@ -2053,27 +2011,28 @@ static void _php_ibase_field_info(zval *return_value, XSQLVAR *var) /* {{{ */
|
||||
Get information about a field */
|
||||
PHP_FUNCTION(ibase_field_info)
|
||||
{
|
||||
zval **result_arg, **field_arg;
|
||||
zval *result_arg;
|
||||
long field_arg;
|
||||
int type;
|
||||
XSQLDA *sqlda;
|
||||
|
||||
RESET_ERRMSG;
|
||||
|
||||
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &result_arg, &field_arg)==FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &result_arg, &field_arg) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
zend_list_find(Z_LVAL_PP(result_arg), &type);
|
||||
zend_list_find(Z_RESVAL_P(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;
|
||||
}
|
||||
|
||||
@ -2082,12 +2041,10 @@ PHP_FUNCTION(ibase_field_info)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
convert_to_long_ex(field_arg);
|
||||
|
||||
if (Z_LVAL_PP(field_arg) < 0 || Z_LVAL_PP(field_arg) >= sqlda->sqld) {
|
||||
if (field_arg < 0 || field_arg >= sqlda->sqld) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
_php_ibase_field_info(return_value,sqlda->sqlvar + Z_LVAL_PP(field_arg));
|
||||
_php_ibase_field_info(return_value, sqlda->sqlvar + field_arg);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -43,6 +43,8 @@
|
||||
#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);
|
||||
|
||||
@ -1061,6 +1063,7 @@ PHP_FUNCTION(ibase_close)
|
||||
|
||||
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);
|
||||
@ -1089,6 +1092,7 @@ PHP_FUNCTION(ibase_drop_db)
|
||||
|
||||
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);
|
||||
|
@ -33,7 +33,7 @@ array(2) {
|
||||
string(32) "test table not created with isql"
|
||||
}
|
||||
|
||||
Notice: ibase_execute(): Statement expects 2 arguments, 3 given in %sbug45373.php on line %d
|
||||
Notice: ibase_execute(): Statement expects 2 arguments, 3 given in %s on line %d
|
||||
array(2) {
|
||||
["I"]=>
|
||||
int(1)
|
||||
@ -41,7 +41,7 @@ array(2) {
|
||||
string(32) "test table not created with isql"
|
||||
}
|
||||
|
||||
Warning: ibase_execute(): Statement expects 2 arguments, 1 given in %sbug45373.php on line %d
|
||||
Warning: ibase_execute(): Statement expects 2 arguments, 1 given in %s on line %d
|
||||
|
||||
Warning: ibase_fetch_assoc(): supplied argument is not a valid Firebird/InterBase result resource in %sbug45373.php on line %d
|
||||
bool(false)
|
||||
Warning: ibase_fetch_assoc() expects parameter 1 to be resource, boolean given in %s on line %d
|
||||
NULL
|
||||
|
@ -18,8 +18,8 @@ var_dump(ibase_num_fields());
|
||||
--EXPECTF--
|
||||
int(2)
|
||||
|
||||
Warning: ibase_num_fields(): supplied argument is not a valid Firebird/InterBase result resource in %s on line %d
|
||||
bool(false)
|
||||
|
||||
Warning: Wrong parameter count for ibase_num_fields() in %s on line %d
|
||||
Warning: ibase_num_fields() expects parameter 1 to be resource, integer given in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: ibase_num_fields() expects exactly 1 parameter, 0 given in %s on line %d
|
||||
NULL
|
||||
|
Loading…
Reference in New Issue
Block a user