Skip to content

Commit aa4966d

Browse files
committed
MNDR:
- now send_command_handle_response() also doesn't depend directly on MYSQLND_CONN_DATA
1 parent f7a4458 commit aa4966d

9 files changed

+354
-229
lines changed

ext/mysqlnd/mysqlnd.c

+11-11
Original file line numberDiff line numberDiff line change
@@ -309,9 +309,9 @@ MYSQLND_METHOD(mysqlnd_conn_data, free_contents)(MYSQLND_CONN_DATA * conn)
309309
mnd_pefree(conn->auth_plugin_data, pers);
310310
conn->auth_plugin_data = NULL;
311311
}
312-
if (conn->last_message) {
313-
mnd_pefree(conn->last_message, pers);
314-
conn->last_message = NULL;
312+
if (conn->last_message.s) {
313+
mnd_pefree(conn->last_message.s, pers);
314+
conn->last_message.s = NULL;
315315
}
316316
if (conn->error_info->error_list) {
317317
zend_llist_clean(conn->error_info->error_list);
@@ -356,7 +356,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn_data, dtor)(MYSQLND_CONN_DATA * conn)
356356
}
357357
/* }}} */
358358

359-
359+
#if 0
360360
/* {{{ mysqlnd_conn_data::send_command_handle_response */
361361
static enum_func_status
362362
MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response)(
@@ -458,7 +458,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response)(
458458
DBG_RETURN(ret);
459459
}
460460
/* }}} */
461-
461+
#endif
462462

463463
/* {{{ mysqlnd_conn_data::set_server_option */
464464
static enum_func_status
@@ -488,9 +488,9 @@ MYSQLND_METHOD(mysqlnd_conn_data, restart_psession)(MYSQLND_CONN_DATA * conn)
488488
DBG_ENTER("mysqlnd_conn_data::restart_psession");
489489
MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_CONNECT_REUSED);
490490
/* Free here what should not be seen by the next script */
491-
if (conn->last_message) {
492-
mnd_pefree(conn->last_message, conn->persistent);
493-
conn->last_message = NULL;
491+
if (conn->last_message.s) {
492+
mnd_pefree(conn->last_message.s, conn->persistent);
493+
conn->last_message.s = NULL;
494494
}
495495
DBG_RETURN(PASS);
496496
}
@@ -1791,7 +1791,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, statistic)(MYSQLND_CONN_DATA * conn, zend_stri
17911791

17921792
if (PASS == (ret = PACKET_READ(stats_header))) {
17931793
/* will be freed by Zend, thus don't use the mnd_ allocator */
1794-
*message = zend_string_init(stats_header->message, stats_header->message_len, 0);
1794+
*message = zend_string_init(stats_header->message.s, stats_header->message.l, 0);
17951795
DBG_INF(ZSTR_VAL(*message));
17961796
}
17971797
PACKET_FREE(stats_header);
@@ -2075,7 +2075,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, warning_count)(const MYSQLND_CONN_DATA * const
20752075
static const char *
20762076
MYSQLND_METHOD(mysqlnd_conn_data, info)(const MYSQLND_CONN_DATA * const conn)
20772077
{
2078-
return conn->last_message;
2078+
return conn->last_message.s;
20792079
}
20802080
/* }}} */
20812081

@@ -3054,7 +3054,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_conn_data)
30543054
MYSQLND_METHOD_PRIVATE(mysqlnd_conn_data, get_reference),
30553055
MYSQLND_METHOD_PRIVATE(mysqlnd_conn_data, free_reference),
30563056

3057-
MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response),
3057+
// MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response),
30583058
MYSQLND_METHOD(mysqlnd_conn_data, restart_psession),
30593059
MYSQLND_METHOD(mysqlnd_conn_data, end_psession),
30603060
MYSQLND_METHOD(mysqlnd_conn_data, send_close),

ext/mysqlnd/mysqlnd_auth.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn,
139139
goto end;
140140
}
141141

