fmk Sun Jan 12 01:29:34 2003 EDT Modified files: (Branch: PHP_4_3) /php4/ext/mssql php_mssql.c Log: MFH Index: php4/ext/mssql/php_mssql.c diff -u php4/ext/mssql/php_mssql.c:1.86.2.9 php4/ext/mssql/php_mssql.c:1.86.2.10 --- php4/ext/mssql/php_mssql.c:1.86.2.9 Sat Jan 11 22:17:44 2003 +++ php4/ext/mssql/php_mssql.c Sun Jan 12 01:29:33 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_mssql.c,v 1.86.2.9 2003/01/12 03:17:44 fmk Exp $ */ +/* $Id: php_mssql.c,v 1.86.2.10 2003/01/12 06:29:33 fmk Exp $ */ #ifdef COMPILE_DL_MSSQL #define HAVE_MSSQL 1 @@ -1105,21 +1105,16 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set query"); RETURN_FALSE; } - if (dbsqlexec(mssql_ptr->link)==FAIL || dbresults(mssql_ptr->link)==FAIL) { + if (dbsqlexec(mssql_ptr->link)==FAIL || (retvalue = +dbresults(mssql_ptr->link))==FAIL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Query failed"); RETURN_FALSE; } - /* The following is more or less the equivalent of mysql_store_result(). - * fetch all rows from the server into the row buffer, thus: - * 1) Being able to fire up another query without explicitly reading all rows - * 2) Having numrows accessible - */ -#ifdef HAVE_FREETDS + // Skip results not returning any columns + while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && retvalue == SUCCEED) { + retvalue = dbresults(mssql_ptr->link); + } if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0) { -#else - if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && !dbdataready(mssql_ptr->link)) { -#endif RETURN_TRUE; } @@ -1186,6 +1181,7 @@ ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result); /* Release remaining results */ do { + dbcanquery(result->mssql_ptr->link); retvalue = dbresults(result->mssql_ptr->link); } while (retvalue == SUCCEED); @@ -2026,7 +2022,7 @@ { zval **stmt, **skip; zend_bool skip_results = 0; - int retvalue,retval_results; + int retvalue, retval_results; mssql_link *mssql_ptr; mssql_statement *statement; mssql_result *result; @@ -2036,7 +2032,7 @@ int ac = ZEND_NUM_ARGS(); batchsize = MS_SQL_G(batchsize); - if (ac < 1 || ac > 2 || zend_get_parameters_ex(1, &stmt, &skip)==FAILURE) { + if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &stmt, &skip)==FAILURE) { WRONG_PARAM_COUNT; } if (ac == 2) { @@ -2064,34 +2060,40 @@ */ result=NULL; if (retval_results == SUCCEED) { - if ( (retvalue=(dbnextrow(mssql_ptr->link)))!=NO_MORE_ROWS ) { - num_fields = dbnumcols(mssql_ptr->link); - if (num_fields <= 0) { - RETURN_TRUE; - } - - result = (mssql_result *) emalloc(sizeof(mssql_result)); - result->batchsize = batchsize; - result->blocks_initialized = 1; - result->data = (zval **) emalloc(sizeof(zval *)*MSSQL_ROWS_BLOCK); - result->mssql_ptr = mssql_ptr; - result->cur_field=result->cur_row=result->num_rows=0; - result->num_fields = num_fields; - - result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*num_fields); - result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC); - result->statement = statement; - } if (skip_results) { do { + dbcanquery(mssql_ptr->link); retval_results = dbresults(mssql_ptr->link); } while (retval_results == SUCCEED); _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC); } + else { + // Skip results not returning any columns + while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && +retval_results == SUCCEED) { + retval_results = dbresults(mssql_ptr->link); + } + if ((num_fields = dbnumcols(mssql_ptr->link)) > 0) { + retvalue = dbnextrow(mssql_ptr->link); + result = (mssql_result *) +emalloc(sizeof(mssql_result)); + result->batchsize = batchsize; + result->blocks_initialized = 1; + result->data = (zval **) emalloc(sizeof(zval +*)*MSSQL_ROWS_BLOCK); + result->mssql_ptr = mssql_ptr; + result->cur_field=result->cur_row=result->num_rows=0; + result->num_fields = num_fields; + + result->fields = (mssql_field *) +emalloc(sizeof(mssql_field)*num_fields); + result->num_rows = _mssql_fetch_batch(mssql_ptr, +result, retvalue TSRMLS_CC); + result->statement = statement; + } + else { + _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC); + } + } } else if (retval_results == NO_MORE_RESULTS || retval_results == NO_MORE_RPC_RESULTS) { - _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC); + _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC); } if (result==NULL) { @@ -2122,6 +2124,7 @@ ZEND_FETCH_RESOURCE(statement, mssql_statement *, mssql_statement_index, -1, "MS SQL-statement", le_statement); /* Release remaining results */ do { + dbcanquery(statement->link->link); retvalue = dbresults(statement->link->link); } while (retvalue == SUCCEED);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php