felipe          Sun Nov 23 20:00:51 2008 UTC

  Modified files:              
    /php-src/ext/interbase      ibase_query.c interbase.c 
    /php-src/ext/interbase/tests        bug45373.phpt 
                                        ibase_num_fields_001.phpt 
  Log:
  - New parameter parsing API
  
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/ibase_query.c?r1=1.37&r2=1.38&diff_format=u
Index: php-src/ext/interbase/ibase_query.c
diff -u php-src/ext/interbase/ibase_query.c:1.37 
php-src/ext/interbase/ibase_query.c:1.38
--- php-src/ext/interbase/ibase_query.c:1.37    Mon Oct  6 14:28:29 2008
+++ php-src/ext/interbase/ibase_query.c Sun Nov 23 20:00:51 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_query.c,v 1.37 2008/10/06 14:28:29 felipe Exp $ */
+/* $Id: ibase_query.c,v 1.38 2008/11/23 20:00:51 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1211,42 +1211,32 @@
 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()) {
-
-               ibase_db_link *ib_link;
-               zval **arg;
+       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);
 
-               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 @@
         *   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 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 @@
    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 @@
    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 @@
    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 @@
    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 @@
    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 @@
                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);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/interbase.c?r1=1.244&r2=1.245&diff_format=u
Index: php-src/ext/interbase/interbase.c
diff -u php-src/ext/interbase/interbase.c:1.244 
php-src/ext/interbase/interbase.c:1.245
--- php-src/ext/interbase/interbase.c:1.244     Mon Nov 17 11:26:21 2008
+++ php-src/ext/interbase/interbase.c   Sun Nov 23 20:00:51 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: interbase.c,v 1.244 2008/11/17 11:26:21 felipe Exp $ */
+/* $Id: interbase.c,v 1.245 2008/11/23 20:00:51 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -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 @@
        
        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 @@
        
        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);
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/tests/bug45373.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/interbase/tests/bug45373.phpt
diff -u php-src/ext/interbase/tests/bug45373.phpt:1.1 
php-src/ext/interbase/tests/bug45373.phpt:1.2
--- php-src/ext/interbase/tests/bug45373.phpt:1.1       Mon Oct  6 14:28:29 2008
+++ php-src/ext/interbase/tests/bug45373.phpt   Sun Nov 23 20:00:51 2008
@@ -33,7 +33,7 @@
   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 @@
   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
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/tests/ibase_num_fields_001.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/interbase/tests/ibase_num_fields_001.phpt
diff -u php-src/ext/interbase/tests/ibase_num_fields_001.phpt:1.1 
php-src/ext/interbase/tests/ibase_num_fields_001.phpt:1.2
--- php-src/ext/interbase/tests/ibase_num_fields_001.phpt:1.1   Tue Nov 11 
17:52:08 2008
+++ php-src/ext/interbase/tests/ibase_num_fields_001.phpt       Sun Nov 23 
20:00:51 2008
@@ -18,8 +18,8 @@
 --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: ibase_num_fields() expects parameter 1 to be resource, integer given 
in %s on line %d
+NULL
 
-Warning: Wrong parameter count for ibase_num_fields() in %s on line %d
+Warning: ibase_num_fields() expects exactly 1 parameter, 0 given in %s on line 
%d
 NULL

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to