Skip to content

Commit ccfd9cd

Browse files
committed
allow persistency of PS
1 parent af49e58 commit ccfd9cd

11 files changed

+137
-129
lines changed

ext/mysqli/mysqli_api.c

+3-5
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned in
166166
if (argc == start) {
167167
return PASS;
168168
}
169-
params = safe_emalloc(argc - start, sizeof(MYSQLND_PARAM_BIND), 0);
169+
params = mysqlnd_stmt_alloc_param_bind(stmt->stmt);
170170
for (i = 0; i < (argc - start); i++) {
171171
zend_uchar type;
172172
switch (types[i]) {
@@ -190,7 +190,7 @@ int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned in
190190
/* We count parameters from 1 */
191191
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Undefined fieldtype %c (parameter %d)", types[i], i + start + 1);
192192
ret = FAIL;
193-
efree(params);
193+
mysqlnd_stmt_free_param_bind(stmt->stmt, params);
194194
goto end;
195195
}
196196
params[i].zv = *(args[i + start]);
@@ -452,9 +452,7 @@ static int
452452
mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, unsigned int start TSRMLS_DC)
453453
{
454454
unsigned int i;
455-
MYSQLND_RESULT_BIND *params;
456-
457-
params = safe_emalloc(argc - start, sizeof(MYSQLND_RESULT_BIND), 0);
455+
MYSQLND_RESULT_BIND * params = mysqlnd_stmt_alloc_result_bind(stmt->stmt);
458456
for (i = 0; i < (argc - start); i++) {
459457
params[i].zv = *(args[i + start]);
460458
}

ext/mysqlnd/mysqlnd.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND *conn TSRMLS_DC)
142142

143143
mysqlnd_local_infile_default(conn);
144144
if (conn->current_result) {
145-
conn->current_result->m.free_result_contents(conn->current_result TSRMLS_CC);
146-
mnd_efree(conn->current_result);
145+
conn->current_result->m.free_result(conn->current_result, TRUE TSRMLS_CC);
146+
// mnd_pefree(conn->current_result, conn->current_result->persistent);
147147
conn->current_result = NULL;
148148
}
149149

@@ -1089,7 +1089,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_fields)(MYSQLND *conn, const char *table, cons
10891089
Prepare for the worst case.
10901090
MyISAM goes to 2500 BIT columns, double it for safety.
10911091
*/
1092-
result = mysqlnd_result_init(5000 TSRMLS_CC);
1092+
result = mysqlnd_result_init(5000, conn->persistent TSRMLS_CC);
10931093

10941094

10951095
if (FAIL == result->m.read_result_metadata(result, conn TSRMLS_CC)) {

ext/mysqlnd/mysqlnd.h

+14-10
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ PHPAPI unsigned int mysqlnd_get_client_version();
242242

243243
PHPAPI void mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind TSRMLS_DC);
244244
PHPAPI void mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind TSRMLS_DC);
245+
PHPAPI void mysqlnd_free_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind TSRMLS_DC);
246+
PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind TSRMLS_DC);
245247

246248