142-
SET_NEW_MESSAGE(conn->last_message, conn->last_message_len, auth_resp_packet->message, auth_resp_packet->message_len, conn->persistent);
142+
SET_NEW_MESSAGE(conn->last_message.s, conn->last_message.l, auth_resp_packet->message, auth_resp_packet->message_len, conn->persistent);
143143
ret = PASS;
144144
end:
145145
PACKET_FREE(change_auth_resp_packet);
@@ -285,9 +285,9 @@ mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
285285
}
286286
conn->passwd = tmp;
287287

288-
if (conn->last_message) {
289-
mnd_pefree(conn->last_message, conn->persistent);
290-
conn->last_message = NULL;
288+
if (conn->last_message.s) {
289+
mnd_pefree(conn->last_message.s, conn->persistent);
290+
conn->last_message.s = NULL;
291291
}
292292
UPSERT_STATUS_RESET(conn->upsert_status);
293293
/* set charset for old servers */

ext/mysqlnd/mysqlnd_loaddata.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static const char *lost_conn = "Lost connection to MySQL server during LOAD DATA
141141

142142
/* {{{ mysqlnd_handle_local_infile */
143143
enum_func_status
144-
mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * filename, zend_bool * is_warning)
144+
mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * const filename, zend_bool * is_warning)
145145
{
146146
zend_uchar *buf = NULL;
147147
zend_uchar empty_packet[MYSQLND_HEADER_SIZE];
@@ -212,7 +212,8 @@ mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * filename, zen
212212

213213
infile_error:
214214
/* get response from server and update upsert values */
215-
if (FAIL == conn->m->send_command_handle_response(conn, PROT_OK_PACKET, FALSE, COM_QUERY, FALSE)) {
215+
if (FAIL == send_command_handle_response(PROT_OK_PACKET, FALSE, COM_QUERY, FALSE,
216+
conn->error_info, conn->upsert_status, conn->payload_decoder_factory, &conn->last_message, conn->persistent)) {
216217
result = FAIL;
217218
}
218219

ext/mysqlnd/mysqlnd_priv.h

+15-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_net);
149149
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_upsert_status);
150150
PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_error_info);
151151

152-
enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * filename, zend_bool * is_warning);
152+
enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * const filename, zend_bool * is_warning);
153153

154154

155155

@@ -209,6 +209,20 @@ mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
209209

210210
extern func_mysqlnd__command_factory mysqlnd_command_factory;
211211

212+
213+
enum_func_status
214+
send_command_handle_response(
215+
const enum mysqlnd_packet_type ok_packet,
216+
const zend_bool silent,
217+
const enum php_mysqlnd_server_command command,
218+
const zend_bool ignore_upsert_status,
219+
220+
MYSQLND_ERROR_INFO * error_info,
221+
MYSQLND_UPSERT_STATUS * upsert_status,
222+
MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory,
223+
MYSQLND_STRING * last_message,
224+
zend_bool last_message_persistent
225+
);
212226
#endif /* MYSQLND_PRIV_H */
213227

214228

ext/mysqlnd/mysqlnd_ps.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -1302,9 +1302,7 @@ MYSQLND_METHOD(mysqlnd_stmt, reset)(MYSQLND_STMT * const s)
13021302
ret = command->run(command);
13031303
command->free_command(command);
13041304

1305-
if (ret == PASS) {
1306-
ret = conn->m->send_command_handle_response(conn, PROT_OK_PACKET, FALSE, COM_STMT_RESET, TRUE);
1307-
} else {
1305+
if (ret == FAIL) {
13081306
COPY_CLIENT_ERROR(stmt->error_info, *conn->error_info);
13091307
}
13101308
}

