@@ -44,6 +44,42 @@ PHPAPI const char * const mysqlnd_out_of_memory = "Out of memory";
44
44
PHPAPI MYSQLND_STATS * mysqlnd_global_stats = NULL ;
45
45
46
46
47
+ /* {{{ mysqlnd_upsert_status::reset */
48
+ void
49
+ MYSQLND_METHOD (mysqlnd_upsert_status , reset )(MYSQLND_UPSERT_STATUS * const upsert_status )
50
+ {
51
+ upsert_status -> warning_count = 0 ;
52
+ upsert_status -> server_status = 0 ;
53
+ upsert_status -> affected_rows = 0 ;
54
+ upsert_status -> last_insert_id = 0 ;
55
+ }
56
+ /* }}} */
57
+
58
+
59
+ /* {{{ mysqlnd_upsert_status::set_affected_rows_to_error */
60
+ void
61
+ MYSQLND_METHOD (mysqlnd_upsert_status , set_affected_rows_to_error )(MYSQLND_UPSERT_STATUS * upsert_status )
62
+ {
63
+ upsert_status -> affected_rows = (uint64_t ) ~0 ;
64
+ }
65
+ /* }}} */
66
+
67
+
68
+ MYSQLND_CLASS_METHODS_START (mysqlnd_upsert_status )
69
+ MYSQLND_METHOD (mysqlnd_upsert_status , reset ),
70
+ MYSQLND_METHOD (mysqlnd_upsert_status , set_affected_rows_to_error ),
71
+ MYSQLND_CLASS_METHODS_END ;
72
+
73
+
74
+ /* {{{ mysqlnd_upsert_status_init */
75
+ void
76
+ mysqlnd_upsert_status_init (MYSQLND_UPSERT_STATUS * const upsert_status )
77
+ {
78
+ upsert_status -> m = & MYSQLND_CLASS_METHOD_TABLE_NAME (mysqlnd_upsert_status );
79
+ }
80
+ /* }}} */
81
+
82
+
47
83
/* {{{ mysqlnd_conn_data::free_options */
48
84
static void
49
85
MYSQLND_METHOD (mysqlnd_conn_data , free_options )(MYSQLND_CONN_DATA * conn )
@@ -190,9 +226,12 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn_data, dtor)(MYSQLND_CONN_DATA * conn)
190
226
191
227
/* {{{ mysqlnd_conn_data::send_command_handle_response */
192
228
static enum_func_status
193
- MYSQLND_METHOD (mysqlnd_conn_data , send_command_handle_response )(MYSQLND_CONN_DATA * conn , enum mysqlnd_packet_type ok_packet ,
194
- zend_bool silent , enum php_mysqlnd_server_command command ,
195
- zend_bool ignore_upsert_status )
229
+ MYSQLND_METHOD (mysqlnd_conn_data , send_command_handle_response )(
230
+ MYSQLND_CONN_DATA * const conn ,
231
+ const enum mysqlnd_packet_type ok_packet ,
232
+ const zend_bool silent ,
233
+ const enum php_mysqlnd_server_command command ,
234
+ const zend_bool ignore_upsert_status )
196
235
{
197
236
enum_func_status ret = FAIL ;
198
237
@@ -228,14 +267,14 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response)(MYSQLND_CONN_DAT
228
267
safe to unconditionally turn off the flag here.
229
268
*/
230
269
conn -> upsert_status -> server_status &= ~SERVER_MORE_RESULTS_EXISTS ;
231
- SET_ERROR_AFF_ROWS (conn );
270
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
232
271
} else {
233
272
SET_NEW_MESSAGE (conn -> last_message , conn -> last_message_len ,
234
273
ok_response -> message , ok_response -> message_len ,
235
274
conn -> persistent );
236
275
237
276
if (!ignore_upsert_status ) {
238
- memset (conn -> upsert_status , 0 , sizeof ( * conn -> upsert_status ) );
277
+ UPSERT_STATUS_RESET (conn -> upsert_status );
239
278
conn -> upsert_status -> warning_count = ok_response -> warning_count ;
240
279
conn -> upsert_status -> server_status = ok_response -> server_status ;
241
280
conn -> upsert_status -> affected_rows = ok_response -> affected_rows ;
@@ -263,7 +302,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response)(MYSQLND_CONN_DAT
263
302
} else if (0xFF == ok_response -> field_count ) {
264
303
/* The server signalled error. Set the error */
265
304
SET_CLIENT_ERROR (* conn -> error_info , ok_response -> error_no , ok_response -> sqlstate , ok_response -> error );
266
- SET_ERROR_AFF_ROWS (conn );
305
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
267
306
} else if (0xFE != ok_response -> field_count ) {
268
307
SET_CLIENT_ERROR (* conn -> error_info , CR_MALFORMED_PACKET , UNKNOWN_SQLSTATE , "Malformed packet" );
269
308
if (!silent ) {
@@ -288,10 +327,14 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_command_handle_response)(MYSQLND_CONN_DAT
288
327
/* }}} */
289
328
290
329
291
- /* {{{ mysqlnd_conn_data::simple_command_send_request */
330
+ /* {{{ mysqlnd_conn_data::send_command_do_request */
292
331
static enum_func_status
293
- MYSQLND_METHOD (mysqlnd_conn_data , send_command_do_request )(MYSQLND_CONN_DATA * conn , enum php_mysqlnd_server_command command ,
294
- const zend_uchar * const arg , size_t arg_len , zend_bool silent , zend_bool ignore_upsert_status )
332
+ MYSQLND_METHOD (mysqlnd_conn_data , send_command_do_request )(
333
+ MYSQLND_CONN_DATA * const conn ,
334
+ const enum php_mysqlnd_server_command command ,
335
+ const zend_uchar * const arg , const size_t arg_len ,
336
+ const zend_bool silent ,
337
+ const zend_bool ignore_upsert_status )
295
338
{
296
339
enum_func_status ret = PASS ;
297
340
MYSQLND_PACKET_COMMAND * cmd_packet ;
@@ -314,7 +357,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_command_do_request)(MYSQLND_CONN_DATA * c
314
357
DBG_RETURN (FAIL );
315
358
}
316
359
317
- SET_ERROR_AFF_ROWS (conn );
360
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
318
361
SET_EMPTY_ERROR (* conn -> error_info );
319
362
320
363
cmd_packet = conn -> payload_decoder_factory -> m .get_command_packet (conn -> payload_decoder_factory , FALSE);
@@ -747,7 +790,8 @@ MYSQLND_METHOD(mysqlnd_conn_data, connect_handshake)(MYSQLND_CONN_DATA * conn,
747
790
{
748
791
goto err ;
749
792
}
750
- memset (conn -> upsert_status , 0 , sizeof (* conn -> upsert_status ));
793
+
794
+ UPSERT_STATUS_RESET (conn -> upsert_status );
751
795
conn -> upsert_status -> warning_count = 0 ;
752
796
conn -> upsert_status -> server_status = greet_packet -> server_status ;
753
797
conn -> upsert_status -> affected_rows = 0 ;
@@ -791,7 +835,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, connect)(MYSQLND_CONN_DATA * conn,
791
835
local_tx_started = TRUE;
792
836
793
837
SET_EMPTY_ERROR (* conn -> error_info );
794
- SET_ERROR_AFF_ROWS (conn );
838
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
795
839
796
840
DBG_INF_FMT ("host=%s user=%s db=%s port=%u flags=%u persistent=%u state=%u" ,
797
841
host ?host :"" , user ?user :"" , db ?db :"" , port , mysql_flags ,
@@ -1595,7 +1639,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, select_db)(MYSQLND_CONN_DATA * const conn, con
1595
1639
The server sends 0 but libmysql doesn't read it and has established
1596
1640
a protocol of giving back -1. Thus we have to follow it :(
1597
1641
*/
1598
- SET_ERROR_AFF_ROWS (conn );
1642
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
1599
1643
if (ret == PASS ) {
1600
1644
if (conn -> connect_or_select_db ) {
1601
1645
mnd_pefree (conn -> connect_or_select_db , conn -> persistent );
@@ -1635,7 +1679,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, ping)(MYSQLND_CONN_DATA * const conn)
1635
1679
The server sends 0 but libmysql doesn't read it and has established
1636
1680
a protocol of giving back -1. Thus we have to follow it :(
1637
1681
*/
1638
- SET_ERROR_AFF_ROWS (conn );
1682
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
1639
1683
1640
1684
conn -> m -> local_tx_end (conn , this_func , ret );
1641
1685
}
@@ -1711,7 +1755,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, kill)(MYSQLND_CONN_DATA * conn, unsigned int p
1711
1755
The server sends 0 but libmysql doesn't read it and has established
1712
1756
a protocol of giving back -1. Thus we have to follow it :(
1713
1757
*/
1714
- SET_ERROR_AFF_ROWS (conn );
1758
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
1715
1759
} else if (PASS == ret ) {
1716
1760
CONN_SET_STATE (conn , CONN_QUIT_SENT );
1717
1761
conn -> m -> send_close (conn );
@@ -2095,7 +2139,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, next_result)(MYSQLND_CONN_DATA * const conn)
2095
2139
}
2096
2140
2097
2141
SET_EMPTY_ERROR (* conn -> error_info );
2098
- SET_ERROR_AFF_ROWS (conn );
2142
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
2099
2143
/*
2100
2144
We are sure that there is a result set, since conn->state is set accordingly
2101
2145
in mysqlnd_store_result() or mysqlnd_fetch_row_unbuffered()
@@ -2202,7 +2246,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, change_user)(MYSQLND_CONN_DATA * const conn,
2202
2246
}
2203
2247
2204
2248
SET_EMPTY_ERROR (* conn -> error_info );
2205
- SET_ERROR_AFF_ROWS (conn );
2249
+ UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR (conn -> upsert_status );
2206
2250
2207
2251
if (!user ) {
2208
2252
user = "" ;
@@ -2961,7 +3005,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_conn_data)
2961
3005
MYSQLND_METHOD_PRIVATE (mysqlnd_conn_data , get_state ),
2962
3006
MYSQLND_METHOD_PRIVATE (mysqlnd_conn_data , set_state ),
2963
3007
2964
- MYSQLND_METHOD (mysqlnd_conn_data , send_command_do_request ),
3008
+ // MYSQLND_METHOD(mysqlnd_conn_data, send_command_do_request),
2965
3009
MYSQLND_METHOD (mysqlnd_conn_data , send_command_handle_response ),
2966
3010
MYSQLND_METHOD (mysqlnd_conn_data , restart_psession ),
2967
3011
MYSQLND_METHOD (mysqlnd_conn_data , end_psession ),
0 commit comments