247249
PHPAPI const char * mysqlnd_field_type_name(enum mysqlnd_field_types field_type);
@@ -288,16 +290,18 @@ PHPAPI ulong mysqlnd_old_escape_string(char *newstr, const char *escapestr, size
288290
#define mysqlnd_stmt_data_seek(stmt, row) (stmt)->m->seek_data((stmt), (row) TSRMLS_CC)
289291
#define mysqlnd_stmt_prepare(stmt, q, qlen) (stmt)->m->prepare((stmt), (q), (qlen) TSRMLS_CC)
290292
#define mysqlnd_stmt_execute(stmt) (stmt)->m->execute((stmt) TSRMLS_CC)
291-
#define mysqlnd_stmt_send_long_data(s,p,d,l) (s)->m->send_long_data((s), (p), (d), (l) TSRMLS_CC)
292-
#define mysqlnd_stmt_bind_param(stmt,bind) (stmt)->m->bind_parameters((stmt), (bind) TSRMLS_CC)
293-
#define mysqlnd_stmt_bind_one_param(s,n,z,t) (s)->m->bind_one_parameter((s), (n), (z), (t) TSRMLS_CC)
294-
#define mysqlnd_stmt_refresh_bind_param(s) (s)->m->refresh_bind_param((s) TSRMLS_CC)
295-
#define mysqlnd_stmt_set_param_bind_dtor(s,d) (s)->m->set_param_bind_dtor((s), (d) TSRMLS_CC)
296-
#define mysqlnd_stmt_bind_result(stmt,bind) (stmt)->m->bind_result((stmt), (bind) TSRMLS_CC)
297-
#define mysqlnd_stmt_bind_one_result(s,no) (s)->m->bind_one_result((s), (no) TSRMLS_CC)
298-
#define mysqlnd_stmt_set_result_bind_dtor(s,d) (s)->m->set_result_bind_dtor((s), (d) TSRMLS_CC)
299-
#define mysqlnd_stmt_param_metadata(stmt) (stmt)->m->get_parameter_metadata((stmt))
300-
#define mysqlnd_stmt_result_metadata(stmt) (stmt)->m->get_result_metadata((stmt) TSRMLS_CC)
293+
#define mysqlnd_stmt_send_long_data(stmt,p,d,l) (stmt)->m->send_long_data((stmt), (p), (d), (l) TSRMLS_CC)
294+
#define mysqlnd_stmt_alloc_param_bind(stmt) (stmt)->m->alloc_parameter_bind((stmt) TSRMLS_CC)
295+
#define mysqlnd_stmt_free_param_bind(stmt,bind) (stmt)->m->free_parameter_bind((stmt), (bind) TSRMLS_CC)
296+
#define mysqlnd_stmt_bind_param(stmt,bind) (stmt)->m->bind_parameters((stmt), (bind) TSRMLS_CC)
297+
#define mysqlnd_stmt_bind_one_param(stmt,n,z,t) (stmt)->m->bind_one_parameter((stmt), (n), (z), (t) TSRMLS_CC)
298+
#define mysqlnd_stmt_refresh_bind_param(s) (s)->m->refresh_bind_param((s) TSRMLS_CC)
299+
#define mysqlnd_stmt_alloc_result_bind(stmt) (stmt)->m->alloc_result_bind((stmt) TSRMLS_CC)
300+
#define mysqlnd_stmt_free_result_bind(stmt,bind) (stmt)->m->free_result_bind((stmt), (bind) TSRMLS_CC)
301+
#define mysqlnd_stmt_bind_result(stmt,bind) (stmt)->m->bind_result((stmt), (bind) TSRMLS_CC)
302+
#define mysqlnd_stmt_bind_one_result(s,no) (s)->m->bind_one_result((s), (no) TSRMLS_CC)
303+
#define mysqlnd_stmt_param_metadata(stmt) (stmt)->m->get_parameter_metadata((stmt))
304+
#define mysqlnd_stmt_result_metadata(stmt) (stmt)->m->get_result_metadata((stmt) TSRMLS_CC)
301305

302306
#define mysqlnd_stmt_free_result(stmt) (stmt)->m->free_result((stmt) TSRMLS_CC)
303307
#define mysqlnd_stmt_close(stmt, implicit) (stmt)->m->dtor((stmt), (implicit) TSRMLS_CC)

ext/mysqlnd/mysqlnd_ps.c

+68-74
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ MYSQLND_METHOD(mysqlnd_stmt, get_result)(MYSQLND_STMT * const stmt TSRMLS_DC)
154154
SET_EMPTY_ERROR(stmt->conn->error_info);
155155
MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_BUFFERED_SETS);
156156

157-
result = mysqlnd_result_init(stmt->result->field_count TSRMLS_CC);
157+
result = mysqlnd_result_init(stmt->result->field_count, stmt->persistent TSRMLS_CC);
158158

159159
result->meta = stmt->result->meta->m->clone_metadata(stmt->result->meta, FALSE TSRMLS_CC);
160160

@@ -335,9 +335,9 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const stmt, const char * co
335335
stmt_to_prepare = mysqlnd_stmt_init(stmt->conn);
336336
}
337337

