diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-18 12:13:17 +0100 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-18 12:27:30 +0100 |
| commit | 037512cfce6048aae3d3900abb12310e66bc97a5 (patch) | |
| tree | fd8e4d8c65e3d245f785305bdc0214ee5dc664f2 /ext/mysqlnd | |
| parent | be93e5a12002057922f5504a752c2a249e27ec8d (diff) | |
| download | php-git-037512cfce6048aae3d3900abb12310e66bc97a5.tar.gz | |
Move fetch_all implementation out of mysqlnd
There doesn't seem to be any compelling reason to implement this
in mysqlnd rather than mysqli. It's just a loop over fetch_into.
This makes the function available under libmysqlclient as well,
and thus fixes bug #79372.
Diffstat (limited to 'ext/mysqlnd')
| -rw-r--r-- | ext/mysqlnd/mysqlnd.h | 1 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_result.c | 37 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_structs.h | 2 |
3 files changed, 0 insertions, 40 deletions
diff --git a/ext/mysqlnd/mysqlnd.h b/ext/mysqlnd/mysqlnd.h index d7bc2e3ccc..e8db599b9d 100644 --- a/ext/mysqlnd/mysqlnd.h +++ b/ext/mysqlnd/mysqlnd.h @@ -102,7 +102,6 @@ PHPAPI void mysqlnd_debug(const char *mode); #define mysqlnd_fetch_row_c(result) (result)->m.fetch_row_c((result)) #define mysqlnd_fetch_row_zval(result, row_ptr, fetched) \ (result)->m.fetch_row((result), (row_ptr), 0, (fetched)) -#define mysqlnd_fetch_all(result, flags, return_value) (result)->m.fetch_all((result), (flags), (return_value) ZEND_FILE_LINE_CC) #define mysqlnd_get_connection_stats(conn, values) ((conn)->data)->m->get_statistics((conn)->data, (values) ZEND_FILE_LINE_CC) #define mysqlnd_get_client_stats(values) _mysqlnd_get_client_stats(mysqlnd_global_stats, (values) ZEND_FILE_LINE_CC) diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 620f205998..f7b69749d2 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -1050,49 +1050,12 @@ MYSQLND_METHOD(mysqlnd_res, fetch_row_c)(MYSQLND_RES * result) /* }}} */ -/* {{{ mysqlnd_res::fetch_all */ -static void -MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC) -{ - 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, 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"); - } - RETVAL_NULL(); - DBG_VOID_RETURN; - } - - /* 4 is a magic value. The cast is safe, if larger then the array will be later extended - no big deal :) */ - array_init_size(return_value, set? (unsigned int) set->row_count : 4); - - do { - mysqlnd_fetch_into(result, flags, &row); - if (Z_TYPE(row) != IS_ARRAY) { - zval_ptr_dtor_nogc(&row); - break; - } - add_index_zval(return_value, i++, &row); - } while (1); - - DBG_VOID_RETURN; -} -/* }}} */ - - MYSQLND_CLASS_METHODS_START(mysqlnd_res) MYSQLND_METHOD(mysqlnd_res, fetch_row), MYSQLND_METHOD(mysqlnd_res, use_result), MYSQLND_METHOD(mysqlnd_res, store_result), MYSQLND_METHOD(mysqlnd_res, fetch_into), MYSQLND_METHOD(mysqlnd_res, fetch_row_c), - MYSQLND_METHOD(mysqlnd_res, fetch_all), MYSQLND_METHOD(mysqlnd_res, num_rows), MYSQLND_METHOD(mysqlnd_res, num_fields), MYSQLND_METHOD(mysqlnd_res, skip_result), diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index 47c8e491ec..af2cafc576 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -640,7 +640,6 @@ typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const resul typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, MYSQLND_STMT_DATA *stmt); typedef void (*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC); typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result); -typedef void (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC); typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result); typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result); typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result); @@ -671,7 +670,6 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) func_mysqlnd_res__store_result store_result; func_mysqlnd_res__fetch_into fetch_into; func_mysqlnd_res__fetch_row_c fetch_row_c; - func_mysqlnd_res__fetch_all fetch_all; func_mysqlnd_res__num_rows num_rows; func_mysqlnd_res__num_fields num_fields; func_mysqlnd_res__skip_result skip_result; |
