diff options
| author | Hiroshi Inoue | 2014-06-01 09:35:50 +0000 |
|---|---|---|
| committer | Hiroshi Inoue | 2014-06-19 12:17:35 +0000 |
| commit | 78f3af2da199bebac26640d502b124a4d33827cf (patch) | |
| tree | 4f875b46f265d38227067fc07348660a7365f6e9 /statement.c | |
| parent | a5fed2338b59ae16a2d3a8d2744b084949684775 (diff) | |
Clear errors for prepared statement for subsequent exections.
Diffstat (limited to 'statement.c')
| -rw-r--r-- | statement.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/statement.c b/statement.c index a6229f6..78013cc 100644 --- a/statement.c +++ b/statement.c @@ -805,6 +805,27 @@ SC_initialize_and_recycle(StatementClass *self) return SQL_SUCCESS; } +void +SC_reset_result_for_rerun(StatementClass *self) +{ + QResultClass *res; + ColumnInfoClass *flds; + + if (!self) return; + if (res = SC_get_Result(self), NULL == res) + return; + flds = QR_get_fields(res); + if (NULL == flds || + 0 == CI_get_num_fields(flds)) + SC_set_Result(self, NULL); + else + { + QR_reset_for_re_execute(res); + self->curr_param_result = 1; + SC_set_Curres(self, NULL); + } +} + /* * Called from SQLPrepare if STMT_PREMATURE, or * from SQLExecute if STMT_FINISHED, or @@ -880,11 +901,10 @@ inolog("SC_clear_parse_status\n"); { case PREPARED_PERMANENTLY: case PREPARED_TEMPORARILY: - QR_close_result(res, FALSE); + SC_reset_result_for_rerun(self); break; default: - QR_Destructor(res); - SC_init_Result(self); + SC_set_Result(self, NULL); break; } } @@ -2533,7 +2553,8 @@ ReflectColumnsInfo(StatementClass *self, QResultClass *res) if (res->num_fields > 0) return FALSE; pres = SC_get_Result(self); - if (pres != res && + if (pres != NULL && + pres != res && pres->num_fields > 0) { QR_set_fields(res, QR_get_fields(pres)); @@ -2626,6 +2647,8 @@ inolog(" response_length=%d\n", response_length); res->recent_processed_row_count = ret1; } } + else if (QR_command_successful(res)) + QR_set_rstatus(res, PORES_COMMAND_OK); break; case 'E': /* ErrorMessage */ handle_error_message(conn, msgbuffer, sizeof(msgbuffer), res->sqlstate, comment, res); |