338-
if (FAIL == stmt_to_prepare->conn->m->simple_command(stmt_to_prepare->conn, COM_STMT_PREPARE, query,
339-
query_len, PROT_LAST, FALSE, TRUE TSRMLS_CC) ||
340-
FAIL == mysqlnd_stmt_read_prepare_response(stmt_to_prepare TSRMLS_CC)) {
338+
if (FAIL == stmt_to_prepare->conn->m->simple_command(stmt_to_prepare->conn, COM_STMT_PREPARE, query, query_len, PROT_LAST, FALSE, TRUE TSRMLS_CC) ||
339+
FAIL == mysqlnd_stmt_read_prepare_response(stmt_to_prepare TSRMLS_CC))
340+
{
341341
goto fail;
342342
}
343343

@@ -355,7 +355,7 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const stmt, const char * co
355355
no metadata at prepare.
356356
*/
357357
if (stmt_to_prepare->field_count) {
358-
MYSQLND_RES *result = mysqlnd_result_init(stmt_to_prepare->field_count TSRMLS_CC);
358+
MYSQLND_RES * result = mysqlnd_result_init(stmt_to_prepare->field_count, stmt_to_prepare->persistent TSRMLS_CC);
359359
/* Allocate the result now as it is needed for the reading of metadata */
360360
stmt_to_prepare->result = result;
361361

@@ -376,7 +376,7 @@ MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const stmt, const char * co
376376
memcpy(stmt, stmt_to_prepare, sizeof(MYSQLND_STMT));
377377

378378
/* Now we will have a clean new statement object */
379-
mnd_efree(stmt_to_prepare);
379+
mnd_pefree(stmt_to_prepare, stmt_to_prepare->persistent);
380380
}
381381
stmt->state = MYSQLND_STMT_PREPARED;
382382
DBG_INF("PASS");
@@ -1248,8 +1248,8 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND
12481248
if (stmt->state < MYSQLND_STMT_PREPARED) {
12491249
SET_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, UNKNOWN_SQLSTATE, mysqlnd_stmt_not_prepared);
12501250
DBG_ERR("not prepared");
1251-
if (param_bind && stmt->param_bind_dtor) {
1252-
stmt->param_bind_dtor(param_bind TSRMLS_CC);
1251+
if (param_bind) {
1252+
stmt->m->free_parameter_bind(stmt, param_bind TSRMLS_CC);
12531253
}
12541254
DBG_RETURN(FAIL);
12551255
}
@@ -1281,8 +1281,8 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND
12811281
zval_ptr_dtor(&stmt->param_bind[i].zv);
12821282
}
12831283
}
1284-
if (stmt->param_bind != param_bind && stmt->param_bind_dtor) {
1285-
stmt->param_bind_dtor(stmt->param_bind TSRMLS_CC);
1284+
if (stmt->param_bind != param_bind) {
1285+
stmt->m->free_parameter_bind(stmt, stmt->param_bind TSRMLS_CC);
12861286
}
12871287
}
12881288

