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;
}
result->last_retcode= retcode;
-
switch (retcode) {
case CS_END_DATA:
retcode = php_sybase_finish_results(result);
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;
}
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Cannot read results");
RETURN_FALSE;
}
-
switch ((int) restype) {
case CS_CMD_FAIL:
default:
RETURN_FALSE;
}
status = Q_RESULT;
+ retcode = result->last_retcode;
} else {
/* Unexpected results, cancel them. */
ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
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. */
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));
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);
}
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);
}
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));
}
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);
}
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));
}