@@ -391,12 +391,10 @@ mysqlnd_stmt_prepare_read_eof(MYSQLND_STMT * s)
391
391
392
392
/* {{{ mysqlnd_stmt::prepare */
393
393
static enum_func_status
394
- MYSQLND_METHOD (mysqlnd_stmt , prepare )(MYSQLND_STMT * const s , const char * const query , const size_t query_len )
394
+ MYSQLND_METHOD (mysqlnd_stmt , prepare )(MYSQLND_STMT * s , const char * const query , const size_t query_len )
395
395
{
396
396
MYSQLND_STMT_DATA * stmt = s ? s -> data : NULL ;
397
397
MYSQLND_CONN_DATA * conn = stmt ? stmt -> conn : NULL ;
398
- MYSQLND_STMT * s_to_prepare = s ;
399
- MYSQLND_STMT_DATA * stmt_to_prepare = stmt ;
400
398
401
399
DBG_ENTER ("mysqlnd_stmt::prepare" );
402
400
if (!stmt || !conn ) {
@@ -426,11 +424,12 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const s, const char * const
426
424
Create a new test statement, which we will prepare, but if anything
427
425
fails, we will scrap it.
428
426
*/
429
- s_to_prepare = conn -> m -> stmt_init (conn );
430
- if (!s_to_prepare ) {
427
+ s -> m -> dtor (s , TRUE);
428
+ s = conn -> m -> stmt_init (conn );
429
+ if (!s ) {
431
430
goto fail ;
432
431
}
433
- stmt_to_prepare = s_to_prepare -> data ;
432
+ stmt = s -> data ;
434
433
}
435
434
436
435
{
@@ -444,13 +443,13 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const s, const char * const
444
443
}
445
444
}
446
445
447
- if (FAIL == mysqlnd_stmt_read_prepare_response (s_to_prepare )) {
446
+ if (FAIL == mysqlnd_stmt_read_prepare_response (s )) {
448
447
goto fail ;
449
448
}
450
449
451
- if (stmt_to_prepare -> param_count ) {
452
- if (FAIL == mysqlnd_stmt_skip_metadata (s_to_prepare ) ||
453
- FAIL == mysqlnd_stmt_prepare_read_eof (s_to_prepare ))
450
+ if (stmt -> param_count ) {
451
+ if (FAIL == mysqlnd_stmt_skip_metadata (s ) ||
452
+ FAIL == mysqlnd_stmt_prepare_read_eof (s ))
454
453
{
455
454
goto fail ;
456
455
}
@@ -461,50 +460,31 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const s, const char * const
461
460
Beware that SHOW statements bypass the PS framework and thus they send
462
461
no metadata at prepare.
463
462
*/
464
- if (stmt_to_prepare -> field_count ) {
465
- MYSQLND_RES * result = conn -> m -> result_init (stmt_to_prepare -> field_count );
463
+ if (stmt -> field_count ) {
464
+ MYSQLND_RES * result = conn -> m -> result_init (stmt -> field_count );
466
465
if (!result ) {
467
466
SET_OOM_ERROR (conn -> error_info );
468
467
goto fail ;
469
468
}
470
469
/* Allocate the result now as it is needed for the reading of metadata */
471
- stmt_to_prepare -> result = result ;
470
+ stmt -> result = result ;
472
471
473
472
result -> conn = conn -> m -> get_reference (conn );
474
473
475
474
result -> type = MYSQLND_RES_PS_BUF ;
476
475
477
476
if (FAIL == result -> m .read_result_metadata (result , conn ) ||
478
- FAIL == mysqlnd_stmt_prepare_read_eof (s_to_prepare ))
477
+ FAIL == mysqlnd_stmt_prepare_read_eof (s ))
479
478
{
480
479
goto fail ;
481
480
}
482
481
}
483
482
484
- if (stmt_to_prepare != stmt ) {
485
- /* swap */
486
- size_t real_size = sizeof (MYSQLND_STMT ) + mysqlnd_plugin_count () * sizeof (void * );
487
- char * tmp_swap = mnd_malloc (real_size );
488
- memcpy (tmp_swap , s , real_size );
489
- memcpy (s , s_to_prepare , real_size );
490
- memcpy (s_to_prepare , tmp_swap , real_size );
491
- mnd_free (tmp_swap );
492
- {
493
- MYSQLND_STMT_DATA * tmp_swap_data = stmt_to_prepare ;
494
- stmt_to_prepare = stmt ;
495
- stmt = tmp_swap_data ;
496
- }
497
- s_to_prepare -> m -> dtor (s_to_prepare , TRUE);
498
- }
499
483
stmt -> state = MYSQLND_STMT_PREPARED ;
500
484
DBG_INF ("PASS" );
501
485
DBG_RETURN (PASS );
502
486
503
487
fail :
504
- if (stmt_to_prepare != stmt && s_to_prepare ) {
505
- COPY_CLIENT_ERROR (stmt -> error_info , * stmt_to_prepare -> error_info );
506
- s_to_prepare -> m -> dtor (s_to_prepare , TRUE);
507
- }
508
488
509
489
DBG_INF ("FAIL" );
510
490
DBG_RETURN (FAIL );
0 commit comments