@@ -1382,19 +1382,6 @@ MYSQLND_METHOD(mysqlnd_stmt, refresh_bind_param)(MYSQLND_STMT * const stmt TSRML
13821382
/* }}} */
13831383

13841384

1385-
/* {{{ mysqlnd_stmt::set_bind_param_dtor */
1386-
static void
1387-
MYSQLND_METHOD(mysqlnd_stmt, set_param_bind_dtor)(MYSQLND_STMT * const stmt,
1388-
void (*param_bind_dtor)(MYSQLND_PARAM_BIND * dtor TSRMLS_DC) TSRMLS_DC)
1389-
{
1390-
DBG_ENTER("mysqlnd_stmt::set_bind_param_dtor");
1391-
DBG_INF_FMT("stmt=%p", param_bind_dtor);
1392-
stmt->param_bind_dtor = param_bind_dtor;
1393-
DBG_VOID_RETURN;
1394-
}
1395-
/* }}} */
1396-
1397-
13981385
/* {{{ mysqlnd_stmt::bind_result */
13991386
static enum_func_status
14001387
MYSQLND_METHOD(mysqlnd_stmt, bind_result)(MYSQLND_STMT * const stmt,
@@ -1406,8 +1393,8 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_result)(MYSQLND_STMT * const stmt,
14061393

14071394
if (stmt->state < MYSQLND_STMT_PREPARED) {
14081395
SET_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, UNKNOWN_SQLSTATE, mysqlnd_stmt_not_prepared);
1409-
if (result_bind && stmt->result_bind_dtor) {
1410-
stmt->result_bind_dtor(result_bind TSRMLS_CC);
1396+
if (result_bind) {
1397+
stmt->m->free_result_bind(stmt, result_bind TSRMLS_CC);
14111398
}
14121399
DBG_ERR("not prepared");
14131400
DBG_RETURN(FAIL);
@@ -1438,8 +1425,8 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_result)(MYSQLND_STMT * const stmt,
14381425
*/
14391426
stmt->result_bind[i].bound = TRUE;
14401427
}
1441-
} else if (result_bind && stmt->result_bind_dtor) {
1442-
stmt->result_bind_dtor(result_bind TSRMLS_CC);
1428+
} else if (result_bind) {
1429+
stmt->m->free_result_bind(stmt, result_bind TSRMLS_CC);
14431430
}
14441431
DBG_INF("PASS");
14451432
DBG_RETURN(PASS);
@@ -1491,19 +1478,6 @@ MYSQLND_METHOD(mysqlnd_stmt, bind_one_result)(MYSQLND_STMT * const stmt, unsigne
14911478
/* }}} */
14921479

14931480

1494-
/* {{{ mysqlnd_stmt::set_bind_result_dtor */
1495-
static void
1496-
MYSQLND_METHOD(mysqlnd_stmt, set_result_bind_dtor)(MYSQLND_STMT * const stmt,
1497-
void (*result_bind_dtor)(MYSQLND_RESULT_BIND * dtor TSRMLS_DC) TSRMLS_DC)
1498-
{
1499-
DBG_ENTER("mysqlnd_stmt::set_bind_param_dtor");
1500-
DBG_INF_FMT("stmt=%p", result_bind_dtor);
1501-
stmt->result_bind_dtor = result_bind_dtor;
1502-
DBG_VOID_RETURN;
1503-
}
1504-
/* }}} */
1505-
1506-
15071481
/* {{{ mysqlnd_stmt::insert_id */
15081482
static uint64_t
15091483
MYSQLND_METHOD(mysqlnd_stmt, insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC)
@@ -1634,7 +1608,7 @@ MYSQLND_METHOD(mysqlnd_stmt, result_metadata)(MYSQLND_STMT * const stmt TSRMLS_D
16341608
In the meantime we don't need a zval cache reference for this fake
16351609
result set, so we don't get one.
16361610
*/
1637-
result = mysqlnd_result_init(stmt->field_count TSRMLS_CC);
1611+
result = mysqlnd_result_init(stmt->field_count, stmt->persistent TSRMLS_CC);
16381612
result->type = MYSQLND_RES_NORMAL;
16391613
result->m.fetch_row = result->m.fetch_row_normal_unbuffered;
16401614
result->unbuf = mnd_ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
@@ -1817,9 +1791,7 @@ void mysqlnd_stmt_separate_result_bind(MYSQLND_STMT * const stmt TSRMLS_DC)
18171791
}
18181792
}
18191793
}
1820-
if (stmt->result_bind_dtor) {
1821-
stmt->result_bind_dtor(stmt->result_bind TSRMLS_CC);
1822-
}
1794+
stmt->m->free_result_bind(stmt, stmt->result_bind TSRMLS_CC);
18231795
stmt->result_bind = NULL;
18241796

18251797
DBG_VOID_RETURN;
@@ -1898,9 +1870,7 @@ void mysqlnd_internal_free_stmt_content(MYSQLND_STMT * const stmt TSRMLS_DC)
18981870
zval_ptr_dtor(&stmt->param_bind[i].zv);
18991871
}
19001872
}
1901-
if (stmt->param_bind_dtor) {
1902-
stmt->param_bind_dtor(stmt->param_bind TSRMLS_CC);
1903-
}
1873+
stmt->m->free_parameter_bind(stmt, stmt->param_bind TSRMLS_CC);
19041874
stmt->param_bind = NULL;
19051875
}
19061876