ext/mysqlnd/mysqlnd_result.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s)
456456
conn->last_query_type = QUERY_LOAD_LOCAL;
457457
conn->field_count = 0; /* overwrite previous value, or the last value could be used and lead to bug#53503 */
458458
SET_CONNECTION_STATE(&conn->state, CONN_SENDING_LOAD_DATA);
459-
ret = mysqlnd_handle_local_infile(conn, rset_header->info_or_local_file, &is_warning);
459+
ret = mysqlnd_handle_local_infile(conn, rset_header->info_or_local_file.s, &is_warning);
460460
SET_CONNECTION_STATE(&conn->state, (ret == PASS || is_warning == TRUE)? CONN_READY:CONN_QUIT_SENT);
461461
MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_NON_RSET_QUERY);
462462
break;
@@ -470,8 +470,8 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s)
470470
conn->upsert_status->server_status = rset_header->server_status;
471471
conn->upsert_status->affected_rows = rset_header->affected_rows;
472472
conn->upsert_status->last_insert_id = rset_header->last_insert_id;
473-
SET_NEW_MESSAGE(conn->last_message, conn->last_message_len,
474-
rset_header->info_or_local_file, rset_header->info_or_local_file_len,
473+
SET_NEW_MESSAGE(conn->last_message.s, conn->last_message.l,
474+
rset_header->info_or_local_file.s, rset_header->info_or_local_file.l,
475475
conn->persistent);
476476
/* Result set can follow UPSERT statement, check server_status */
477477
if (conn->upsert_status->server_status & SERVER_MORE_RESULTS_EXISTS) {
@@ -487,7 +487,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s)
487487
enum_mysqlnd_collected_stats statistic = STAT_LAST;
488488

489489
DBG_INF("Result set pending");
490-
SET_EMPTY_MESSAGE(conn->last_message, conn->last_message_len, conn->persistent);
490+
SET_EMPTY_MESSAGE(conn->last_message.s, conn->last_message.l, conn->persistent);
491491

492492
MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_RSET_QUERY);
493493
UPSERT_STATUS_RESET(conn->upsert_status);

ext/mysqlnd/mysqlnd_structs.h

+15-16
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@
3535
#define MYSQLND_CLASS_METHODS_END }
3636

3737

38+
typedef struct st_mysqlnd_string
39+
{
40+
char *s;
41+
size_t l;
42+
} MYSQLND_STRING;
43+
44+
typedef struct st_mysqlnd_const_string
45+
{
46+
const char *s;
47+
size_t l;
48+
} MYSQLND_CSTRING;
49+
50+
3851
typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL;
3952
typedef struct st_mysqlnd_memory_pool_chunk MYSQLND_MEMORY_POOL_CHUNK;
4053
typedef struct st_mysqlnd_memory_pool_chunk_llist MYSQLND_MEMORY_POOL_CHUNK_LLIST;
@@ -594,7 +607,7 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data)
594607
func_mysqlnd_conn_data__get_reference get_reference;
595608
func_mysqlnd_conn_data__free_reference free_reference;
596609

597-
func_mysqlnd_conn_data__send_command_handle_response send_command_handle_response;
610+
// func_mysqlnd_conn_data__send_command_handle_response send_command_handle_response;
598611

599612
func_mysqlnd_conn_data__restart_psession restart_psession;
600613
func_mysqlnd_conn_data__end_psession end_psession;
@@ -985,8 +998,7 @@ struct st_mysqlnd_connection_data
985998
/* For UPSERT queries */
986999
MYSQLND_UPSERT_STATUS * upsert_status;
9871000
MYSQLND_UPSERT_STATUS upsert_status_impl;
988-
char *last_message;
989-
unsigned int last_message_len;
1001+
MYSQLND_STRING last_message;
9901002

9911003
/* If error packet, we use these */
9921004
MYSQLND_ERROR_INFO * error_info;
@@ -1221,19 +1233,6 @@ struct st_mysqlnd_stmt
12211233
};
12221234

12231235

1224-
typedef struct st_mysqlnd_string
1225-
{
1226-
char *s;
1227-
size_t l;
1228-
} MYSQLND_STRING;
1229-
1230-
typedef struct st_mysqlnd_const_string
1231-
{
1232-
const char *s;
1233-
size_t l;
1234-
} MYSQLND_CSTRING;
1235-
1236-
12371236
struct st_mysqlnd_plugin_header
12381237
{
12391238
unsigned int plugin_api_version;

0 commit comments

Comments
 (0)