andrey Fri, 18 Mar 2011 13:35:33 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=309382
Log:
new function/methods - mysqlnd_stmt_flush. Removing
code duplication
Changed paths:
U php/php-src/trunk/ext/mysqlnd/mysqlnd.h
U php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c
U php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h
Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd.h
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd.h 2011-03-18 12:33:17 UTC (rev
309381)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd.h 2011-03-18 13:35:33 UTC (rev
309382)
@@ -261,6 +261,7 @@
#define mysqlnd_stmt_free_result(stmt)
(stmt)->m->free_result((stmt) TSRMLS_CC)
#define mysqlnd_stmt_close(stmt, implicit) (stmt)->m->dtor((stmt),
(implicit) TSRMLS_CC)
#define mysqlnd_stmt_reset(stmt)
(stmt)->m->reset((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_flush(stmt)
(stmt)->m->flush((stmt) TSRMLS_CC)
#define mysqlnd_stmt_attr_get(stmt, attr, value)
(stmt)->m->get_attribute((stmt), (attr), (value) TSRMLS_CC)
Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c 2011-03-18 12:33:17 UTC (rev
309381)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c 2011-03-18 13:35:33 UTC (rev
309382)
@@ -628,28 +628,8 @@
}
#endif
- /*
- If right after execute() we have to call the appropriate
- use_result() or store_result() and clean.
- */
- if (stmt->state == MYSQLND_STMT_WAITING_USE_OR_STORE) {
- DBG_INF("fetching result set header");
- /* Do implicit use_result and then flush the result */
- stmt->default_rset_handler = s->m->use_result;
- stmt->default_rset_handler(s TSRMLS_CC);
- }
+ s->m->flush(s TSRMLS_CC);
- if (stmt->state > MYSQLND_STMT_WAITING_USE_OR_STORE) {
- DBG_INF("skipping result");
- /* Flush if anything is left and unbuffered set */
- stmt->result->m.skip_result(stmt->result TSRMLS_CC);
- }
-
- if (stmt->state > MYSQLND_STMT_PREPARED) {
- /* As the buffers have been freed, we should go back to
PREPARED */
- stmt->state = MYSQLND_STMT_PREPARED;
- }
-
/*
Executed, but the user hasn't started to fetch
This will clean also the metadata, but after the EXECUTE call
we will
@@ -1228,7 +1208,46 @@
}
}
+ s->m->flush(s TSRMLS_CC);
+
/*
+ Don't free now, let the result be usable. When the stmt will
again be
+ executed then the result set will be cleaned, the bound
variables will
+ be separated before that.
+ */
+
+ int4store(cmd_buf, stmt->stmt_id);
+ if (CONN_GET_STATE(conn) == CONN_READY &&
+ FAIL == (ret = conn->m->simple_command(conn,
COM_STMT_RESET, cmd_buf,
+
sizeof(cmd_buf), PROT_OK_PACKET,
+
FALSE, TRUE TSRMLS_CC))) {
+ stmt->error_info = conn->error_info;
+ }
+ stmt->upsert_status = conn->upsert_status;
+
+ stmt->state = MYSQLND_STMT_PREPARED;
+ }
+ DBG_INF(ret == PASS? "PASS":"FAIL");
+ DBG_RETURN(ret);
+}
+/* }}} */
+
+
+/* {{{ mysqlnd_stmt::flush */
+static enum_func_status
+MYSQLND_METHOD(mysqlnd_stmt, flush)(MYSQLND_STMT * const s TSRMLS_DC)
+{
+ MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
+ enum_func_status ret = PASS;
+
+ DBG_ENTER("mysqlnd_stmt::flush");
+ if (!stmt || !stmt->conn) {
+ DBG_RETURN(FAIL);
+ }
+ DBG_INF_FMT("stmt=%lu", stmt->stmt_id);
+
+ if (stmt->stmt_id) {
+ /*
If the user decided to close the statement right after
execute()
We have to call the appropriate use_result() or
store_result() and
clean.
@@ -1246,21 +1265,6 @@
}
} while (mysqlnd_stmt_more_results(s) &&
mysqlnd_stmt_next_result(s) == PASS);
- /*
- Don't free now, let the result be usable. When the stmt will
again be
- executed then the result set will be cleaned, the bound
variables will
- be separated before that.
- */
-
- int4store(cmd_buf, stmt->stmt_id);
- if (CONN_GET_STATE(conn) == CONN_READY &&
- FAIL == (ret = conn->m->simple_command(conn,
COM_STMT_RESET, cmd_buf,
-
sizeof(cmd_buf), PROT_OK_PACKET,
-
FALSE, TRUE TSRMLS_CC))) {
- stmt->error_info = conn->error_info;
- }
- stmt->upsert_status = conn->upsert_status;
-
stmt->state = MYSQLND_STMT_PREPARED;
}
DBG_INF(ret == PASS? "PASS":"FAIL");
@@ -2335,7 +2339,8 @@
MYSQLND_METHOD(mysqlnd_stmt, server_status),
mysqlnd_stmt_execute_generate_request,
mysqlnd_stmt_execute_parse_response,
- MYSQLND_METHOD(mysqlnd_stmt, free_stmt_content)
+ MYSQLND_METHOD(mysqlnd_stmt, free_stmt_content),
+ MYSQLND_METHOD(mysqlnd_stmt, flush)
MYSQLND_CLASS_METHODS_END;
Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h 2011-03-18 12:33:17 UTC
(rev 309381)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h 2011-03-18 13:35:33 UTC
(rev 309382)
@@ -641,6 +641,7 @@
typedef enum_func_status
(*func_mysqlnd_stmt__generate_execute_request)(MYSQLND_STMT * const s,
zend_uchar ** request, size_t *request_len, zend_bool * free_buffer TSRMLS_DC);
typedef enum_func_status
(*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s TSRMLS_DC);
typedef void
(*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s TSRMLS_DC);
+typedef enum_func_status (*func_mysqlnd_stmt__flush)(MYSQLND_STMT *
const stmt TSRMLS_DC);
struct st_mysqlnd_stmt_methods
{
@@ -694,6 +695,8 @@
func_mysqlnd_stmt__parse_execute_response parse_execute_response;
func_mysqlnd_stmt__free_stmt_content free_stmt_content;
+
+ func_mysqlnd_stmt__flush flush;
};
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php