@@ -1985,7 +1955,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, net_close)(MYSQLND_STMT * const stmt, zend_
19851955
}
19861956

19871957
if (stmt->execute_cmd_buffer.buffer) {
1988-
mnd_efree(stmt->execute_cmd_buffer.buffer);
1958+
mnd_pefree(stmt->execute_cmd_buffer.buffer, stmt->persistent);
19891959
stmt->execute_cmd_buffer.buffer = NULL;
19901960
}
19911961

@@ -2013,14 +1983,53 @@ MYSQLND_METHOD(mysqlnd_stmt, dtor)(MYSQLND_STMT * const stmt, zend_bool implicit
20131983
STAT_STMT_CLOSE_EXPLICIT);
20141984

20151985
ret = stmt->m->net_close(stmt, implicit TSRMLS_CC);
2016-
mnd_efree(stmt);
1986+
mnd_pefree(stmt, stmt->persistent);
20171987

20181988
DBG_INF(ret == PASS? "PASS":"FAIL");
20191989
DBG_RETURN(ret);
20201990
}
20211991
/* }}} */
20221992

20231993

1994+
/* {{{ mysqlnd_stmt::alloc_param_bind */
1995+
static MYSQLND_PARAM_BIND *
1996+
MYSQLND_METHOD(mysqlnd_stmt, alloc_param_bind)(MYSQLND_STMT * const stmt TSRMLS_DC)
1997+
{
1998+
DBG_ENTER("mysqlnd_stmt::alloc_param_bind");
1999+
DBG_RETURN(safe_pemalloc(stmt->param_count, sizeof(MYSQLND_PARAM_BIND), 0, stmt->persistent));
2000+
}
2001+
/* }}} */
2002+
2003+
2004+
/* {{{ mysqlnd_stmt::alloc_result_bind */
2005+
static MYSQLND_RESULT_BIND *
2006+
MYSQLND_METHOD(mysqlnd_stmt, alloc_result_bind)(MYSQLND_STMT * const stmt TSRMLS_DC)
2007+
{
2008+
DBG_ENTER("mysqlnd_stmt::alloc_result_bind");
2009+
DBG_RETURN(safe_pemalloc(stmt->field_count, sizeof(MYSQLND_RESULT_BIND), 0, stmt->persistent));
2010+
}
2011+
/* }}} */
2012+
2013+
2014+
/* {{{ param_bind::free_parameter_bind */
2015+
PHPAPI void
2016+
MYSQLND_METHOD(mysqlnd_stmt, free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * param_bind TSRMLS_DC)
2017+
{
2018+
mnd_pefree(param_bind, stmt->persistent);
2019+
}
2020+
/* }}} */
2021+
2022+
2023+
/* {{{ mysqlnd_stmt::free_result_bind */
2024+
PHPAPI void
2025+
MYSQLND_METHOD(mysqlnd_stmt, free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * result_bind TSRMLS_DC)
2026+
{
2027+
mnd_pefree(result_bind, stmt->persistent);
2028+
}
2029+
/* }}} */
2030+
2031+
2032+
20242033
MYSQLND_CLASS_METHODS_START(mysqlnd_stmt)
20252034
MYSQLND_METHOD(mysqlnd_stmt, prepare),
20262035
MYSQLND_METHOD(mysqlnd_stmt, execute),
@@ -2040,10 +2049,8 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_stmt)
20402049
MYSQLND_METHOD(mysqlnd_stmt, bind_parameters),
20412050
MYSQLND_METHOD(mysqlnd_stmt, bind_one_parameter),
20422051
MYSQLND_METHOD(mysqlnd_stmt, refresh_bind_param),
2043-
MYSQLND_METHOD(mysqlnd_stmt, set_param_bind_dtor),
20442052
MYSQLND_METHOD(mysqlnd_stmt, bind_result),
20452053
MYSQLND_METHOD(mysqlnd_stmt, bind_one_result),
2046-
MYSQLND_METHOD(mysqlnd_stmt, set_result_bind_dtor),
20472054
MYSQLND_METHOD(mysqlnd_stmt, send_long_data),
20482055
MYSQLND_METHOD(mysqlnd_stmt, param_metadata),
20492056
MYSQLND_METHOD(mysqlnd_stmt, result_metadata),
@@ -2061,23 +2068,30 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_stmt)
20612068
MYSQLND_METHOD(mysqlnd_stmt, sqlstate),
20622069

