diff options
author | Andrey Hristov <andrey@php.net> | 2014-03-05 16:22:23 +0200 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2014-03-05 16:22:23 +0200 |
commit | 6b804b96b8c454954d30ed8f0cf1a05d91801c4f (patch) | |
tree | e75808939815dd5766c886fed715a63a81b9f8d2 /ext/mysqlnd/mysqlnd_structs.h | |
parent | 1b922895fc4ea22b9f1e6679faf1a3d7b801a64e (diff) | |
download | php-git-6b804b96b8c454954d30ed8f0cf1a05d91801c4f.tar.gz |
Refactor the result set data structures. Move more to the buffered and unbuffered
substructures. Add methods to these too. Preparing for pluggable interface for
returning data to the engine (zvals, c-style, something else)
Diffstat (limited to 'ext/mysqlnd/mysqlnd_structs.h')
-rw-r--r-- | ext/mysqlnd/mysqlnd_structs.h | 115 |
1 files changed, 81 insertions, 34 deletions
diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index a9048b2b13..5c035a5934 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -243,11 +243,12 @@ typedef struct st_mysqlnd_debug MYSQLND_DEBUG; typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const TSRMLS_DC); typedef enum_func_status (*mysqlnd_fetch_row_func)(MYSQLND_RES *result, - void *param, + void * param, unsigned int flags, - zend_bool *fetched_anything + zend_bool * fetched_anything TSRMLS_DC); + typedef struct st_mysqlnd_stats MYSQLND_STATS; typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change TSRMLS_DC); @@ -606,10 +607,11 @@ struct st_mysqlnd_conn_methods func_mysqlnd_conn__close close; }; + /* for decoding - binary or text protocol */ +typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, + unsigned int field_count, const MYSQLND_FIELD * fields_metadata, + zend_bool as_int_or_float, MYSQLND_STATS * stats TSRMLS_DC); -typedef mysqlnd_fetch_row_func fetch_row; -typedef mysqlnd_fetch_row_func fetch_row_normal_buffered; /* private */ -typedef mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */ typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, zend_bool ps_protocol TSRMLS_DC); typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, zend_bool ps TSRMLS_DC); @@ -620,17 +622,16 @@ typedef void (*func_mysqlnd_res__fetch_field_data)(MYSQLND_RES *result, unsi typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result TSRMLS_DC); typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result TSRMLS_DC); typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result TSRMLS_DC); -typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * result, uint64_t row TSRMLS_DC); -typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC); +typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * const result, const uint64_t row TSRMLS_DC); +typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result TSRMLS_DC); typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result TSRMLS_DC); -typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC); +typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC); typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result TSRMLS_DC); typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn TSRMLS_DC); typedef unsigned long * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC); typedef enum_func_status (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol TSRMLS_DC); -typedef enum_func_status (*func_mysqlnd_res__initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC); typedef void (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result TSRMLS_DC); /* private */ typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, zend_bool implicit TSRMLS_DC); @@ -639,18 +640,12 @@ typedef void (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result TS typedef void (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result TSRMLS_DC); typedef void (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *result TSRMLS_DC); - /* for decoding - binary or text protocol */ -typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, - unsigned int field_count, const MYSQLND_FIELD * fields_metadata, - zend_bool as_int_or_float, MYSQLND_STATS * stats TSRMLS_DC); typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(unsigned int field_count, zend_bool persistent TSRMLS_DC); struct st_mysqlnd_res_methods { mysqlnd_fetch_row_func fetch_row; - mysqlnd_fetch_row_func fetch_row_normal_buffered; /* private */ - mysqlnd_fetch_row_func fetch_row_normal_unbuffered; /* private */ func_mysqlnd_res__use_result use_result; func_mysqlnd_res__store_result store_result; @@ -670,16 +665,10 @@ struct st_mysqlnd_res_methods func_mysqlnd_res__read_result_metadata read_result_metadata; func_mysqlnd_res__fetch_lengths fetch_lengths; func_mysqlnd_res__store_result_fetch_data store_result_fetch_data; - func_mysqlnd_res__initialize_result_set_rest initialize_result_set_rest; func_mysqlnd_res__free_result_buffers free_result_buffers; func_mysqlnd_res__free_result free_result; func_mysqlnd_res__free_result_internal free_result_internal; func_mysqlnd_res__free_result_contents free_result_contents; - func_mysqlnd_res__free_buffered_data free_buffered_data; - func_mysqlnd_res__unbuffered_free_last_data unbuffered_free_last_data; - - /* for decoding - binary or text protocol */ - func_mysqlnd_res__row_decoder row_decoder; func_mysqlnd_res__result_meta_init result_meta_init; @@ -691,10 +680,45 @@ struct st_mysqlnd_res_methods }; +typedef uint64_t (*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result TSRMLS_DC); +typedef unsigned long * (*func_mysqlnd_result_unbuffered__fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result TSRMLS_DC); +typedef void (*func_mysqlnd_result_unbuffered__free_last_data)(MYSQLND_RES_UNBUFFERED * result, MYSQLND_STATS * const global_stats TSRMLS_DC); +typedef void (*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats TSRMLS_DC); + +struct st_mysqlnd_result_unbuffered_methods +{ + mysqlnd_fetch_row_func fetch_row; + func_mysqlnd_res__row_decoder row_decoder; + func_mysqlnd_result_unbuffered__num_rows num_rows; + func_mysqlnd_result_unbuffered__fetch_lengths fetch_lengths; + func_mysqlnd_result_unbuffered__free_last_data free_last_data; + func_mysqlnd_result_unbuffered__free_result free_result; +}; + +typedef uint64_t (*func_mysqlnd_result_buffered__num_rows)(const MYSQLND_RES_BUFFERED * const result TSRMLS_DC); +typedef enum_func_status (*func_mysqlnd_result_buffered__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); +typedef unsigned long * (*func_mysqlnd_result_buffered__fetch_lengths)(MYSQLND_RES_BUFFERED * const result TSRMLS_DC); +typedef enum_func_status (*func_mysqlnd_result_buffered__data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row TSRMLS_DC); +typedef void (*func_mysqlnd_result_buffered__free_result)(MYSQLND_RES_BUFFERED * const result TSRMLS_DC); + +struct st_mysqlnd_result_buffered_methods +{ + mysqlnd_fetch_row_func fetch_row; + func_mysqlnd_res__row_decoder row_decoder; + func_mysqlnd_result_buffered__num_rows num_rows; + func_mysqlnd_result_buffered__fetch_lengths fetch_lengths; + func_mysqlnd_result_buffered__data_seek data_seek; + func_mysqlnd_result_buffered__initialize_result_set_rest initialize_result_set_rest; + func_mysqlnd_result_buffered__free_result free_result; +}; + + typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta TSRMLS_DC); -typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC); +typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC); typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC); +typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_seek)(MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC); typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn TSRMLS_DC); typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC); typedef void (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta TSRMLS_DC); @@ -705,6 +729,7 @@ struct st_mysqlnd_res_meta_methods func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct; func_mysqlnd_res_meta__fetch_fields fetch_fields; func_mysqlnd_res_meta__field_tell field_tell; + func_mysqlnd_res_meta__field_seek field_seek; func_mysqlnd_res_meta__read_metadata read_metadata; func_mysqlnd_res_meta__clone_metadata clone_metadata; func_mysqlnd_res_meta__free_metadata free_metadata; @@ -962,7 +987,7 @@ struct st_mysqlnd_result_metadata size_t bit_fields_total_len; /* trailing \0 not counted */ zend_bool persistent; - struct st_mysqlnd_res_meta_methods *m; + struct st_mysqlnd_res_meta_methods * m; }; @@ -974,20 +999,51 @@ struct st_mysqlnd_buffered_result uint64_t row_count; uint64_t initialized_rows; + /* + Column lengths of current row - both buffered and unbuffered. + For buffered results it duplicates the data found in **data + */ + unsigned long *lengths; + + MYSQLND_MEMORY_POOL *result_set_memory_pool; + unsigned int references; MYSQLND_ERROR_INFO error_info; + + unsigned int field_count; + zend_bool ps; + zend_bool persistent; + + struct st_mysqlnd_result_buffered_methods m; }; struct st_mysqlnd_unbuffered_result { + /* For unbuffered (both normal and PS) */ zval **last_row_data; MYSQLND_MEMORY_POOL_CHUNK *last_row_buffer; + /* + Column lengths of current row - both buffered and unbuffered. + For buffered results it duplicates the data found in **data + */ + unsigned long *lengths; + + MYSQLND_MEMORY_POOL *result_set_memory_pool; + + struct st_mysqlnd_packet_row * row_packet; + uint64_t row_count; zend_bool eof_reached; + + unsigned int field_count; + zend_bool ps; + zend_bool persistent; + + struct st_mysqlnd_result_unbuffered_methods m; }; @@ -1001,18 +1057,9 @@ struct st_mysqlnd_res MYSQLND_RES_METADATA *meta; /* To be used with store_result() - both normal and PS */ - MYSQLND_RES_BUFFERED *stored_data; - MYSQLND_RES_UNBUFFERED *unbuf; - - /* - Column lengths of current row - both buffered and unbuffered. - For buffered results it duplicates the data found in **data - */ - unsigned long *lengths; - - struct st_mysqlnd_packet_row * row_packet; + MYSQLND_RES_BUFFERED *stored_data; + MYSQLND_RES_UNBUFFERED *unbuf; - MYSQLND_MEMORY_POOL * result_set_memory_pool; zend_bool persistent; struct st_mysqlnd_res_methods m; |