diff options
| author | Andrey Hristov <andrey@php.net> | 2015-10-30 16:05:55 +0100 |
|---|---|---|
| committer | Andrey Hristov <andrey@php.net> | 2015-11-12 16:19:16 +0100 |
| commit | aa4966d4e37076ed560ba0a10f0758863d8af389 (patch) | |
| tree | 8e63da50d63f80148768989f50c66517d91b23b3 /ext/mysqlnd/mysqlnd_wireprotocol.c | |
| parent | f7a445856dc6abcf7bca13377ea94ab474681874 (diff) | |
| download | php-git-aa4966d4e37076ed560ba0a10f0758863d8af389.tar.gz | |
MNDR:
- now send_command_handle_response() also doesn't depend directly on
MYSQLND_CONN_DATA
Diffstat (limited to 'ext/mysqlnd/mysqlnd_wireprotocol.c')
| -rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 477 |
1 files changed, 297 insertions, 180 deletions
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index cf46e8c84b..21508614ed 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -1060,13 +1060,13 @@ size_t php_mysqlnd_cmd_write(void * _packet) net->data->m.consume_uneaten_data(net, packet->command); #endif - if (!packet->argument || !packet->arg_len) { + if (!packet->argument.s || !packet->argument.l) { zend_uchar buffer[MYSQLND_HEADER_SIZE + 1]; int1store(buffer + MYSQLND_HEADER_SIZE, packet->command); sent = net->data->m.send_ex(net, buffer, 1, conn->stats, conn->error_info); } else { - size_t tmp_len = packet->arg_len + 1 + MYSQLND_HEADER_SIZE; + size_t tmp_len = packet->argument.l + 1 + MYSQLND_HEADER_SIZE; zend_uchar *tmp, *p; tmp = (tmp_len > net->cmd_buffer.length)? mnd_emalloc(tmp_len):net->cmd_buffer.buffer; if (!tmp) { @@ -1077,7 +1077,7 @@ size_t php_mysqlnd_cmd_write(void * _packet) int1store(p, packet->command); p++; - memcpy(p, packet->argument, packet->arg_len); + memcpy(p, packet->argument.s, packet->argument.l); sent = net->data->m.send_ex(net, tmp, tmp_len - MYSQLND_HEADER_SIZE, conn->stats, conn->error_info); if (tmp != net->cmd_buffer.buffer) { @@ -1161,11 +1161,11 @@ php_mysqlnd_rset_header_read(void * _packet) would lead to 0 byte allocation but 2^32 or 2^64 bytes copied. */ len = packet->header.size - 1; - packet->info_or_local_file = mnd_emalloc(len + 1); - if (packet->info_or_local_file) { - memcpy(packet->info_or_local_file, p, len); - packet->info_or_local_file[len] = '\0'; - packet->info_or_local_file_len = len; + packet->info_or_local_file.s = mnd_emalloc(len + 1); + if (packet->info_or_local_file.s) { + memcpy(packet->info_or_local_file.s, p, len); + packet->info_or_local_file.s[len] = '\0'; + packet->info_or_local_file.l = len; } else { SET_OOM_ERROR(conn->error_info); ret = FAIL; @@ -1188,11 +1188,11 @@ php_mysqlnd_rset_header_read(void * _packet) BAIL_IF_NO_MORE_DATA; /* Check for additional textual data */ if (packet->header.size > (size_t) (p - buf) && (len = php_mysqlnd_net_field_length(&p))) { - packet->info_or_local_file = mnd_emalloc(len + 1); - if (packet->info_or_local_file) { - memcpy(packet->info_or_local_file, p, len); - packet->info_or_local_file[len] = '\0'; - packet->info_or_local_file_len = len; + packet->info_or_local_file.s = mnd_emalloc(len + 1); + if (packet->info_or_local_file.s) { + memcpy(packet->info_or_local_file.s, p, len); + packet->info_or_local_file.s[len] = '\0'; + packet->info_or_local_file.l = len; } else { SET_OOM_ERROR(conn->error_info); ret = FAIL; @@ -1225,9 +1225,9 @@ void php_mysqlnd_rset_header_free_mem(void * _packet, zend_bool stack_allocation { MYSQLND_PACKET_RSET_HEADER *p= (MYSQLND_PACKET_RSET_HEADER *) _packet; DBG_ENTER("php_mysqlnd_rset_header_free_mem"); - if (p->info_or_local_file) { - mnd_efree(p->info_or_local_file); - p->info_or_local_file = NULL; + if (p->info_or_local_file.s) { + mnd_efree(p->info_or_local_file.s); + p->info_or_local_file.s = NULL; } if (!stack_allocation) { mnd_pefree(p, p->header.persistent); @@ -1961,10 +1961,10 @@ php_mysqlnd_stats_read(void * _packet) DBG_RETURN(FAIL); } - packet->message = mnd_emalloc(packet->header.size + 1); - memcpy(packet->message, buf, packet->header.size); - packet->message[packet->header.size] = '\0'; - packet->message_len = packet->header.size; + packet->message.s = mnd_emalloc(packet->header.size + 1); + memcpy(packet->message.s, buf, packet->header.size); + packet->message.s[packet->header.size] = '\0'; + packet->message.l = packet->header.size; DBG_RETURN(PASS); } @@ -1976,9 +1976,9 @@ static void php_mysqlnd_stats_free_mem(void * _packet, zend_bool stack_allocation) { MYSQLND_PACKET_STATS *p= (MYSQLND_PACKET_STATS *) _packet; - if (p->message) { - mnd_efree(p->message); - p->message = NULL; + if (p->message.s) { + mnd_efree(p->message.s); + p->message.s = NULL; } if (!stack_allocation) { mnd_pefree(p, p->header.persistent); @@ -2660,9 +2660,9 @@ mysqlnd_protocol_payload_decoder_factory_free(MYSQLND_PROTOCOL_PAYLOAD_DECODER_F -/* {{{ send_command_do_request */ +/* {{{ send_command */ static enum_func_status -send_command_do_request( +send_command( const enum php_mysqlnd_server_command command, const zend_uchar * const arg, const size_t arg_len, const zend_bool silent, @@ -2678,7 +2678,7 @@ send_command_do_request( { enum_func_status ret = PASS; MYSQLND_PACKET_COMMAND * cmd_packet = NULL; - DBG_ENTER("send_command_do_request"); + DBG_ENTER("send_command"); DBG_INF_FMT("command=%s silent=%u", mysqlnd_command_to_text[command], silent); DBG_INF_FMT("server_status=%u", upsert_status->server_status); DBG_INF_FMT("sending %u bytes", arg_len + 1); /* + 1 is for the command */ @@ -2708,8 +2708,8 @@ send_command_do_request( cmd_packet->command = command; if (arg && arg_len) { - cmd_packet->argument = arg; - cmd_packet->arg_len = arg_len; + cmd_packet->argument.s = arg; + cmd_packet->argument.l = arg_len; } MYSQLND_INC_CONN_STATISTIC(stats, STAT_COM_QUIT + command - 1 /* because of COM_SLEEP */ ); @@ -2730,6 +2730,113 @@ send_command_do_request( /* }}} */ +/* {{{ send_command_handle_response */ +enum_func_status +send_command_handle_response( + const enum mysqlnd_packet_type ok_packet, + const zend_bool silent, + const enum php_mysqlnd_server_command command, + const zend_bool ignore_upsert_status, + + MYSQLND_ERROR_INFO * error_info, + MYSQLND_UPSERT_STATUS * upsert_status, + MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory, + MYSQLND_STRING * last_message, + zend_bool last_message_persistent + ) +{ + enum_func_status ret = FAIL; + + DBG_ENTER("send_command_handle_response"); + DBG_INF_FMT("silent=%u packet=%u command=%s", silent, ok_packet, mysqlnd_command_to_text[command]); + + switch (ok_packet) { + case PROT_OK_PACKET:{ + MYSQLND_PACKET_OK * ok_response = payload_decoder_factory->m.get_ok_packet(payload_decoder_factory, FALSE); + if (!ok_response) { + SET_OOM_ERROR(error_info); + break; + } + if (FAIL == (ret = PACKET_READ(ok_response))) { + if (!silent) { + DBG_ERR_FMT("Error while reading %s's OK packet", mysqlnd_command_to_text[command]); + php_error_docref(NULL, E_WARNING, "Error while reading %s's OK packet. PID=%u", + mysqlnd_command_to_text[command], getpid()); + } + } else { + DBG_INF_FMT("OK from server"); + if (0xFF == ok_response->field_count) { + /* The server signalled error. Set the error */ + SET_CLIENT_ERROR(error_info, ok_response->error_no, ok_response->sqlstate, ok_response->error); + ret = FAIL; + /* + Cover a protocol design error: error packet does not + contain the server status. Therefore, the client has no way + to find out whether there are more result sets of + a multiple-result-set statement pending. Luckily, in 5.0 an + error always aborts execution of a statement, wherever it is + a multi-statement or a stored procedure, so it should be + safe to unconditionally turn off the flag here. + */ + upsert_status->server_status &= ~SERVER_MORE_RESULTS_EXISTS; + UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR(upsert_status); + } else { + SET_NEW_MESSAGE(last_message->s, last_message->l, + ok_response->message, ok_response->message_len, + last_message_persistent); + + if (!ignore_upsert_status) { + UPSERT_STATUS_RESET(upsert_status); + upsert_status->warning_count = ok_response->warning_count; + upsert_status->server_status = ok_response->server_status; + upsert_status->affected_rows = ok_response->affected_rows; + upsert_status->last_insert_id = ok_response->last_insert_id; + } + } + } + PACKET_FREE(ok_response); + break; + } + case PROT_EOF_PACKET:{ + MYSQLND_PACKET_EOF * ok_response = payload_decoder_factory->m.get_eof_packet(payload_decoder_factory, FALSE); + if (!ok_response) { + SET_OOM_ERROR(error_info); + break; + } + if (FAIL == (ret = PACKET_READ(ok_response))) { + SET_CLIENT_ERROR(error_info, CR_MALFORMED_PACKET, UNKNOWN_SQLSTATE, + "Malformed packet"); + if (!silent) { + DBG_ERR_FMT("Error while reading %s's EOF packet", mysqlnd_command_to_text[command]); + php_error_docref(NULL, E_WARNING, "Error while reading %s's EOF packet. PID=%d", + mysqlnd_command_to_text[command], getpid()); + } + } else if (0xFF == ok_response->field_count) { + /* The server signalled error. Set the error */ + SET_CLIENT_ERROR(error_info, ok_response->error_no, ok_response->sqlstate, ok_response->error); + UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR(upsert_status); + } else if (0xFE != ok_response->field_count) { + SET_CLIENT_ERROR(error_info, CR_MALFORMED_PACKET, UNKNOWN_SQLSTATE, "Malformed packet"); + if (!silent) { + DBG_ERR_FMT("EOF packet expected, field count wasn't 0xFE but 0x%2X", ok_response->field_count); + php_error_docref(NULL, E_WARNING, "EOF packet expected, field count wasn't 0xFE but 0x%2X", + ok_response->field_count); + } + } else { + DBG_INF_FMT("OK from server"); + } + PACKET_FREE(ok_response); + break; + } + default: + SET_CLIENT_ERROR(error_info, CR_MALFORMED_PACKET, UNKNOWN_SQLSTATE, "Malformed packet"); + php_error_docref(NULL, E_ERROR, "Wrong response packet %u passed to the function", ok_packet); + break; + } + DBG_INF(ret == PASS ? "PASS":"FAIL"); + DBG_RETURN(ret); +} +/* }}} */ @@ -2778,18 +2885,18 @@ mysqlnd_com_set_option_run(void *cmd) DBG_ENTER("mysqlnd_com_set_option_run"); int2store(buffer, (unsigned int) option); - ret = send_command_do_request(COM_SET_OPTION, buffer, sizeof(buffer), FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_SET_OPTION, buffer, sizeof(buffer), FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { - ret = conn->m->send_command_handle_response(conn, PROT_EOF_PACKET, FALSE, COM_SET_OPTION, TRUE); + ret = send_command_handle_response(PROT_EOF_PACKET, FALSE, COM_SET_OPTION, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } - DBG_RETURN(ret); } /* }}} */ @@ -2826,16 +2933,17 @@ mysqlnd_com_debug_run(void *cmd) DBG_ENTER("mysqlnd_com_debug_run"); - ret = send_command_do_request(COM_DEBUG, NULL, 0, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_DEBUG, NULL, 0, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { - ret = conn->m->send_command_handle_response(conn, PROT_EOF_PACKET, COM_DEBUG, COM_DEBUG, TRUE); + ret = send_command_handle_response(PROT_EOF_PACKET, COM_DEBUG, COM_DEBUG, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } DBG_RETURN(ret); @@ -2884,16 +2992,17 @@ mysqlnd_com_init_db_run(void *cmd) DBG_ENTER("mysqlnd_com_init_db_run"); - ret = send_command_do_request(COM_INIT_DB, (zend_uchar*) command->context.db.s, command->context.db.l, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_INIT_DB, (zend_uchar*) command->context.db.s, command->context.db.l, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { - ret = conn->m->send_command_handle_response(conn, PROT_OK_PACKET, FALSE, COM_INIT_DB, TRUE); + ret = send_command_handle_response(PROT_OK_PACKET, FALSE, COM_INIT_DB, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } DBG_RETURN(ret); @@ -2932,16 +3041,17 @@ mysqlnd_com_ping_run(void *cmd) DBG_ENTER("mysqlnd_com_ping_run"); - ret = send_command_do_request(COM_PING, NULL, 0, TRUE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_PING, NULL, 0, TRUE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { - ret = conn->m->send_command_handle_response(conn, PROT_OK_PACKET, TRUE, COM_PING, TRUE); + ret = send_command_handle_response(PROT_OK_PACKET, TRUE, COM_PING, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } DBG_RETURN(ret); @@ -3006,14 +3116,14 @@ mysqlnd_com_field_list_run(void *cmd) *p++ = '\0'; } - ret = send_command_do_request(COM_FIELD_LIST, buff, p - buff, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_FIELD_LIST, buff, p - buff, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3052,14 +3162,14 @@ mysqlnd_com_statistics_run(void *cmd) DBG_ENTER("mysqlnd_com_statistics_run"); - ret = send_command_do_request(COM_STATISTICS, NULL, 0, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STATISTICS, NULL, 0, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3109,16 +3219,17 @@ mysqlnd_com_process_kill_run(void *cmd) DBG_ENTER("mysqlnd_com_process_kill_run"); int4store(buff, command->context.process_id); - ret = send_command_do_request(COM_PROCESS_KILL, buff, 4, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_PROCESS_KILL, buff, 4, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret && command->context.read_response) { - ret = conn->m->send_command_handle_response(conn, PROT_OK_PACKET, FALSE, COM_PROCESS_KILL, TRUE); + ret = send_command_handle_response(PROT_OK_PACKET, FALSE, COM_PROCESS_KILL, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } DBG_RETURN(ret); @@ -3170,16 +3281,17 @@ mysqlnd_com_refresh_run(void *cmd) DBG_ENTER("mysqlnd_com_refresh_run"); int1store(bits, command->context.options); - ret = send_command_do_request(COM_REFRESH, bits, 1, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_REFRESH, bits, 1, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { - ret = conn->m->send_command_handle_response(conn, PROT_OK_PACKET, FALSE, COM_REFRESH, TRUE); + ret = send_command_handle_response(PROT_OK_PACKET, FALSE, COM_REFRESH, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } DBG_RETURN(ret); @@ -3231,16 +3343,17 @@ mysqlnd_com_shutdown_run(void *cmd) DBG_ENTER("mysqlnd_com_shutdown_run"); int1store(bits, command->context.level); - ret = send_command_do_request(COM_SHUTDOWN, bits, 1, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_SHUTDOWN, bits, 1, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { - ret = conn->m->send_command_handle_response(conn, PROT_OK_PACKET, FALSE, COM_SHUTDOWN, TRUE); + ret = send_command_handle_response(PROT_OK_PACKET, FALSE, COM_SHUTDOWN, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); } DBG_RETURN(ret); @@ -3289,14 +3402,14 @@ mysqlnd_com_quit_run(void *cmd) DBG_ENTER("mysqlnd_com_quit_run"); - ret = send_command_do_request(COM_QUIT, NULL, 0, TRUE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_QUIT, NULL, 0, TRUE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3343,14 +3456,14 @@ mysqlnd_com_query_run(void *cmd) DBG_ENTER("mysqlnd_com_query_run"); - ret = send_command_do_request(COM_QUERY, (zend_uchar*) command->context.query.s, command->context.query.l, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_QUERY, (zend_uchar*) command->context.query.s, command->context.query.l, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); if (PASS == ret) { SET_CONNECTION_STATE(&conn->state, CONN_QUERY_SENT); @@ -3403,14 +3516,14 @@ mysqlnd_com_change_user_run(void *cmd) DBG_ENTER("mysqlnd_com_change_user_run"); - ret = send_command_do_request(COM_CHANGE_USER, (zend_uchar*) command->context.payload.s, command->context.payload.l, command->context.silent, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_CHANGE_USER, (zend_uchar*) command->context.payload.s, command->context.payload.l, command->context.silent, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3512,14 +3625,14 @@ mysqlnd_com_stmt_prepare_run(void *cmd) DBG_ENTER("mysqlnd_com_stmt_prepare_run"); - ret = send_command_do_request(COM_STMT_PREPARE, (zend_uchar*) command->context.query.s, command->context.query.l, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STMT_PREPARE, (zend_uchar*) command->context.query.s, command->context.query.l, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3568,14 +3681,14 @@ mysqlnd_com_stmt_execute_run(void *cmd) DBG_ENTER("mysqlnd_com_stmt_execute_run"); - ret = send_command_do_request(COM_STMT_EXECUTE, (zend_uchar*) command->context.payload.s, command->context.payload.l, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STMT_EXECUTE, (zend_uchar*) command->context.payload.s, command->context.payload.l, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3624,14 +3737,14 @@ mysqlnd_com_stmt_fetch_run(void *cmd) DBG_ENTER("mysqlnd_com_stmt_fetch_run"); - ret = send_command_do_request(COM_STMT_FETCH, (zend_uchar*) command->context.payload.s, command->context.payload.l, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STMT_FETCH, (zend_uchar*) command->context.payload.s, command->context.payload.l, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3682,14 +3795,18 @@ mysqlnd_com_stmt_reset_run(void *cmd) DBG_ENTER("mysqlnd_com_stmt_reset_run"); int4store(cmd_buf, command->context.stmt_id); - ret = send_command_do_request(COM_STMT_RESET, cmd_buf, sizeof(cmd_buf), FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STMT_RESET, cmd_buf, sizeof(cmd_buf), FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); + if (PASS == ret) { + ret = send_command_handle_response(PROT_OK_PACKET, FALSE, COM_STMT_RESET, TRUE, + conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent); + } DBG_RETURN(ret); } @@ -3738,14 +3855,14 @@ mysqlnd_com_stmt_send_long_data_run(void *cmd) DBG_ENTER("mysqlnd_com_stmt_send_long_data_run"); - ret = send_command_do_request(COM_STMT_SEND_LONG_DATA, (zend_uchar*) command->context.payload.s, command->context.payload.l, FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STMT_SEND_LONG_DATA, (zend_uchar*) command->context.payload.s, command->context.payload.l, FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } @@ -3796,14 +3913,14 @@ mysqlnd_com_stmt_close_run(void *cmd) DBG_ENTER("mysqlnd_com_stmt_close_run"); int4store(cmd_buf, command->context.stmt_id); - ret = send_command_do_request(COM_STMT_CLOSE, cmd_buf, sizeof(cmd_buf), FALSE, - &conn->state, - conn->error_info, - conn->upsert_status, - conn->stats, - conn->payload_decoder_factory, - conn->m->send_close, - conn); + ret = send_command(COM_STMT_CLOSE, cmd_buf, sizeof(cmd_buf), FALSE, + &conn->state, + conn->error_info, + conn->upsert_status, + conn->stats, + conn->payload_decoder_factory, + conn->m->send_close, + conn); DBG_RETURN(ret); } |