20632070
MYSQLND_METHOD(mysqlnd_stmt, attr_get),
2064-
MYSQLND_METHOD(mysqlnd_stmt, attr_set),
2071+
MYSQLND_METHOD(mysqlnd_stmt, attr_set),
2072+
2073+
2074+
MYSQLND_METHOD(mysqlnd_stmt, alloc_param_bind),
2075+
MYSQLND_METHOD(mysqlnd_stmt, alloc_result_bind),
2076+
MYSQLND_METHOD(mysqlnd_stmt, free_parameter_bind),
2077+
MYSQLND_METHOD(mysqlnd_stmt, free_result_bind)
20652078
MYSQLND_CLASS_METHODS_END;
20662079

20672080

20682081
/* {{{ _mysqlnd_stmt_init */
20692082
MYSQLND_STMT * _mysqlnd_stmt_init(MYSQLND * const conn TSRMLS_DC)
20702083
{
20712084
size_t alloc_size = sizeof(MYSQLND_STMT) + mysqlnd_plugin_count() * sizeof(void *);
2072-
MYSQLND_STMT *stmt = mnd_ecalloc(1, alloc_size);
2085+
MYSQLND_STMT * stmt = mnd_pecalloc(1, alloc_size, conn->persistent);
20732086

20742087
DBG_ENTER("_mysqlnd_stmt_init");
20752088
DBG_INF_FMT("stmt=%p", stmt);
20762089

2090+
stmt->persistent = conn->persistent;
20772091
stmt->m = mysqlnd_stmt_methods;
20782092
stmt->state = MYSQLND_STMT_INITTED;
20792093
stmt->execute_cmd_buffer.length = 4096;
2080-
stmt->execute_cmd_buffer.buffer = mnd_emalloc(stmt->execute_cmd_buffer.length);
2094+
stmt->execute_cmd_buffer.buffer = mnd_pemalloc(stmt->execute_cmd_buffer.length, stmt->persistent);
20812095

20822096
stmt->prefetch_rows = MYSQLND_DEFAULT_PREFETCH_ROWS;
20832097
/*
@@ -2086,10 +2100,6 @@ MYSQLND_STMT * _mysqlnd_stmt_init(MYSQLND * const conn TSRMLS_DC)
20862100
or normal query result will close it then.
20872101
*/
20882102
stmt->conn = conn->m->get_reference(conn TSRMLS_CC);
2089-
2090-
stmt->m->set_param_bind_dtor(stmt, mysqlnd_efree_param_bind_dtor TSRMLS_CC);
2091-
stmt->m->set_result_bind_dtor(stmt, mysqlnd_efree_result_bind_dtor TSRMLS_CC);
2092-
20932103
DBG_RETURN(stmt);
20942104
}
20952105
/* }}} */
@@ -2108,22 +2118,6 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_stmt_data(const MYSQLND_STMT * stmt, u
21082118
/* }}} */
21092119

21102120

2111-
/* {{{ mysqlnd_efree_param_bind_dtor */
2112-
PHPAPI void
2113-
mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind TSRMLS_DC)
2114-
{
2115-
mnd_efree(param_bind);
2116-
}
2117-
/* }}} */
2118-
2119-
2120-
/* {{{ mysqlnd_efree_result_bind_dtor */
2121-
PHPAPI void
2122-
mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind TSRMLS_DC)
2123-
{
2124-
mnd_efree(result_bind);
2125-
}
2126-
/* }}} */
21272121

21282122
/* {{{ _mysqlnd_init_ps_subsystem */
21292123
void _mysqlnd_init_ps_subsystem()

0 commit comments

Comments
 (0)