Fix for the failing mysql_stmt_execute() test. Data was cleaned after

stmt_reset() but it should stay and be freed as later as next stmt_execute()
This commit is contained in:
Andrey Hristov 2009-05-29 12:19:26 +00:00
parent 3da36d58dc
commit 37234bb393

View File

@ -588,7 +588,7 @@ MYSQLND_METHOD(mysqlnd_stmt, execute)(MYSQLND_STMT * const stmt TSRMLS_DC)
SET_ERROR_AFF_ROWS(stmt); SET_ERROR_AFF_ROWS(stmt);
SET_ERROR_AFF_ROWS(stmt->conn); SET_ERROR_AFF_ROWS(stmt->conn);
if (stmt->result && stmt->state > MYSQLND_STMT_PREPARED && stmt->field_count) { if (stmt->result && stmt->state >= MYSQLND_STMT_PREPARED && stmt->field_count) {
/* /*
We don need to copy the data from the buffers which we will clean. We don need to copy the data from the buffers which we will clean.
Because it has already been copied. See Because it has already been copied. See
@ -1192,11 +1192,11 @@ MYSQLND_METHOD(mysqlnd_stmt, reset)(MYSQLND_STMT * const stmt TSRMLS_DC)
stmt->result->m.skip_result(stmt->result TSRMLS_CC); stmt->result->m.skip_result(stmt->result TSRMLS_CC);
} }
/* Now the line should be free, if it wasn't */ /*
Don't free now, let the result be usable. When the stmt will again be
DBG_INF("freeing result"); executed then the result set will be cleaned, the bound variables will
/* free_result() doesn't actually free stmt->result but only the buffers */ be separated before that.
stmt->m->free_result(stmt TSRMLS_CC); */
int4store(cmd_buf, stmt->stmt_id); int4store(cmd_buf, stmt->stmt_id);
if (CONN_GET_STATE(conn) == CONN_READY && if (CONN_GET_STATE(conn) == CONN_READY &&