diff options
Diffstat (limited to 'ext/mysqlnd/mysqlnd_result.c')
| -rw-r--r-- | ext/mysqlnd/mysqlnd_result.c | 501 |
1 files changed, 201 insertions, 300 deletions
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 2fc56e324c..4208097cf7 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -35,7 +35,7 @@ /* {{{ mysqlnd_result_buffered_zval::initialize_result_set_rest */ static enum_func_status MYSQLND_METHOD(mysqlnd_result_buffered_zval, initialize_result_set_rest)(MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta, - MYSQLND_STATS * stats, zend_bool int_and_float_native TSRMLS_DC) + MYSQLND_STATS * stats, zend_bool int_and_float_native) { unsigned int i; enum_func_status ret = PASS; @@ -43,8 +43,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, initialize_result_set_rest)(MYSQLND const uint64_t row_count = result->row_count; enum_func_status rc; - zval **data_begin = ((MYSQLND_RES_BUFFERED_ZVAL *) result)->data; - zval **data_cursor = data_begin; + zval *data_begin = ((MYSQLND_RES_BUFFERED_ZVAL *) result)->data; + zval *data_cursor = data_begin; DBG_ENTER("mysqlnd_result_buffered_zval::initialize_result_set_rest"); @@ -52,13 +52,13 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, initialize_result_set_rest)(MYSQLND DBG_RETURN(ret); } while ((data_cursor - data_begin) < (int)(row_count * field_count)) { - if (NULL == data_cursor[0]) { + if (Z_ISUNDEF(data_cursor[0])) { rc = result->m.row_decoder(result->row_buffers[(data_cursor - data_begin) / field_count], data_cursor, field_count, meta->fields, int_and_float_native, - stats TSRMLS_CC); + stats); if (rc != PASS) { ret = FAIL; break; @@ -70,8 +70,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, initialize_result_set_rest)(MYSQLND String of zero size, definitely can't be the next max_length. Thus for NULL and zero-length we are quite efficient. */ - if (Z_TYPE_P(data_cursor[i]) >= IS_STRING) { - unsigned long len = Z_STRLEN_P(data_cursor[i]); + if (Z_TYPE(data_cursor[i]) == IS_STRING) { + zend_ulong len = Z_STRLEN(data_cursor[i]); if (meta->fields[i].max_length < len) { meta->fields[i].max_length = len; } @@ -88,7 +88,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, initialize_result_set_rest)(MYSQLND /* {{{ mysqlnd_result_buffered_c::initialize_result_set_rest */ static enum_func_status MYSQLND_METHOD(mysqlnd_result_buffered_c, initialize_result_set_rest)(MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta, - MYSQLND_STATS * stats, zend_bool int_and_float_native TSRMLS_DC) + MYSQLND_STATS * stats, zend_bool int_and_float_native) { unsigned int i; enum_func_status ret = PASS; @@ -99,19 +99,19 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, initialize_result_set_rest)(MYSQLND_RE if (result->initialized_rows < row_count) { zend_uchar * initialized = ((MYSQLND_RES_BUFFERED_C *) result)->initialized; - zval ** current_row = mnd_emalloc(field_count * sizeof(zval *)); + zval * current_row = mnd_emalloc(field_count * sizeof(zval)); if (!current_row) { DBG_RETURN(FAIL); } - + for (i = 0; i < result->row_count; i++) { /* (i / 8) & the_bit_for_i*/ if (initialized[i >> 3] & (1 << (i & 7))) { continue; } - rc = result->m.row_decoder(result->row_buffers[i], current_row, field_count, meta->fields, int_and_float_native, stats TSRMLS_CC); + rc = result->m.row_decoder(result->row_buffers[i], current_row, field_count, meta->fields, int_and_float_native, stats); if (rc != PASS) { ret = FAIL; @@ -125,8 +125,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, initialize_result_set_rest)(MYSQLND_RE String of zero size, definitely can't be the next max_length. Thus for NULL and zero-length we are quite efficient. */ - if (Z_TYPE_P(current_row[i]) >= IS_STRING) { - unsigned long len = Z_STRLEN_P(current_row[i]); + if (Z_TYPE(current_row[i]) == IS_STRING) { + zend_ulong len = Z_STRLEN(current_row[i]); if (meta->fields[i].max_length < len) { meta->fields[i].max_length = len; } @@ -141,55 +141,9 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, initialize_result_set_rest)(MYSQLND_RE /* }}} */ -/* {{{ mysqlnd_rset_zval_ptr_dtor */ -static void -mysqlnd_rset_zval_ptr_dtor(zval **zv, enum_mysqlnd_res_type type, zend_bool * copy_ctor_called TSRMLS_DC) -{ - DBG_ENTER("mysqlnd_rset_zval_ptr_dtor"); - DBG_INF_FMT("type=%u", type); - if (!zv || !*zv) { - *copy_ctor_called = FALSE; - DBG_ERR_FMT("zv was NULL"); - DBG_VOID_RETURN; - } - /* - This zval is not from the cache block. - Thus the refcount is -1 than of a zval from the cache, - because the zvals from the cache are owned by it. - */ - if (type == MYSQLND_RES_PS_BUF || type == MYSQLND_RES_PS_UNBUF) { - *copy_ctor_called = FALSE; - ; /* do nothing, zval_ptr_dtor will do the job*/ - } else if (Z_REFCOUNT_PP(zv) > 1) { - /* - Not a prepared statement, then we have to - call copy_ctor and then zval_ptr_dtor() - */ - if (Z_TYPE_PP(zv) == IS_STRING) { - zval_copy_ctor(*zv); - } - *copy_ctor_called = TRUE; - } else { - /* - noone but us point to this, so we can safely ZVAL_NULL the zval, - so Zend does not try to free what the zval points to - which is - in result set buffers - */ - *copy_ctor_called = FALSE; - if (Z_TYPE_PP(zv) == IS_STRING) { - ZVAL_NULL(*zv); - } - } - DBG_INF_FMT("call the dtor on zval with refc %u", Z_REFCOUNT_PP(zv)); - zval_ptr_dtor(zv); - DBG_VOID_RETURN; -} -/* }}} */ - - /* {{{ mysqlnd_result_unbuffered::free_last_data */ static void -MYSQLND_METHOD(mysqlnd_result_unbuffered, free_last_data)(MYSQLND_RES_UNBUFFERED * unbuf, MYSQLND_STATS * const global_stats TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_unbuffered, free_last_data)(MYSQLND_RES_UNBUFFERED * unbuf, MYSQLND_STATS * const global_stats) { DBG_ENTER("mysqlnd_res::unbuffered_free_last_data"); @@ -199,23 +153,11 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_last_data)(MYSQLND_RES_UNBUFFERED DBG_INF_FMT("field_count=%u", unbuf->field_count); if (unbuf->last_row_data) { - unsigned int i, ctor_called_count = 0; - zend_bool copy_ctor_called; - + unsigned int i; for (i = 0; i < unbuf->field_count; i++) { - mysqlnd_rset_zval_ptr_dtor(&(unbuf->last_row_data[i]), unbuf->ps ? MYSQLND_RES_PS_UNBUF : MYSQLND_RES_NORMAL, ©_ctor_called TSRMLS_CC); - if (copy_ctor_called) { - ++ctor_called_count; - } + zval_ptr_dtor(&(unbuf->last_row_data[i])); } - DBG_INF_FMT("copy_ctor_called_count=%u", ctor_called_count); - /* By using value3 macros we hold a mutex only once, there is no value2 */ - MYSQLND_INC_CONN_STATISTIC_W_VALUE2(global_stats, - STAT_COPY_ON_WRITE_PERFORMED, - ctor_called_count, - STAT_COPY_ON_WRITE_SAVED, - unbuf->field_count - ctor_called_count); /* Free last row's zvals */ mnd_efree(unbuf->last_row_data); unbuf->last_row_data = NULL; @@ -223,7 +165,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_last_data)(MYSQLND_RES_UNBUFFERED if (unbuf->last_row_buffer) { DBG_INF("Freeing last row buffer"); /* Nothing points to this buffer now, free it */ - unbuf->last_row_buffer->free_chunk(unbuf->last_row_buffer TSRMLS_CC); + unbuf->last_row_buffer->free_chunk(unbuf->last_row_buffer); unbuf->last_row_buffer = NULL; } @@ -234,10 +176,10 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_last_data)(MYSQLND_RES_UNBUFFERED /* {{{ mysqlnd_result_unbuffered::free_result */ static void -MYSQLND_METHOD(mysqlnd_result_unbuffered, free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_unbuffered, free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats) { DBG_ENTER("mysqlnd_result_unbuffered, free_result"); - result->m.free_last_data(result, global_stats TSRMLS_CC); + result->m.free_last_data(result, global_stats); if (result->lengths) { mnd_pefree(result->lengths, result->persistent); @@ -251,7 +193,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_result)(MYSQLND_RES_UNBUFFERED * } if (result->result_set_memory_pool) { - mysqlnd_mempool_destroy(result->result_set_memory_pool TSRMLS_CC); + mysqlnd_mempool_destroy(result->result_set_memory_pool); result->result_set_memory_pool = NULL; } @@ -264,39 +206,27 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, free_result)(MYSQLND_RES_UNBUFFERED * /* {{{ mysqlnd_result_buffered_zval::free_result */ static void -MYSQLND_METHOD(mysqlnd_result_buffered_zval, free_result)(MYSQLND_RES_BUFFERED_ZVAL * const set TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered_zval, free_result)(MYSQLND_RES_BUFFERED_ZVAL * const set) { - zval ** data = set->data; + zval * data = set->data; DBG_ENTER("mysqlnd_result_buffered_zval::free_result"); set->data = NULL; /* prevent double free if following loop is interrupted */ if (data) { - unsigned int copy_on_write_performed = 0; - unsigned int copy_on_write_saved = 0; unsigned int field_count = set->field_count; int64_t row; - + for (row = set->row_count - 1; row >= 0; row--) { - zval **current_row = data + row * field_count; + zval *current_row = data + row * field_count; int64_t col; if (current_row != NULL) { for (col = field_count - 1; col >= 0; --col) { - if (current_row[col]) { - zend_bool copy_ctor_called; - mysqlnd_rset_zval_ptr_dtor(&(current_row[col]), set->ps? MYSQLND_RES_PS_BUF : MYSQLND_RES_NORMAL, ©_ctor_called TSRMLS_CC); - if (copy_ctor_called) { - ++copy_on_write_performed; - } else { - ++copy_on_write_saved; - } - } + zval_ptr_dtor(&(current_row[col])); } } } - MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(STAT_COPY_ON_WRITE_PERFORMED, copy_on_write_performed, - STAT_COPY_ON_WRITE_SAVED, copy_on_write_saved); mnd_efree(data); } set->data_cursor = NULL; @@ -307,7 +237,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, free_result)(MYSQLND_RES_BUFFERED_Z /* {{{ mysqlnd_result_buffered_c::free_result */ static void -MYSQLND_METHOD(mysqlnd_result_buffered_c, free_result)(MYSQLND_RES_BUFFERED_C * const set TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered_c, free_result)(MYSQLND_RES_BUFFERED_C * const set) { DBG_ENTER("mysqlnd_result_buffered_c::free_result"); mnd_pefree(set->initialized, set->persistent); @@ -319,7 +249,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, free_result)(MYSQLND_RES_BUFFERED_C * /* {{{ mysqlnd_result_buffered::free_result */ static void -MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * const set TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * const set) { int64_t row; @@ -327,14 +257,14 @@ MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * cons DBG_INF_FMT("Freeing "MYSQLND_LLU_SPEC" row(s)", set->row_count); if (set->type == MYSQLND_BUFFERED_TYPE_ZVAL) { - MYSQLND_METHOD(mysqlnd_result_buffered_zval, free_result)((MYSQLND_RES_BUFFERED_ZVAL *) set TSRMLS_CC); + MYSQLND_METHOD(mysqlnd_result_buffered_zval, free_result)((MYSQLND_RES_BUFFERED_ZVAL *) set); } if (set->type == MYSQLND_BUFFERED_TYPE_C) { - MYSQLND_METHOD(mysqlnd_result_buffered_c, free_result)((MYSQLND_RES_BUFFERED_C *) set TSRMLS_CC); + MYSQLND_METHOD(mysqlnd_result_buffered_c, free_result)((MYSQLND_RES_BUFFERED_C *) set); } for (row = set->row_count - 1; row >= 0; row--) { MYSQLND_MEMORY_POOL_CHUNK *current_buffer = set->row_buffers[row]; - current_buffer->free_chunk(current_buffer TSRMLS_CC); + current_buffer->free_chunk(current_buffer); } if (set->lengths) { @@ -348,7 +278,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * cons } if (set->result_set_memory_pool) { - mysqlnd_mempool_destroy(set->result_set_memory_pool TSRMLS_CC); + mysqlnd_mempool_destroy(set->result_set_memory_pool); set->result_set_memory_pool = NULL; } @@ -364,16 +294,16 @@ MYSQLND_METHOD(mysqlnd_result_buffered, free_result)(MYSQLND_RES_BUFFERED * cons /* {{{ mysqlnd_res::free_result_buffers */ static void -MYSQLND_METHOD(mysqlnd_res, free_result_buffers)(MYSQLND_RES * result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, free_result_buffers)(MYSQLND_RES * result) { DBG_ENTER("mysqlnd_res::free_result_buffers"); DBG_INF_FMT("%s", result->unbuf? "unbuffered":(result->stored_data? "buffered":"unknown")); if (result->unbuf) { - result->unbuf->m.free_result(result->unbuf, result->conn? result->conn->stats : NULL TSRMLS_CC); + result->unbuf->m.free_result(result->unbuf, result->conn? result->conn->stats : NULL); result->unbuf = NULL; } else if (result->stored_data) { - result->stored_data->m.free_result(result->stored_data TSRMLS_CC); + result->stored_data->m.free_result(result->stored_data); result->stored_data = NULL; } @@ -385,14 +315,14 @@ MYSQLND_METHOD(mysqlnd_res, free_result_buffers)(MYSQLND_RES * result TSRMLS_DC) /* {{{ mysqlnd_res::free_result_contents_internal */ static -void MYSQLND_METHOD(mysqlnd_res, free_result_contents_internal)(MYSQLND_RES * result TSRMLS_DC) +void MYSQLND_METHOD(mysqlnd_res, free_result_contents_internal)(MYSQLND_RES * result) { DBG_ENTER("mysqlnd_res::free_result_contents_internal"); - result->m.free_result_buffers(result TSRMLS_CC); + result->m.free_result_buffers(result); if (result->meta) { - result->meta->m->free_metadata(result->meta TSRMLS_CC); + result->meta->m->free_metadata(result->meta); result->meta = NULL; } @@ -403,15 +333,15 @@ void MYSQLND_METHOD(mysqlnd_res, free_result_contents_internal)(MYSQLND_RES * re /* {{{ mysqlnd_res::free_result_internal */ static -void MYSQLND_METHOD(mysqlnd_res, free_result_internal)(MYSQLND_RES * result TSRMLS_DC) +void MYSQLND_METHOD(mysqlnd_res, free_result_internal)(MYSQLND_RES * result) { DBG_ENTER("mysqlnd_res::free_result_internal"); - result->m.skip_result(result TSRMLS_CC); + result->m.skip_result(result); - result->m.free_result_contents(result TSRMLS_CC); + result->m.free_result_contents(result); if (result->conn) { - result->conn->m->free_reference(result->conn TSRMLS_CC); + result->conn->m->free_reference(result->conn); result->conn = NULL; } @@ -424,22 +354,22 @@ void MYSQLND_METHOD(mysqlnd_res, free_result_internal)(MYSQLND_RES * result TSRM /* {{{ mysqlnd_res::read_result_metadata */ static enum_func_status -MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn) { DBG_ENTER("mysqlnd_res::read_result_metadata"); /* Make it safe to call it repeatedly for PS - - better free and allocate a new because the number of field might change + better free and allocate a new because the number of field might change (select *) with altered table. Also for statements which skip the PS infrastructure! */ if (result->meta) { - result->meta->m->free_metadata(result->meta TSRMLS_CC); + result->meta->m->free_metadata(result->meta); result->meta = NULL; } - result->meta = result->m.result_meta_init(result->field_count, result->persistent TSRMLS_CC); + result->meta = result->m.result_meta_init(result->field_count, result->persistent); if (!result->meta) { SET_OOM_ERROR(*conn->error_info); DBG_RETURN(FAIL); @@ -448,8 +378,8 @@ MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_ /* 1. Read all fields metadata */ /* It's safe to reread without freeing */ - if (FAIL == result->meta->m->read_metadata(result->meta, conn TSRMLS_CC)) { - result->m.free_result_contents(result TSRMLS_CC); + if (FAIL == result->meta->m->read_metadata(result->meta, conn)) { + result->m.free_result_contents(result); DBG_RETURN(FAIL); } /* COM_FIELD_LIST is broken and has premature EOF, thus we need to hack here and in mysqlnd_res_meta.c */ @@ -469,7 +399,7 @@ MYSQLND_METHOD(mysqlnd_res, read_result_metadata)(MYSQLND_RES * result, MYSQLND_ /* {{{ mysqlnd_query_read_result_set_header */ enum_func_status -mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s TSRMLS_DC) +mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s) { MYSQLND_STMT_DATA * stmt = s ? s->data:NULL; enum_func_status ret; @@ -481,7 +411,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s ret = FAIL; do { - rset_header = conn->protocol->m.get_rset_header_packet(conn->protocol, FALSE TSRMLS_CC); + rset_header = conn->protocol->m.get_rset_header_packet(conn->protocol, FALSE); if (!rset_header) { SET_OOM_ERROR(*conn->error_info); ret = FAIL; @@ -491,7 +421,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s SET_ERROR_AFF_ROWS(conn); if (FAIL == (ret = PACKET_READ(rset_header, conn))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading result set's header"); + php_error_docref(NULL, E_WARNING, "Error reading result set's header"); break; } @@ -526,7 +456,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s conn->last_query_type = QUERY_LOAD_LOCAL; conn->field_count = 0; /* overwrite previous value, or the last value could be used and lead to bug#53503 */ CONN_SET_STATE(conn, CONN_SENDING_LOAD_DATA); - ret = mysqlnd_handle_local_infile(conn, rset_header->info_or_local_file, &is_warning TSRMLS_CC); + ret = mysqlnd_handle_local_infile(conn, rset_header->info_or_local_file, &is_warning); CONN_SET_STATE(conn, (ret == PASS || is_warning == TRUE)? CONN_READY:CONN_QUIT_SENT); MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_NON_RSET_QUERY); break; @@ -569,7 +499,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s /* PS has already allocated it */ conn->field_count = rset_header->field_count; if (!stmt) { - result = conn->current_result = conn->m->result_init(rset_header->field_count, conn->persistent TSRMLS_CC); + result = conn->current_result = conn->m->result_init(rset_header->field_count, conn->persistent); } else { if (!stmt->result) { DBG_INF("This is 'SHOW'/'EXPLAIN'-like query."); @@ -578,7 +508,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s prepared statements can't send result set metadata for these queries on prepare stage. Read it now. */ - result = stmt->result = conn->m->result_init(rset_header->field_count, stmt->persistent TSRMLS_CC); + result = stmt->result = conn->m->result_init(rset_header->field_count, stmt->persistent); } else { /* Update result set metadata if it for some reason changed between @@ -601,7 +531,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s break; } - if (FAIL == (ret = result->m.read_result_metadata(result, conn TSRMLS_CC))) { + if (FAIL == (ret = result->m.read_result_metadata(result, conn))) { /* For PS, we leave them in Prepared state */ if (!stmt && conn->current_result) { mnd_efree(conn->current_result); @@ -612,7 +542,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s } /* Check for SERVER_STATUS_MORE_RESULTS if needed */ - fields_eof = conn->protocol->m.get_eof_packet(conn->protocol, FALSE TSRMLS_CC); + fields_eof = conn->protocol->m.get_eof_packet(conn->protocol, FALSE); if (!fields_eof) { SET_OOM_ERROR(*conn->error_info); ret = FAIL; @@ -620,7 +550,7 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s } if (FAIL == (ret = PACKET_READ(fields_eof, conn))) { DBG_ERR("Error occurred while reading the EOF packet"); - result->m.free_result_contents(result TSRMLS_CC); + result->m.free_result_contents(result); mnd_efree(result); if (!stmt) { conn->current_result = NULL; @@ -630,8 +560,6 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s stmt->state = MYSQLND_STMT_INITTED; } } else { - unsigned int to_log = MYSQLND_G(log_mask); - to_log &= fields_eof->server_status; DBG_INF_FMT("warnings=%u server_status=%u", fields_eof->warning_count, fields_eof->server_status); conn->upsert_status->warning_count = fields_eof->warning_count; /* @@ -649,13 +577,6 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s } else if (fields_eof->server_status & SERVER_QUERY_WAS_SLOW) { statistic = STAT_QUERY_WAS_SLOW; } - if (to_log) { -#if A0 - char *backtrace = mysqlnd_get_backtrace(TSRMLS_C); - php_log_err(backtrace TSRMLS_CC); - efree(backtrace); -#endif - } MYSQLND_INC_CONN_STATISTIC(conn->stats, statistic); } } while (0); @@ -678,8 +599,8 @@ mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * s of PHP, to be called as separate function. But let's have it for completeness. */ -static unsigned long * -MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_lengths)(MYSQLND_RES_BUFFERED * const result TSRMLS_DC) +static zend_ulong * +MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_lengths)(MYSQLND_RES_BUFFERED * const result) { const MYSQLND_RES_BUFFERED_ZVAL * set = (MYSQLND_RES_BUFFERED_ZVAL *) result; /* @@ -710,8 +631,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_lengths)(MYSQLND_RES_BUFFERED of PHP, to be called as separate function. But let's have it for completeness. */ -static unsigned long * -MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_lengths)(MYSQLND_RES_BUFFERED * const result TSRMLS_DC) +static zend_ulong * +MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_lengths)(MYSQLND_RES_BUFFERED * const result) { const MYSQLND_RES_BUFFERED_C * set = (MYSQLND_RES_BUFFERED_C *) result; DBG_ENTER("mysqlnd_result_buffered_c::fetch_lengths"); @@ -727,8 +648,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_lengths)(MYSQLND_RES_BUFFERED * /* {{{ mysqlnd_result_unbuffered::fetch_lengths */ -static unsigned long * -MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result TSRMLS_DC) +static zend_ulong * +MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result) { /* simulate output of libmysql */ return (result->last_row_data || result->eof_reached)? result->lengths : NULL; @@ -737,15 +658,15 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_lengths)(MYSQLND_RES_UNBUFFERED /* {{{ mysqlnd_res::fetch_lengths */ -static unsigned long * -MYSQLND_METHOD(mysqlnd_res, fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC) +static zend_ulong * +MYSQLND_METHOD(mysqlnd_res, fetch_lengths)(MYSQLND_RES * const result) { - unsigned long * ret; + zend_ulong * ret; DBG_ENTER("mysqlnd_res::fetch_lengths"); ret = result->stored_data && result->stored_data->m.fetch_lengths ? - result->stored_data->m.fetch_lengths(result->stored_data TSRMLS_CC) : + result->stored_data->m.fetch_lengths(result->stored_data) : (result->unbuf && result->unbuf->m.fetch_lengths ? - result->unbuf->m.fetch_lengths(result->unbuf TSRMLS_CC) : + result->unbuf->m.fetch_lengths(result->unbuf) : NULL ); DBG_RETURN(ret); @@ -755,7 +676,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC) /* {{{ mysqlnd_result_unbuffered::fetch_row_c */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, void * param, unsigned int flags, zend_bool * fetched_anything TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, void * param, unsigned int flags, zend_bool * fetched_anything) { enum_func_status ret; MYSQLND_ROW_C *row = (MYSQLND_ROW_C *) param; @@ -785,7 +706,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi result->m.unbuffered_free_last_data() before it. The function returns always true. */ if (PASS == (ret = PACKET_READ(row_packet, result->conn)) && !row_packet->eof) { - result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL TSRMLS_CC); + result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL); result->unbuf->last_row_data = row_packet->fields; result->unbuf->last_row_buffer = row_packet->row_buffer; @@ -802,7 +723,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi field_count, row_packet->fields_metadata, result->conn->options->int_and_float_native, - result->conn->stats TSRMLS_CC); + result->conn->stats); if (PASS != rc) { DBG_RETURN(FAIL); } @@ -810,11 +731,11 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi *row = mnd_malloc(field_count * sizeof(char *)); if (*row) { MYSQLND_FIELD * field = meta->fields; - unsigned long * lengths = result->unbuf->lengths; + zend_ulong * lengths = result->unbuf->lengths; for (i = 0; i < field_count; i++, field++) { - zval * data = result->unbuf->last_row_data[i]; - unsigned int len = (Z_TYPE_P(data) == IS_NULL)? 0:Z_STRLEN_P(data); + zval * data = &result->unbuf->last_row_data[i]; + unsigned int len = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0; /* BEGIN difference between normal normal fetch and _c */ if (Z_TYPE_P(data) != IS_NULL) { @@ -863,7 +784,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi } else { CONN_SET_STATE(result->conn, CONN_READY); } - result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL TSRMLS_CC); + result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL); } DBG_INF_FMT("ret=%s fetched=%u", ret == PASS? "PASS":"FAIL", *fetched_anything); @@ -874,7 +795,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(MYSQLND_RES * result, voi /* {{{ mysqlnd_result_unbuffered::fetch_row */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything) { enum_func_status ret; zval *row = (zval *) param; @@ -904,7 +825,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void result->m.unbuffered_free_last_data() before it. The function returns always true. */ if (PASS == (ret = PACKET_READ(row_packet, result->conn)) && !row_packet->eof) { - result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL TSRMLS_CC); + result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL); result->unbuf->last_row_data = row_packet->fields; result->unbuf->last_row_buffer = row_packet->row_buffer; @@ -921,22 +842,22 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void field_count, row_packet->fields_metadata, result->conn->options->int_and_float_native, - result->conn->stats TSRMLS_CC); + result->conn->stats); if (PASS != rc) { DBG_RETURN(FAIL); } { HashTable * row_ht = Z_ARRVAL_P(row); MYSQLND_FIELD * field = meta->fields; - unsigned long * lengths = result->unbuf->lengths; + zend_ulong * lengths = result->unbuf->lengths; for (i = 0; i < field_count; i++, field++) { - zval * data = result->unbuf->last_row_data[i]; - unsigned int len = (Z_TYPE_P(data) == IS_NULL)? 0:Z_STRLEN_P(data); + zval * data = &result->unbuf->last_row_data[i]; + unsigned int len = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0; if (flags & MYSQLND_FETCH_NUM) { - Z_ADDREF_P(data); - zend_hash_next_index_insert(row_ht, &data, sizeof(zval *), NULL); + Z_TRY_ADDREF_P(data); + zend_hash_next_index_insert(row_ht, data); } if (flags & MYSQLND_FETCH_ASSOC) { /* zend_hash_quick_update needs length + trailing zero */ @@ -946,15 +867,11 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void the index is a numeric and convert it to it. This however means constant hashing of the column name, which is not needed as it can be precomputed. */ - Z_ADDREF_P(data); + Z_TRY_ADDREF_P(data); if (meta->zend_hash_keys[i].is_numeric == FALSE) { - zend_hash_quick_update(Z_ARRVAL_P(row), - field->name, - field->name_length + 1, - meta->zend_hash_keys[i].key, - (void *) &data, sizeof(zval *), NULL); + zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data); } else { - zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, (void *) &data, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data); } } @@ -993,7 +910,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void } else { CONN_SET_STATE(result->conn, CONN_READY); } - result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL TSRMLS_CC); + result->unbuf->m.free_last_data(result->unbuf, result->conn? result->conn->stats : NULL); } DBG_INF_FMT("ret=%s fetched=%u", ret == PASS? "PASS":"FAIL", *fetched_anything); @@ -1004,7 +921,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void /* {{{ mysqlnd_res::use_result */ static MYSQLND_RES * -MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, zend_bool ps TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, zend_bool ps) { DBG_ENTER("mysqlnd_res::use_result"); @@ -1016,7 +933,7 @@ MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, zend_bool ps result->type = MYSQLND_RES_PS_UNBUF; } - result->unbuf = mysqlnd_result_unbuffered_init(result->field_count, ps, result->persistent TSRMLS_CC); + result->unbuf = mysqlnd_result_unbuffered_init(result->field_count, ps, result->persistent); if (!result->unbuf) { goto oom; } @@ -1027,7 +944,7 @@ MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, zend_bool ps this to be not NULL. */ /* FALSE = non-persistent */ - result->unbuf->row_packet = result->conn->protocol->m.get_row_packet(result->conn->protocol, FALSE TSRMLS_CC); + result->unbuf->row_packet = result->conn->protocol->m.get_row_packet(result->conn->protocol, FALSE); if (!result->unbuf->row_packet) { goto oom; } @@ -1048,7 +965,7 @@ oom: /* {{{ mysqlnd_result_buffered::fetch_row_c */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void * param, unsigned int flags, zend_bool * fetched_anything TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void * param, unsigned int flags, zend_bool * fetched_anything) { MYSQLND_ROW_C * row = (MYSQLND_ROW_C *) param; const MYSQLND_RES_METADATA * const meta = result->meta; @@ -1063,17 +980,17 @@ MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void if (set->data_cursor && (set->data_cursor - set->data) < (result->stored_data->row_count * field_count)) { - zval **current_row = set->data_cursor; + zval *current_row = set->data_cursor; unsigned int i; - if (NULL == current_row[0]) { + if (Z_ISUNDEF(current_row[0])) { uint64_t row_num = (set->data_cursor - set->data) / field_count; enum_func_status rc = set->m.row_decoder(set->row_buffers[row_num], current_row, field_count, meta->fields, result->conn->options->int_and_float_native, - result->conn->stats TSRMLS_CC); + result->conn->stats); if (rc != PASS) { DBG_RETURN(FAIL); } @@ -1084,8 +1001,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void String of zero size, definitely can't be the next max_length. Thus for NULL and zero-length we are quite efficient. */ - if (Z_TYPE_P(current_row[i]) >= IS_STRING) { - unsigned long len = Z_STRLEN_P(current_row[i]); + if (Z_TYPE(current_row[i]) == IS_STRING) { + zend_ulong len = Z_STRLEN(current_row[i]); if (meta->fields[i].max_length < len) { meta->fields[i].max_length = len; } @@ -1098,9 +1015,9 @@ MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void *row = mnd_malloc(field_count * sizeof(char *)); if (*row) { for (i = 0; i < field_count; i++) { - zval * data = current_row[i]; + zval * data = ¤t_row[i]; - set->lengths[i] = (Z_TYPE_P(data) == IS_NULL)? 0:Z_STRLEN_P(data); + set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0; if (Z_TYPE_P(data) != IS_NULL) { convert_to_string(data); @@ -1112,7 +1029,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void set->data_cursor += field_count; MYSQLND_INC_GLOBAL_STATISTIC(STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF); } else { - SET_OOM_ERROR(*result->conn->error_info); + SET_OOM_ERROR(*result->conn->error_info); } /* END difference between normal normal fetch and _c */ @@ -1140,7 +1057,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(MYSQLND_RES * result, void /* {{{ mysqlnd_result_buffered_zval::fetch_row */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything) { zval * row = (zval *) param; const MYSQLND_RES_METADATA * const meta = result->meta; @@ -1155,16 +1072,16 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo (set->data_cursor - set->data) < (set->row_count * field_count)) { unsigned int i; - zval **current_row = set->data_cursor; + zval *current_row = set->data_cursor; - if (NULL == current_row[0]) { + if (Z_ISUNDEF(current_row[0])) { uint64_t row_num = (set->data_cursor - set->data) / field_count; enum_func_status rc = set->m.row_decoder(set->row_buffers[row_num], current_row, field_count, meta->fields, result->conn->options->int_and_float_native, - result->conn->stats TSRMLS_CC); + result->conn->stats); if (rc != PASS) { DBG_RETURN(FAIL); } @@ -1175,8 +1092,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo String of zero size, definitely can't be the next max_length. Thus for NULL and zero-length we are quite efficient. */ - if (Z_TYPE_P(current_row[i]) >= IS_STRING) { - unsigned long len = Z_STRLEN_P(current_row[i]); + if (Z_TYPE(current_row[i]) == IS_STRING) { + zend_ulong len = Z_STRLEN(current_row[i]); if (meta->fields[i].max_length < len) { meta->fields[i].max_length = len; } @@ -1185,13 +1102,13 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo } for (i = 0; i < field_count; i++) { - zval * data = current_row[i]; + zval * data = ¤t_row[i]; - set->lengths[i] = (Z_TYPE_P(data) == IS_NULL)? 0:Z_STRLEN_P(data); + set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0; if (flags & MYSQLND_FETCH_NUM) { - Z_ADDREF_P(data); - zend_hash_next_index_insert(Z_ARRVAL_P(row), &data, sizeof(zval *), NULL); + Z_TRY_ADDREF_P(data); + zend_hash_next_index_insert(Z_ARRVAL_P(row), data); } if (flags & MYSQLND_FETCH_ASSOC) { /* zend_hash_quick_update needs length + trailing zero */ @@ -1201,17 +1118,11 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo the index is a numeric and convert it to it. This however means constant hashing of the column name, which is not needed as it can be precomputed. */ - Z_ADDREF_P(data); + Z_TRY_ADDREF_P(data); if (meta->zend_hash_keys[i].is_numeric == FALSE) { - zend_hash_quick_update(Z_ARRVAL_P(row), - meta->fields[i].name, - meta->fields[i].name_length + 1, - meta->zend_hash_keys[i].key, - (void *) &data, sizeof(zval *), NULL); + zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data); } else { - zend_hash_index_update(Z_ARRVAL_P(row), - meta->zend_hash_keys[i].key, - (void *) &data, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data); } } } @@ -1233,7 +1144,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo /* {{{ mysqlnd_result_buffered_c::fetch_row */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything) { zval * row = (zval *) param; const MYSQLND_RES_METADATA * const meta = result->meta; @@ -1246,14 +1157,14 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void /* If we haven't read everything */ if (set->current_row < set->row_count) { - zval **current_row; + zval *current_row; enum_func_status rc; unsigned int i; - current_row = mnd_emalloc(field_count * sizeof(zval *)); + current_row = mnd_emalloc(field_count * sizeof(zval)); if (!current_row) { SET_OOM_ERROR(*result->conn->error_info); - DBG_RETURN(FAIL); + DBG_RETURN(FAIL); } rc = result->stored_data->m.row_decoder(result->stored_data->row_buffers[set->current_row], @@ -1261,7 +1172,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void field_count, meta->fields, result->conn->options->int_and_float_native, - result->conn->stats TSRMLS_CC); + result->conn->stats); if (rc != PASS) { DBG_RETURN(FAIL); } @@ -1276,8 +1187,8 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void String of zero size, definitely can't be the next max_length. Thus for NULL and zero-length we are quite efficient. */ - if (Z_TYPE_P(current_row[i]) >= IS_STRING) { - unsigned long len = Z_STRLEN_P(current_row[i]); + if (Z_TYPE(current_row[i]) == IS_STRING) { + zend_ulong len = Z_STRLEN(current_row[i]); if (meta->fields[i].max_length < len) { meta->fields[i].max_length = len; } @@ -1286,13 +1197,13 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void } for (i = 0; i < field_count; i++) { - zval * data = current_row[i]; + zval * data = ¤t_row[i]; + + set->lengths[i] = (Z_TYPE_P(data) == IS_STRING)? Z_STRLEN_P(data) : 0; - set->lengths[i] = (Z_TYPE_P(data) == IS_NULL)? 0:Z_STRLEN_P(data); - if (flags & MYSQLND_FETCH_NUM) { - Z_ADDREF_P(data); - zend_hash_next_index_insert(Z_ARRVAL_P(row), &data, sizeof(zval *), NULL); + Z_TRY_ADDREF_P(data); + zend_hash_next_index_insert(Z_ARRVAL_P(row), data); } if (flags & MYSQLND_FETCH_ASSOC) { /* zend_hash_quick_update needs length + trailing zero */ @@ -1302,17 +1213,11 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void the index is a numeric and convert it to it. This however means constant hashing of the column name, which is not needed as it can be precomputed. */ - Z_ADDREF_P(data); + Z_TRY_ADDREF_P(data); if (meta->zend_hash_keys[i].is_numeric == FALSE) { - zend_hash_quick_update(Z_ARRVAL_P(row), - meta->fields[i].name, - meta->fields[i].name_length + 1, - meta->zend_hash_keys[i].key, - (void *) &data, sizeof(zval *), NULL); + zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data); } else { - zend_hash_index_update(Z_ARRVAL_P(row), - meta->zend_hash_keys[i].key, - (void *) &data, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data); } } /* @@ -1321,7 +1226,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void It also simplifies the handling of Z_ADDREF_P because we don't need to check if only either NUM or ASSOC is set but not both. */ - zval_ptr_dtor(&data); + zval_ptr_dtor(data); } mnd_efree(current_row); set->current_row++; @@ -1345,11 +1250,11 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void /* {{{ mysqlnd_res::fetch_row */ static enum_func_status -MYSQLND_METHOD(mysqlnd_res, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool *fetched_anything TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_row)(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool *fetched_anything) { const mysqlnd_fetch_row_func f = result->stored_data? result->stored_data->m.fetch_row:(result->unbuf? result->unbuf->m.fetch_row:NULL); if (f) { - return f(result, param, flags, fetched_anything TSRMLS_CC); + return f(result, param, flags, fetched_anything); } *fetched_anything = FALSE; return PASS; @@ -1364,7 +1269,7 @@ enum_func_status MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA * meta, MYSQLND_MEMORY_POOL_CHUNK ***row_buffers, - zend_bool binary_protocol TSRMLS_DC) + zend_bool binary_protocol) { enum_func_status ret; MYSQLND_PACKET_ROW * row_packet = NULL; @@ -1390,7 +1295,7 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c set->references = 1; /* non-persistent */ - row_packet = conn->protocol->m.get_row_packet(conn->protocol, FALSE TSRMLS_CC); + row_packet = conn->protocol->m.get_row_packet(conn->protocol, FALSE); if (!row_packet) { SET_OOM_ERROR(*conn->error_info); ret = FAIL; @@ -1448,7 +1353,7 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c set->row_count); /* Finally clean */ - if (row_packet->eof) { + if (row_packet->eof) { memset(conn->upsert_status, 0, sizeof(*conn->upsert_status)); conn->upsert_status->warning_count = row_packet->warning_count; conn->upsert_status->server_status = row_packet->server_status; @@ -1490,7 +1395,7 @@ end: static MYSQLND_RES * MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, - const unsigned int flags TSRMLS_DC) + const unsigned int flags) { enum_func_status ret; MYSQLND_MEMORY_POOL_CHUNK ***row_buffers = NULL; @@ -1499,27 +1404,27 @@ MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result, /* We need the conn because we are doing lazy zval initialization in buffered_fetch_row */ /* In case of error the reference will be released in free_result_internal() called indirectly by our caller */ - result->conn = conn->m->get_reference(conn TSRMLS_CC); + result->conn = conn->m->get_reference(conn); result->type = MYSQLND_RES_NORMAL; CONN_SET_STATE(conn, CONN_FETCHING_DATA); if (flags & MYSQLND_STORE_NO_COPY) { - result->stored_data = (MYSQLND_RES_BUFFERED *) mysqlnd_result_buffered_zval_init(result->field_count, flags & MYSQLND_STORE_PS, result->persistent TSRMLS_CC); + result->stored_data = (MYSQLND_RES_BUFFERED *) mysqlnd_result_buffered_zval_init(result->field_count, flags & MYSQLND_STORE_PS, result->persistent); if (!result->stored_data) { SET_OOM_ERROR(*conn->error_info); DBG_RETURN(NULL); } row_buffers = &result->stored_data->row_buffers; } else if (flags & MYSQLND_STORE_COPY) { - result->stored_data = (MYSQLND_RES_BUFFERED *) mysqlnd_result_buffered_c_init(result->field_count, flags & MYSQLND_STORE_PS, result->persistent TSRMLS_CC); + result->stored_data = (MYSQLND_RES_BUFFERED *) mysqlnd_result_buffered_c_init(result->field_count, flags & MYSQLND_STORE_PS, result->persistent); if (!result->stored_data) { SET_OOM_ERROR(*conn->error_info); DBG_RETURN(NULL); } row_buffers = &result->stored_data->row_buffers; } - ret = result->m.store_result_fetch_data(conn, result, result->meta, row_buffers, flags & MYSQLND_STORE_PS TSRMLS_CC); + ret = result->m.store_result_fetch_data(conn, result, result->meta, row_buffers, flags & MYSQLND_STORE_PS); if (FAIL == ret) { if (result->stored_data) { @@ -1540,12 +1445,12 @@ MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result, DBG_RETURN(NULL); } /* if pecalloc is used valgrind barks gcc version 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036] (SUSE Linux) */ - set->data = mnd_emalloc((size_t)(set->row_count * meta->field_count * sizeof(zval *))); + set->data = mnd_emalloc((size_t)(set->row_count * meta->field_count * sizeof(zval))); if (!set->data) { SET_OOM_ERROR(*conn->error_info); DBG_RETURN(NULL); } - memset(set->data, 0, (size_t)(set->row_count * meta->field_count * sizeof(zval *))); + memset(set->data, 0, (size_t)(set->row_count * meta->field_count * sizeof(zval))); } /* Position at the first row */ set->data_cursor = set->data; @@ -1566,7 +1471,7 @@ MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result, /* {{{ mysqlnd_res::skip_result */ static enum_func_status -MYSQLND_METHOD(mysqlnd_res, skip_result)(MYSQLND_RES * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, skip_result)(MYSQLND_RES * const result) { zend_bool fetched_anything; @@ -1583,7 +1488,7 @@ MYSQLND_METHOD(mysqlnd_res, skip_result)(MYSQLND_RES * const result TSRMLS_DC) result->type == MYSQLND_RES_NORMAL? STAT_FLUSHED_NORMAL_SETS: STAT_FLUSHED_PS_SETS); - while ((PASS == result->m.fetch_row(result, NULL, 0, &fetched_anything TSRMLS_CC)) && fetched_anything == TRUE) { + while ((PASS == result->m.fetch_row(result, NULL, 0, &fetched_anything)) && fetched_anything == TRUE) { /* do nothing */; } } @@ -1594,7 +1499,7 @@ MYSQLND_METHOD(mysqlnd_res, skip_result)(MYSQLND_RES * const result TSRMLS_DC) /* {{{ mysqlnd_res::free_result */ static enum_func_status -MYSQLND_METHOD(mysqlnd_res, free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, free_result)(MYSQLND_RES * result, zend_bool implicit) { DBG_ENTER("mysqlnd_res::free_result"); @@ -1602,7 +1507,7 @@ MYSQLND_METHOD(mysqlnd_res, free_result)(MYSQLND_RES * result, zend_bool implici implicit == TRUE? STAT_FREE_RESULT_IMPLICIT: STAT_FREE_RESULT_EXPLICIT); - result->m.free_result_internal(result TSRMLS_CC); + result->m.free_result_internal(result); DBG_RETURN(PASS); } /* }}} */ @@ -1610,19 +1515,19 @@ MYSQLND_METHOD(mysqlnd_res, free_result)(MYSQLND_RES * result, zend_bool implici /* {{{ mysqlnd_res::data_seek */ static enum_func_status -MYSQLND_METHOD(mysqlnd_res, data_seek)(MYSQLND_RES * const result, const uint64_t row TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, data_seek)(MYSQLND_RES * const result, const uint64_t row) { DBG_ENTER("mysqlnd_res::data_seek"); DBG_INF_FMT("row=%lu", row); - DBG_RETURN(result->stored_data? result->stored_data->m.data_seek(result->stored_data, row TSRMLS_CC) : FAIL); + DBG_RETURN(result->stored_data? result->stored_data->m.data_seek(result->stored_data, row) : FAIL); } /* }}} */ /* {{{ mysqlnd_result_buffered_zval::data_seek */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_buffered_zval, data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered_zval, data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row) { MYSQLND_RES_BUFFERED_ZVAL * set = (MYSQLND_RES_BUFFERED_ZVAL *) result; DBG_ENTER("mysqlnd_result_buffered_zval::data_seek"); @@ -1640,7 +1545,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, data_seek)(MYSQLND_RES_BUFFERED * c /* {{{ mysqlnd_result_buffered_c::data_seek */ static enum_func_status -MYSQLND_METHOD(mysqlnd_result_buffered_c, data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered_c, data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row) { MYSQLND_RES_BUFFERED_C * set = (MYSQLND_RES_BUFFERED_C *) result; DBG_ENTER("mysqlnd_result_buffered_c::data_seek"); @@ -1658,7 +1563,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, data_seek)(MYSQLND_RES_BUFFERED * cons /* {{{ mysqlnd_result_unbuffered::num_rows */ static uint64_t -MYSQLND_METHOD(mysqlnd_result_unbuffered, num_rows)(const MYSQLND_RES_UNBUFFERED * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_unbuffered, num_rows)(const MYSQLND_RES_UNBUFFERED * const result) { /* Be compatible with libmysql. We count row_count, but will return 0 */ return result->eof_reached? result->row_count:0; @@ -1668,7 +1573,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, num_rows)(const MYSQLND_RES_UNBUFFERED /* {{{ mysqlnd_result_buffered::num_rows */ static uint64_t -MYSQLND_METHOD(mysqlnd_result_buffered, num_rows)(const MYSQLND_RES_BUFFERED * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_result_buffered, num_rows)(const MYSQLND_RES_BUFFERED * const result) { return result->row_count; } @@ -1677,18 +1582,18 @@ MYSQLND_METHOD(mysqlnd_result_buffered, num_rows)(const MYSQLND_RES_BUFFERED * c /* {{{ mysqlnd_res::num_rows */ static uint64_t -MYSQLND_METHOD(mysqlnd_res, num_rows)(const MYSQLND_RES * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, num_rows)(const MYSQLND_RES * const result) { return result->stored_data? - result->stored_data->m.num_rows(result->stored_data TSRMLS_CC) : - (result->unbuf? result->unbuf->m.num_rows(result->unbuf TSRMLS_CC) : 0); + result->stored_data->m.num_rows(result->stored_data) : + (result->unbuf? result->unbuf->m.num_rows(result->unbuf) : 0); } /* }}} */ /* {{{ mysqlnd_res::num_fields */ static unsigned int -MYSQLND_METHOD(mysqlnd_res, num_fields)(const MYSQLND_RES * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, num_fields)(const MYSQLND_RES * const result) { return result->field_count; } @@ -1697,7 +1602,7 @@ MYSQLND_METHOD(mysqlnd_res, num_fields)(const MYSQLND_RES * const result TSRMLS_ /* {{{ mysqlnd_res::fetch_field */ static const MYSQLND_FIELD * -MYSQLND_METHOD(mysqlnd_res, fetch_field)(MYSQLND_RES * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_field)(MYSQLND_RES * const result) { DBG_ENTER("mysqlnd_res::fetch_field"); do { @@ -1716,12 +1621,12 @@ MYSQLND_METHOD(mysqlnd_res, fetch_field)(MYSQLND_RES * const result TSRMLS_DC) DBG_INF_FMT("We have decode the whole result set to be able to satisfy this meta request"); /* we have to initialize the rest to get the updated max length */ if (PASS != result->stored_data->m.initialize_result_set_rest(result->stored_data, result->meta, result->conn->stats, - result->conn->options->int_and_float_native TSRMLS_CC)) + result->conn->options->int_and_float_native)) { break; } } - DBG_RETURN(result->meta->m->fetch_field(result->meta TSRMLS_CC)); + DBG_RETURN(result->meta->m->fetch_field(result->meta)); } } while (0); DBG_RETURN(NULL); @@ -1731,7 +1636,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_field)(MYSQLND_RES * const result TSRMLS_DC) /* {{{ mysqlnd_res::fetch_field_direct */ static const MYSQLND_FIELD * -MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr) { DBG_ENTER("mysqlnd_res::fetch_field_direct"); do { @@ -1750,12 +1655,12 @@ MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(MYSQLND_RES * const result, cons DBG_INF_FMT("We have decode the whole result set to be able to satisfy this meta request"); /* we have to initialized the rest to get the updated max length */ if (PASS != result->stored_data->m.initialize_result_set_rest(result->stored_data, result->meta, result->conn->stats, - result->conn->options->int_and_float_native TSRMLS_CC)) + result->conn->options->int_and_float_native)) { break; } } - DBG_RETURN(result->meta->m->fetch_field_direct(result->meta, fieldnr TSRMLS_CC)); + DBG_RETURN(result->meta->m->fetch_field_direct(result->meta, fieldnr)); } } while (0); @@ -1766,7 +1671,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(MYSQLND_RES * const result, cons /* {{{ mysqlnd_res::fetch_field */ static const MYSQLND_FIELD * -MYSQLND_METHOD(mysqlnd_res, fetch_fields)(MYSQLND_RES * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_fields)(MYSQLND_RES * const result) { DBG_ENTER("mysqlnd_res::fetch_fields"); do { @@ -1774,12 +1679,12 @@ MYSQLND_METHOD(mysqlnd_res, fetch_fields)(MYSQLND_RES * const result TSRMLS_DC) if (result->stored_data && (result->stored_data->initialized_rows < result->stored_data->row_count)) { /* we have to initialize the rest to get the updated max length */ if (PASS != result->stored_data->m.initialize_result_set_rest(result->stored_data, result->meta, result->conn->stats, - result->conn->options->int_and_float_native TSRMLS_CC)) + result->conn->options->int_and_float_native)) { break; } } - DBG_RETURN(result->meta->m->fetch_fields(result->meta TSRMLS_CC)); + DBG_RETURN(result->meta->m->fetch_fields(result->meta)); } } while (0); DBG_RETURN(NULL); @@ -1789,18 +1694,18 @@ MYSQLND_METHOD(mysqlnd_res, fetch_fields)(MYSQLND_RES * const result TSRMLS_DC) /* {{{ mysqlnd_res::field_seek */ static MYSQLND_FIELD_OFFSET -MYSQLND_METHOD(mysqlnd_res, field_seek)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, field_seek)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset) { - return result->meta? result->meta->m->field_seek(result->meta, field_offset TSRMLS_CC) : 0; + return result->meta? result->meta->m->field_seek(result->meta, field_offset) : 0; } /* }}} */ /* {{{ mysqlnd_res::field_tell */ static MYSQLND_FIELD_OFFSET -MYSQLND_METHOD(mysqlnd_res, field_tell)(const MYSQLND_RES * const result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, field_tell)(const MYSQLND_RES * const result) { - return result->meta? result->meta->m->field_tell(result->meta TSRMLS_CC) : 0; + return result->meta? result->meta->m->field_tell(result->meta) : 0; } /* }}} */ @@ -1809,7 +1714,7 @@ MYSQLND_METHOD(mysqlnd_res, field_tell)(const MYSQLND_RES * const result TSRMLS_ static void MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, const unsigned int flags, zval *return_value, - enum_mysqlnd_extension extension TSRMLS_DC ZEND_FILE_LINE_DC) + enum_mysqlnd_extension extension ZEND_FILE_LINE_DC) { zend_bool fetched_anything; @@ -1819,9 +1724,9 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, const unsigned int Hint Zend how many elements we will have in the hash. Thus it won't extend and rehash the hash constantly. */ - mysqlnd_array_init(return_value, mysqlnd_num_fields(result) * 2); - if (FAIL == result->m.fetch_row(result, (void *)return_value, flags, &fetched_anything TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading a row"); + array_init_size(return_value, mysqlnd_num_fields(result) * 2); + if (FAIL == result->m.fetch_row(result, (void *)return_value, flags, &fetched_anything)) { + php_error_docref(NULL, E_WARNING, "Error while reading a row"); zval_dtor(return_value); RETVAL_FALSE; } else if (fetched_anything == FALSE) { @@ -1847,19 +1752,19 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, const unsigned int /* {{{ mysqlnd_res::fetch_row_c */ static MYSQLND_ROW_C -MYSQLND_METHOD(mysqlnd_res, fetch_row_c)(MYSQLND_RES * result TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_row_c)(MYSQLND_RES * result) { zend_bool fetched_anything; MYSQLND_ROW_C ret = NULL; DBG_ENTER("mysqlnd_res::fetch_row_c"); if (result->stored_data && result->stored_data->m.fetch_row == MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)) { - MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(result, (void *) &ret, 0, &fetched_anything TSRMLS_CC); + MYSQLND_METHOD(mysqlnd_result_buffered, fetch_row_c)(result, (void *) &ret, 0, &fetched_anything); } else if (result->unbuf && result->unbuf->m.fetch_row == MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)) { - MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(result, (void *) &ret, 0, &fetched_anything TSRMLS_CC); + MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row_c)(result, (void *) &ret, 0, &fetched_anything); } else { ret = NULL; - php_error_docref(NULL TSRMLS_CC, E_ERROR, "result->m.fetch_row has invalid value. Report to the developers"); + php_error_docref(NULL, E_ERROR, "result->m.fetch_row has invalid value. Report to the developers"); } DBG_RETURN(ret); } @@ -1868,16 +1773,16 @@ MYSQLND_METHOD(mysqlnd_res, fetch_row_c)(MYSQLND_RES * result TSRMLS_DC) /* {{{ mysqlnd_res::fetch_all */ static void -MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, const unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC) { - zval *row; - ulong i = 0; + zval row; + zend_ulong i = 0; MYSQLND_RES_BUFFERED *set = result->stored_data; DBG_ENTER("mysqlnd_res::fetch_all"); if ((!result->unbuf && !set)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "fetch_all can be used only with buffered sets"); + php_error_docref(NULL, E_WARNING, "fetch_all can be used only with buffered sets"); if (result->conn) { SET_CLIENT_ERROR(*result->conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "fetch_all can be used only with buffered sets"); } @@ -1886,16 +1791,15 @@ MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, const unsigned int } /* 4 is a magic value. The cast is safe, if larger then the array will be later extended - no big deal :) */ - mysqlnd_array_init(return_value, set? (unsigned int) set->row_count : 4); + array_init_size(return_value, set? (unsigned int) set->row_count : 4); do { - MAKE_STD_ZVAL(row); - mysqlnd_fetch_into(result, flags, row, MYSQLND_MYSQLI); - if (Z_TYPE_P(row) != IS_ARRAY) { + mysqlnd_fetch_into(result, flags, &row, MYSQLND_MYSQLI); + if (Z_TYPE(row) != IS_ARRAY) { zval_ptr_dtor(&row); break; } - add_index_zval(return_value, i++, row); + add_index_zval(return_value, i++, &row); } while (1); DBG_VOID_RETURN; @@ -1905,10 +1809,10 @@ MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, const unsigned int /* {{{ mysqlnd_res::fetch_field_data */ static void -MYSQLND_METHOD(mysqlnd_res, fetch_field_data)(MYSQLND_RES * result, unsigned int offset, zval *return_value TSRMLS_DC) +MYSQLND_METHOD(mysqlnd_res, fetch_field_data)(MYSQLND_RES * result, unsigned int offset, zval *return_value) { zval row; - zval **entry; + zval *entry; unsigned int i = 0; DBG_ENTER("mysqlnd_res::fetch_field_data"); @@ -1917,24 +1821,21 @@ MYSQLND_METHOD(mysqlnd_res, fetch_field_data)(MYSQLND_RES * result, unsigned int Hint Zend how many elements we will have in the hash. Thus it won't extend and rehash the hash constantly. */ - INIT_PZVAL(&row); mysqlnd_fetch_into(result, MYSQLND_FETCH_NUM, &row, MYSQLND_MYSQL); if (Z_TYPE(row) != IS_ARRAY) { zval_dtor(&row); RETVAL_NULL(); DBG_VOID_RETURN; } + zend_hash_internal_pointer_reset(Z_ARRVAL(row)); while (i++ < offset) { zend_hash_move_forward(Z_ARRVAL(row)); - zend_hash_get_current_data(Z_ARRVAL(row), (void **)&entry); } - zend_hash_get_current_data(Z_ARRVAL(row), (void **)&entry); + entry = zend_hash_get_current_data(Z_ARRVAL(row)); - *return_value = **entry; - zval_copy_ctor(return_value); - Z_SET_REFCOUNT_P(return_value, 1); + ZVAL_COPY(return_value, entry); zval_dtor(&row); DBG_VOID_RETURN; @@ -1993,7 +1894,7 @@ MYSQLND_CLASS_METHODS_END; /* {{{ mysqlnd_result_init */ PHPAPI MYSQLND_RES * -mysqlnd_result_init(unsigned int field_count, zend_bool persistent TSRMLS_DC) +mysqlnd_result_init(unsigned int field_count, zend_bool persistent) { size_t alloc_size = sizeof(MYSQLND_RES) + mysqlnd_plugin_count() * sizeof(void *); MYSQLND_RES * ret = mnd_pecalloc(1, alloc_size, persistent); @@ -2015,7 +1916,7 @@ mysqlnd_result_init(unsigned int field_count, zend_bool persistent TSRMLS_DC) /* {{{ mysqlnd_result_unbuffered_init */ PHPAPI MYSQLND_RES_UNBUFFERED * -mysqlnd_result_unbuffered_init(unsigned int field_count, zend_bool ps, zend_bool persistent TSRMLS_DC) +mysqlnd_result_unbuffered_init(unsigned int field_count, zend_bool ps, zend_bool persistent) { size_t alloc_size = sizeof(MYSQLND_RES_UNBUFFERED) + mysqlnd_plugin_count() * sizeof(void *); MYSQLND_RES_UNBUFFERED * ret = mnd_pecalloc(1, alloc_size, persistent); @@ -2026,14 +1927,14 @@ mysqlnd_result_unbuffered_init(unsigned int field_count, zend_bool ps, zend_bool DBG_RETURN(NULL); } - if (!(ret->lengths = mnd_pecalloc(field_count, sizeof(unsigned long), persistent))) { + if (!(ret->lengths = mnd_pecalloc(field_count, sizeof(zend_ulong), persistent))) { mnd_pefree(ret, persistent); DBG_RETURN(NULL); } - if (!(ret->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size) TSRMLS_CC))) { + if (!(ret->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size)))) { mnd_efree(ret->lengths); mnd_pefree(ret, persistent); - DBG_RETURN(NULL); + DBG_RETURN(NULL); } ret->persistent = persistent; @@ -2056,7 +1957,7 @@ mysqlnd_result_unbuffered_init(unsigned int field_count, zend_bool ps, zend_bool /* {{{ mysqlnd_result_buffered_zval_init */ PHPAPI MYSQLND_RES_BUFFERED_ZVAL * -mysqlnd_result_buffered_zval_init(unsigned int field_count, zend_bool ps, zend_bool persistent TSRMLS_DC) +mysqlnd_result_buffered_zval_init(unsigned int field_count, zend_bool ps, zend_bool persistent) { size_t alloc_size = sizeof(MYSQLND_RES_BUFFERED_ZVAL) + mysqlnd_plugin_count() * sizeof(void *); MYSQLND_RES_BUFFERED_ZVAL * ret = mnd_pecalloc(1, alloc_size, persistent); @@ -2066,14 +1967,14 @@ mysqlnd_result_buffered_zval_init(unsigned int field_count, zend_bool ps, zend_b if (!ret) { DBG_RETURN(NULL); } - if (!(ret->lengths = mnd_pecalloc(field_count, sizeof(unsigned long), persistent))) { + if (!(ret->lengths = mnd_pecalloc(field_count, sizeof(zend_ulong), persistent))) { mnd_pefree(ret, persistent); DBG_RETURN(NULL); } - if (!(ret->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size) TSRMLS_CC))) { + if (!(ret->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size)))) { mnd_efree(ret->lengths); mnd_pefree(ret, persistent); - DBG_RETURN(NULL); + DBG_RETURN(NULL); } ret->persistent = persistent; @@ -2099,7 +2000,7 @@ mysqlnd_result_buffered_zval_init(unsigned int field_count, zend_bool ps, zend_b /* {{{ mysqlnd_result_buffered_c_init */ PHPAPI MYSQLND_RES_BUFFERED_C * -mysqlnd_result_buffered_c_init(unsigned int field_count, zend_bool ps, zend_bool persistent TSRMLS_DC) +mysqlnd_result_buffered_c_init(unsigned int field_count, zend_bool ps, zend_bool persistent) { size_t alloc_size = sizeof(MYSQLND_RES_BUFFERED_C) + mysqlnd_plugin_count() * sizeof(void *); MYSQLND_RES_BUFFERED_C * ret = mnd_pecalloc(1, alloc_size, persistent); @@ -2109,14 +2010,14 @@ mysqlnd_result_buffered_c_init(unsigned int field_count, zend_bool ps, zend_bool if (!ret) { DBG_RETURN(NULL); } - if (!(ret->lengths = mnd_pecalloc(field_count, sizeof(unsigned long), persistent))) { + if (!(ret->lengths = mnd_pecalloc(field_count, sizeof(zend_ulong), persistent))) { mnd_pefree(ret, persistent); DBG_RETURN(NULL); } - if (!(ret->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size) TSRMLS_CC))) { + if (!(ret->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size)))) { mnd_efree(ret->lengths); mnd_pefree(ret, persistent); - DBG_RETURN(NULL); + DBG_RETURN(NULL); } ret->persistent = persistent; |
