thekid Sun Feb 15 05:55:56 2004 EDT
Modified files: (Branch: PHP_4_3)
/php-src/ext/sybase_ct php_sybase_ct.c
Log:
- Fixed bug #26407 (Result set fetching broken around transactions)
http://cvs.php.net/diff.php/php-src/ext/sybase_ct/php_sybase_ct.c?r1=1.73.2.10&r2=1.73.2.11&ty=u
Index: php-src/ext/sybase_ct/php_sybase_ct.c
diff -u php-src/ext/sybase_ct/php_sybase_ct.c:1.73.2.10
php-src/ext/sybase_ct/php_sybase_ct.c:1.73.2.11
--- php-src/ext/sybase_ct/php_sybase_ct.c:1.73.2.10 Sun Feb 15 05:38:57 2004
+++ php-src/ext/sybase_ct/php_sybase_ct.c Sun Feb 15 05:55:55 2004
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sybase_ct.c,v 1.73.2.10 2004/02/15 10:38:57 thekid Exp $ */
+/* $Id: php_sybase_ct.c,v 1.73.2.11 2004/02/15 10:55:55 thekid Exp $ */
#ifdef HAVE_CONFIG_H
@@ -1091,8 +1091,8 @@
CS_INT retcode;
/* We've already fetched everything */
- if (result->last_retcode == CS_END_DATA) {
- return CS_END_DATA;
+ if (result->last_retcode == CS_END_DATA || result->last_retcode ==
CS_END_RESULTS) {
+ return result->last_retcode;
}
if (numrows!=-1) numrows+= result->num_rows;
@@ -1143,7 +1143,6 @@
}
result->last_retcode= retcode;
-
switch (retcode) {
case CS_END_DATA:
retcode = php_sybase_finish_results(result);
@@ -1278,12 +1277,13 @@
result->fields[i].numeric = result->numerics[i];
Z_TYPE(result->fields[i]) = result->types[i];
}
-
+
retcode= php_sybase_fetch_result_row(result, buffered ? 1 : -1);
if (retcode == CS_FAIL) {
return NULL;
}
+ result->last_retcode = retcode;
return result;
}
@@ -1412,7 +1412,6 @@
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cannot
read results");
RETURN_FALSE;
}
-
switch ((int) restype) {
case CS_CMD_FAIL:
default:
@@ -1450,6 +1449,7 @@
/* Check for left-over results */
if (!buffered && status != Q_RESULT) {
while ((retcode = ct_results(sybase_ptr->cmd,
&restype))==CS_SUCCEED) {
+
switch ((int) restype) {
case CS_CMD_SUCCEED:
case CS_CMD_DONE:
@@ -1471,6 +1471,7 @@
RETURN_FALSE;
}
status = Q_RESULT;
+ retcode =
result->last_retcode;
} else {
/* Unexpected results, cancel
them. */
ct_cancel(NULL,
sybase_ptr->cmd, CS_CANCEL_CURRENT);
@@ -1488,8 +1489,10 @@
if (status == Q_FAILURE) {
ct_cancel(NULL, sybase_ptr->cmd,
CS_CANCEL_ALL);
}
+ if (retcode == CS_END_RESULTS) {
+ break;
+ }
}
-
switch (retcode) {
case CS_END_RESULTS:
/* Normal. */
@@ -1513,7 +1516,7 @@
break;
}
}
-
+
/* Retry deadlocks up until deadlock_retry_count times */
if (sybase_ptr->deadlock && SybCtG(deadlock_retry_count) != -1 &&
++deadlock_count > SybCtG(deadlock_retry_count)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Retried
deadlock %d times [max: %ld], giving up\n", deadlock_count- 1,
SybCtG(deadlock_retry_count));
@@ -1667,7 +1670,7 @@
ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase
result", le_result);
/* Unbuffered? */
- if (result->last_retcode != CS_END_DATA) {
+ if (result->last_retcode != CS_END_DATA && result->last_retcode !=
CS_END_RESULTS) {
php_sybase_fetch_result_row(result, 1);
}
@@ -1704,7 +1707,7 @@
ZEND_FETCH_RESOURCE(result, sybase_result *, sybase_result_index, -1, "Sybase
result", le_result);
/* Unbuffered ? Fetch next row */
- if (result->last_retcode != CS_END_DATA) {
+ if (result->last_retcode != CS_END_DATA && result->last_retcode !=
CS_END_RESULTS) {
php_sybase_fetch_result_row(result, 1);
}
@@ -1817,7 +1820,7 @@
convert_to_long_ex(offset);
/* Unbuffered ? */
- if (result->last_retcode != CS_END_DATA &&
Z_LVAL_PP(offset)>=result->num_rows) {
+ if (result->last_retcode != CS_END_DATA && result->last_retcode !=
CS_END_RESULTS && Z_LVAL_PP(offset)>=result->num_rows) {
php_sybase_fetch_result_row(result, Z_LVAL_PP(offset));
}
@@ -1945,7 +1948,7 @@
field_offset = Z_LVAL_PP(offset);
/* Unbuffered ? */
- if (result->last_retcode != CS_END_DATA && field_offset>=result->num_rows) {
+ if (result->last_retcode != CS_END_DATA && result->last_retcode !=
CS_END_RESULTS && field_offset>=result->num_rows) {
php_sybase_fetch_result_row(result, field_offset);
}
@@ -1978,7 +1981,7 @@
convert_to_long_ex(row);
/* Unbuffered ? */
- if (result->last_retcode != CS_END_DATA && Z_LVAL_PP(row) >= result->num_rows)
{
+ if (result->last_retcode != CS_END_DATA && result->last_retcode !=
CS_END_RESULTS && Z_LVAL_PP(row) >= result->num_rows) {
php_sybase_fetch_result_row(result, Z_LVAL_PP(row));
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php