com php-src: Merge branch 'PHP-8.0': ext/mysqlnd/mysqlnd_ps .c
| From: | Nikita Popov | Date: | Fri, 18 Dec 2020 09:20:55 +0000 |
| Subject: | com php-src: Merge branch 'PHP-8.0': ext/mysqlnd/mysqlnd_ps .c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-114495@lists.php.net to get a copy of this message | ||
Commit: 4ceea869ee9b280eb420ad379e441122606952de
Author: Nikita Popov <nikita.ppv@gmail.com> Fri, 18 Dec 2020 10:20:55 +0100
Parents: 73533c7dc9347df901e7c24a215d4a54f800ffde ab846231088d9e2d6a2354b52386e48037e95eb5
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=4ceea869ee9b280eb420ad379e441122606952de
Log:
Merge branch 'PHP-8.0'
* PHP-8.0:
MySQLnd: Support cursors in store/get result
Changed paths:
MM ext/mysqlnd/mysqlnd_ps.c
Diff:
diff --cc ext/mysqlnd/mysqlnd_ps.c
index e18e549d9d8,deaf52de622..da42091d34e
--- a/ext/mysqlnd/mysqlnd_ps.c
+++ b/ext/mysqlnd/mysqlnd_ps.c
@@@ -747,14 -1008,13 +770,13 @@@ MYSQLND_METHOD(mysqlnd_stmt, use_result
/* {{{ mysqlnd_fetch_row_cursor */
enum_func_status
-mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES * result, void * param, const unsigned int flags,
zend_bool * fetched_anything)
+mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES * result, zval **row_ptr, const unsigned int flags,
zend_bool * fetched_anything)
{
enum_func_status ret;
- MYSQLND_STMT * s = (MYSQLND_STMT *) param;
- MYSQLND_STMT_DATA * stmt = s? s->data : NULL;
- MYSQLND_CONN_DATA * conn = stmt? stmt->conn : NULL;
+ MYSQLND_STMT_DATA * stmt = result->unbuf->stmt;
+ MYSQLND_CONN_DATA * conn = stmt->conn;
- zend_uchar buf[MYSQLND_STMT_ID_LENGTH /* statement id */ + 4 /* number of rows to fetch */];
MYSQLND_PACKET_ROW * row_packet;
+ void *checkpoint;
DBG_ENTER("mysqlnd_fetch_stmt_row_cursor");
@@@ -777,22 -1037,12 +799,13 @@@
SET_EMPTY_ERROR(stmt->error_info);
SET_EMPTY_ERROR(conn->error_info);
- int4store(buf, stmt->stmt_id);
- int4store(buf + MYSQLND_STMT_ID_LENGTH, 1); /* for now fetch only one row */
-
- {
- const MYSQLND_CSTRING payload = {(const char*) buf, sizeof(buf)};
-
- ret = conn->command->stmt_fetch(conn, payload);
- if (ret == FAIL) {
- COPY_CLIENT_ERROR(stmt->error_info, *conn->error_info);
- DBG_RETURN(FAIL);
- }
-
+ /* for now fetch only one row */
+ if (mysqlnd_stmt_send_cursor_fetch_command(stmt, 1) == FAIL) {
+ DBG_RETURN(FAIL);
}
- row_packet->skip_extraction = stmt->result_bind? FALSE:TRUE;
+ checkpoint = result->memory_pool->checkpoint;
+ mysqlnd_mempool_save_state(result->memory_pool);
UPSERT_STATUS_RESET(stmt->upsert_status);
if (PASS == (ret = PACKET_READ(conn, row_packet)) && !row_packet->eof) {