summaryrefslogtreecommitdiff
path: root/ext/mysqlnd
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-12-18 12:13:17 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-12-18 12:27:30 +0100
commit037512cfce6048aae3d3900abb12310e66bc97a5 (patch)
treefd8e4d8c65e3d245f785305bdc0214ee5dc664f2 /ext/mysqlnd
parentbe93e5a12002057922f5504a752c2a249e27ec8d (diff)
downloadphp-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.h1
-rw-r--r--ext/mysqlnd/mysqlnd_result.c37
-rw-r--r--ext/mysqlnd/mysqlnd_structs.h2
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;