34 DBG_ENTER(
"mysqlnd_result_unbuffered, free_result");
49 if (
result->free_row_data) {
50 for (
unsigned i = 0; i <
result->field_count; ++i) {
51 zval_ptr_dtor_nogc(&
result->row_data[i]);
62 DBG_ENTER(
"mysqlnd_result_buffered::free_result");
63 DBG_INF_FMT(
"Freeing %" PRIu64
" row(s)", set->row_count);
67 if (set->row_buffers) {
69 set->row_buffers =
NULL;
81 DBG_ENTER(
"mysqlnd_res::free_result_buffers");
82 DBG_INF_FMT(
"%s",
result->unbuf?
"unbuffered":(
result->stored_data?
"buffered":
"unknown"));
84 mysqlnd_result_free_prev_data(
result);
95 }
else if (
result->stored_data) {
112 DBG_ENTER(
"mysqlnd_res::free_result_contents_internal");
132 DBG_ENTER(
"mysqlnd_res::read_result_metadata");
177 DBG_ENTER(
"mysqlnd_query_read_result_set_header");
219 DBG_INF(
"LOAD DATA");
251 DBG_INF(
"Result set pending");
267 DBG_INF(
"This is 'SHOW'/'EXPLAIN'-like query.");
306 DBG_ERR(
"Error occurred while reading metadata");
313 DBG_ERR(
"Error occurred while reading the EOF packet");
324 memset(stmt, 0,
sizeof(*stmt));
354 DBG_INF(
ret ==
PASS?
"PASS":
"FAIL");
370 DBG_ENTER(
"mysqlnd_result_buffered::fetch_lengths");
397 DBG_ENTER(
"mysqlnd_res::fetch_lengths");
399 result->stored_data->m.fetch_lengths(
result->stored_data) :
420 DBG_ENTER(
"mysqlnd_result_unbuffered::fetch_row");
422 *fetched_anything =
FALSE;
436 checkpoint =
result->memory_pool->checkpoint;
450 *row_ptr =
result->row_data;
456 result->memory_pool->checkpoint = checkpoint;
460 size_t *lengths = set->
lengths;
462 for (
unsigned i = 0; i < field_count; i++) {
469 *fetched_anything =
TRUE;
482 }
else if (row_packet->
eof) {
502 result->memory_pool->checkpoint = checkpoint;
504 DBG_INF_FMT(
"ret=%s fetched=%u",
ret ==
PASS?
"PASS":
"FAIL", *fetched_anything);
515 DBG_ENTER(
"mysqlnd_res::use_result");
542 result->unbuf->row_packet = row_packet;
556 DBG_ENTER(
"mysqlnd_result_buffered::fetch_row");
566 *row_ptr =
result->row_data;
588 *fetched_anything =
TRUE;
593 DBG_INF_FMT(
"EOF reached. current_row=%llu", (
unsigned long long) set->
current_row);
594 *fetched_anything =
FALSE;
597 DBG_INF_FMT(
"ret=PASS fetched=%u", *fetched_anything);
608 result->stored_data ?
result->stored_data->m.fetch_row :
611 return f(
result, row_ptr,
flags, fetched_anything);
613 *fetched_anything =
FALSE;
627 uint64_t total_allocated_rows = 0;
628 unsigned int free_rows = 0;
632 DBG_ENTER(
"mysqlnd_res::store_result_fetch_data");
633 if (!set || !row_buffers) {
652 if (total_allocated_rows < 1024) {
653 if (total_allocated_rows == 0) {
655 total_allocated_rows = 1;
657 free_rows = total_allocated_rows;
658 total_allocated_rows *= 2;
662 total_allocated_rows += 1024;
676 *row_buffers = new_row_buffers;
693 if (row_packet.
eof) {
729 DBG_INF_FMT(
"ret=%s row_count=%u warnings=%u server_status=%u",
736 DBG_INF_FMT(
"rows=%llu", (
unsigned long long)set->
row_count);
752 DBG_ENTER(
"mysqlnd_res::store_result");
756 result->conn = conn->m->get_reference(conn);
762 row_buffers = &
result->stored_data->row_buffers;
767 if (
result->stored_data) {
774 result->stored_data->current_row = 0;
789 bool fetched_anything;
791 DBG_ENTER(
"mysqlnd_res::skip_result");
799 DBG_INF(
"skipping result");
820 DBG_ENTER(
"mysqlnd_res::free_result");
837 DBG_ENTER(
"mysqlnd_res::data_seek");
838 DBG_INF_FMT(
"row=%" PRIu64, row);
849 DBG_ENTER(
"mysqlnd_result_buffered::data_seek");
852 if (row >=
result->row_count) {
855 result->current_row = row;
885 return result->stored_data?
896 return result->field_count;
905 DBG_ENTER(
"mysqlnd_res::fetch_field");
920 DBG_ENTER(
"mysqlnd_res::fetch_field_direct");
936 DBG_ENTER(
"mysqlnd_res::fetch_fields");
970 bool fetched_anything;
980 DBG_ENTER(
"mysqlnd_res::fetch_into");
984 }
else if (fetched_anything ==
FALSE) {
998 for (
unsigned i = 0; i < meta->
field_count; i++, field++) {
1022 zval_ptr_dtor_nogc(
data);
1033 bool fetched_anything;
1036 DBG_ENTER(
"mysqlnd_res::fetch_row_c");
1038 mysqlnd_result_free_prev_data(
result);
1039 if (
result->m.fetch_row(
result, &row_data, 0, &fetched_anything) ==
PASS && fetched_anything) {
1044 for (
unsigned i = 0; i <
field_count; i++, field++) {
1053 result->free_row_data = 1;
1117 DBG_ENTER(
"mysqlnd_result_init");
1128 ret->free_row_data = 0;
1130 ret->memory_pool = pool;
1149 DBG_ENTER(
"mysqlnd_result_unbuffered_init");
1154 ret->result_set_memory_pool = pool;
1184 DBG_ENTER(
"mysqlnd_result_buffered_init");
1191 ret->result_set_memory_pool = pool;
memset(ptr, 0, type->size)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
#define MYSQLND_INC_GLOBAL_STATISTIC(statistic)
PHPAPI unsigned int mysqlnd_plugin_count(void)
#define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic)
zend_long mempool_default_size
#define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value)
#define MYSQLND_METHOD(class, method)
#define mnd_erealloc(ptr, new_size)
#define mnd_emalloc(size)
PHPAPI void mysqlnd_mempool_destroy(MYSQLND_MEMORY_POOL *pool)
PHPAPI void mysqlnd_mempool_restore_state(MYSQLND_MEMORY_POOL *pool)
PHPAPI void mysqlnd_mempool_save_state(MYSQLND_MEMORY_POOL *pool)
PHPAPI MYSQLND_MEMORY_POOL * mysqlnd_mempool_create(size_t arena_size)
PHPAPI void mysqlnd_error_info_init(MYSQLND_ERROR_INFO *const info, const bool persistent)
PHPAPI void mysqlnd_error_info_free_contents(MYSQLND_ERROR_INFO *const info)
PHPAPI const char *const mysqlnd_out_of_sync
mysqlnd_query_read_result_set_header
#define SET_CONNECTION_STATE(state_struct, s)
#define UPSERT_STATUS_GET_SERVER_STATUS(status)
#define UPSERT_STATUS_GET_WARNINGS(status)
#define UPSERT_STATUS_SET_WARNINGS(status, warnings)
#define UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR(status)
#define GET_CONNECTION_STATE(state_struct)
#define UPSERT_STATUS_SET_LAST_INSERT_ID(status, id)
#define UPSERT_STATUS_RESET(status)
#define UPSERT_STATUS_SET_AFFECTED_ROWS(status, rows)
#define UPSERT_STATUS_SET_SERVER_STATUS(status, server_st)
#define DBG_RETURN(value)
@ CONN_NEXT_RESULT_PENDING
#define CR_SERVER_GONE_ERROR
#define SERVER_QUERY_NO_INDEX_USED
#define SERVER_QUERY_NO_GOOD_INDEX_USED
@ STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF
@ STAT_FREE_RESULT_EXPLICIT
@ STAT_FLUSHED_NORMAL_SETS
@ STAT_ROWS_BUFFERED_FROM_CLIENT_NORMAL
@ STAT_ROWS_BUFFERED_FROM_CLIENT_PS
@ STAT_FREE_RESULT_IMPLICIT
@ STAT_ROWS_FETCHED_FROM_CLIENT_PS_UNBUF
@ STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_UNBUF
@ STAT_ROWS_SKIPPED_NORMAL
@ STAT_ROWS_FETCHED_FROM_CLIENT_PS_BUF
#define SERVER_QUERY_WAS_SLOW
enum mysqlnd_collected_stats enum_mysqlnd_collected_stats
#define CR_COMMANDS_OUT_OF_SYNC
#define SERVER_MORE_RESULTS_EXISTS
enum func_status enum_func_status
#define CR_CLIENT_INTERACTION_TIMEOUT
#define mysqlnd_result_buffered_get_methods()
#define mysqlnd_result_unbuffered_get_methods()
#define mysqlnd_result_get_methods()
enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA *conn, const char *const filename, bool *is_warning)
PHPAPI MYSQLND_RES_BUFFERED * mysqlnd_result_buffered_init(MYSQLND_RES *result, const unsigned int field_count, MYSQLND_STMT_DATA *stmt)
PHPAPI MYSQLND_RES_UNBUFFERED * mysqlnd_result_unbuffered_init(MYSQLND_RES *result, const unsigned int field_count, MYSQLND_STMT_DATA *stmt)
struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA
struct st_mysqlnd_field MYSQLND_FIELD
#define MYSQLND_CLASS_METHODS_END
struct st_mysqlnd_connection_data MYSQLND_CONN_DATA
struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL
struct st_mysqlnd_stats MYSQLND_STATS
unsigned int MYSQLND_FIELD_OFFSET
struct st_mysqlnd_buffered_result MYSQLND_RES_BUFFERED
struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED
#define SET_EMPTY_ERROR(info)
struct st_mysqlnd_stmt_data MYSQLND_STMT_DATA
#define COPY_CLIENT_ERROR(dest, source)
struct st_mysqlnd_stmt MYSQLND_STMT
#define SET_OOM_ERROR(info)
#define SET_CLIENT_ERROR(info, err_no, sqlstate, error)
struct st_mysqlnd_row_buffer MYSQLND_ROW_BUFFER
enum_func_status(* mysqlnd_fetch_row_func)(MYSQLND_RES *result, zval **row, const unsigned int flags, bool *fetched_anything)
#define MYSQLND_CLASS_METHODS_START(class)
struct st_mysqlnd_res MYSQLND_RES
enum_func_status php_mysqlnd_rowp_read_text_protocol(MYSQLND_ROW_BUFFER *row_buffer, zval *fields, unsigned int field_count, const MYSQLND_FIELD *fields_metadata, bool as_int_or_float, MYSQLND_STATS *stats)
enum_func_status php_mysqlnd_rowp_read_binary_protocol(MYSQLND_ROW_BUFFER *row_buffer, zval *fields, const unsigned int field_count, const MYSQLND_FIELD *const fields_metadata, const bool as_int_or_float, MYSQLND_STATS *const stats)
struct st_mysqlnd_packet_eof MYSQLND_PACKET_EOF
#define PACKET_FREE(packet)
struct st_mysqlnd_packet_rset_header MYSQLND_PACKET_RSET_HEADER
#define MYSQLND_NULL_LENGTH
#define PACKET_READ(conn, packet)
struct st_mysqlnd_packet_row MYSQLND_PACKET_ROW
unsigned const char * end
MYSQLND_ROW_BUFFER * row_buffers
MYSQLND_ERROR_INFO error_info
MYSQLND_RES * current_result
MYSQLND_SESSION_OPTIONS * options
MYSQLND_UPSERT_STATUS * upsert_status
enum_mysqlnd_query_type last_query_type
MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory
MYSQLND_ERROR_INFO * error_info
MYSQLND_CONNECTION_STATE state
MYSQLND_STRING last_message
char error[MYSQLND_ERRMSG_SIZE+1]
void *(* get_chunk)(MYSQLND_MEMORY_POOL *pool, size_t size)
MYSQLND_FIELD * fields_metadata
MYSQLND_ROW_BUFFER row_buffer
MYSQLND_ERROR_INFO error_info
MYSQLND_MEMORY_POOL * result_set_memory_pool
bool int_and_float_native
enum_mysqlnd_stmt_state state
MYSQLND_ERROR_INFO * error_info
MYSQLND_ROW_BUFFER last_row_buffer
#define array_init_size(arg, size)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
#define convert_to_string(op)
#define ZEND_FILE_LINE_DC
#define Z_TRY_ADDREF_P(pz)
#define Z_STRVAL_P(zval_p)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_STRLEN_P(zval_p)