fmk Mon Nov 17 15:56:54 2003 EDT Modified files: /php-src/ext/mssql php_mssql.c Log: MFB: Fix for bug #25817 Check for a return value from a stored procedure right after fetching rows Replace code with some Z_ macros Index: php-src/ext/mssql/php_mssql.c diff -u php-src/ext/mssql/php_mssql.c:1.124 php-src/ext/mssql/php_mssql.c:1.125 --- php-src/ext/mssql/php_mssql.c:1.124 Tue Oct 14 23:31:29 2003 +++ php-src/ext/mssql/php_mssql.c Mon Nov 17 15:56:53 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_mssql.c,v 1.124 2003/10/15 03:31:29 iliaa Exp $ */ +/* $Id: php_mssql.c,v 1.125 2003/11/17 20:56:53 fmk Exp $ */ #ifdef COMPILE_DL_MSSQL #define HAVE_MSSQL 1 @@ -775,8 +775,7 @@ case SQLINT2: case SQLINT4: case SQLINTN: { - Z_LVAL_P(result) = (long) anyintcol(offset); - Z_TYPE_P(result) = IS_LONG; + ZVAL_LONG(result, (long) anyintcol(offset)); break; } case SQLCHAR: @@ -791,18 +790,14 @@ length--; } #endif - Z_STRVAL_P(result) = estrndup(data,length); - Z_STRLEN_P(result) = length; - Z_TYPE_P(result) = IS_STRING; + ZVAL_STRINGL(result, data, length, 1); break; } case SQLFLT4: - Z_DVAL_P(result) = (double) floatcol4(offset); - Z_TYPE_P(result) = IS_DOUBLE; + ZVAL_DOUBLE(result, (double) floatcol4(offset)); break; case SQLFLT8: - Z_DVAL_P(result) = (double) floatcol8(offset); - Z_TYPE_P(result) = IS_DOUBLE; + ZVAL_DOUBLE(result, (double) floatcol8(offset)); break; #ifdef SQLUNIQUE case SQLUNIQUE: { @@ -824,9 +819,7 @@ bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset)); memcpy(res_buf,bin,res_length); res_buf[res_length] = '\0'; - Z_STRLEN_P(result) = res_length; - Z_STRVAL_P(result) = res_buf; - Z_TYPE_P(result) = IS_STRING; + ZVAL_STRINGL(result, res_buf, res_length, 0); } break; case SQLNUMERIC: @@ -858,9 +851,7 @@ sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second); } - Z_STRVAL_P(result) = res_buf; - Z_STRLEN_P(result) = res_length; - Z_TYPE_P(result) = IS_STRING; + ZVAL_STRINGL(result, res_buf, res_length, 0); } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d has unknown data type (%d)", offset, coltype(offset)); ZVAL_FALSE(result); @@ -887,9 +878,7 @@ bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset)); memcpy(res_buf, bin, res_length); res_buf[res_length] = '\0'; - Z_STRLEN_P(result) = res_length; - Z_STRVAL_P(result) = res_buf; - Z_TYPE_P(result) = IS_STRING; + ZVAL_STRINGL(result, res_buf, res_length, 0); } else if (dbwillconvert(coltype(offset),SQLCHAR)) { unsigned char *res_buf; @@ -919,9 +908,7 @@ sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute, dateinfo.second); } - Z_STRVAL_P(result) = res_buf; - Z_STRLEN_P(result) = res_length; - Z_TYPE_P(result) = IS_STRING; + ZVAL_STRINGL(result, res_buf, res_length, 0); } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d has unknown data type (%d)", offset, coltype(offset)); ZVAL_FALSE(result); @@ -1063,6 +1050,9 @@ result->lastresult = retvalue; } efree(column_types); + if (result->statement) { + _mssql_get_sp_result(mssql_ptr, result->statement TSRMLS_CC); + } return i; } @@ -1632,9 +1622,7 @@ RETURN_FALSE; } - Z_STRVAL_P(return_value) = estrdup(result->fields[field_offset].name); - Z_STRLEN_P(return_value) = strlen(result->fields[field_offset].name); - Z_TYPE_P(return_value) = IS_STRING; + RETURN_STRINGL(result->fields[field_offset].name, strlen(result->fields[field_offset].name), 1); } /* }}} */ @@ -1680,9 +1668,7 @@ RETURN_FALSE; } - Z_STRVAL_P(return_value) = estrdup(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))); - Z_STRLEN_P(return_value) = strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))); - Z_TYPE_P(return_value) = IS_STRING; + RETURN_STRINGL(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])), strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))), 1); } /* }}} */ @@ -1787,9 +1773,6 @@ RETURN_FALSE; } else if (retvalue == NO_MORE_RESULTS || retvalue == NO_MORE_RPC_RESULTS) { - if (result->statement) { - _mssql_get_sp_result(result->mssql_ptr, result->statement TSRMLS_CC); - } RETURN_FALSE; } else { @@ -2112,11 +2095,8 @@ result->num_fields = num_fields; result->fields = (mssql_field *) safe_emalloc(sizeof(mssql_field), num_fields, 0); - 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); + result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC); } } }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php