[prev in list] [next in list] [prev in thread] [next in thread]
List: pecl-cvs
Subject: [PECL-CVS] =?utf-8?q?svn:_/pecl/mysqlnd=5Fuh/trunk/_mysqlnd=5Fuh=5Fclass=5Fconn=5Fdata.c_mysqlnd=5Fu
From: Ulf_Wendel <uw () php ! net>
Date: 2013-12-19 20:19:38
Message-ID: svn-uw-1387484378-332477-243092267 () svn ! php ! net
[Download RAW message or body]
uw Thu, 19 Dec 2013 20:19:38 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=332477
Log:
New ConnData::CommitOrRollback()
Changed paths:
U pecl/mysqlnd_uh/trunk/mysqlnd_uh_class_conn_data.c
U pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_conn_data.c
A pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_tx_commit_or_rollback.phpt
U pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_connection_data_interface.phpt
U pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_constants.phpt
["svn-diffs-332477.txt" (text/x-diff)]
Modified: pecl/mysqlnd_uh/trunk/mysqlnd_uh_class_conn_data.c
===================================================================
--- pecl/mysqlnd_uh/trunk/mysqlnd_uh_class_conn_data.c 2013-12-19 19:58:17 UTC (rev \
332476)
+++ pecl/mysqlnd_uh/trunk/mysqlnd_uh_class_conn_data.c 2013-12-19 20:19:38 UTC (rev \
332477) @@ -802,6 +802,33 @@
/* {{{ */
+PHP_METHOD(MYSQLND_UH_CLASS_CONN_DATA_NAME, txCommitOrRollback)
+{
+ zval* mysqlnd_rsrc;
+ MYSQLND_UH_RES_CONN* res_conn;
+ MYSQLND_CONN_DATA *conn_data;
+ long mode;
+ const char *name;
+ unsigned int name_len;
+ zend_bool commit;
+
+ CHECK_ENABLED();
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rbls", &mysqlnd_rsrc, \
&commit, &mode, &name, &name_len) == FAILURE) { + RETURN_NULL();
+ }
+ ZEND_FETCH_RESOURCE(res_conn, MYSQLND_UH_RES_CONN*, &mysqlnd_rsrc, -1, \
MYSQLND_UH_RES_MYSQLND_CONN_DATA_NAME, le_mysqlnd_uh_mysqlnd_conn_data); + conn_data \
= res_conn->mysqlnd_conn_data; +
+ if (PASS == org_mysqlnd_conn_data_methods.tx_commit_or_rollback(conn_data, (const \
zend_bool)commit, (const unsigned int)mode, (const char* const)name TSRMLS_CC)) { \
+ RETVAL_TRUE; + } else {
+ RETVAL_FALSE;
+ }
+}
+/* }}} */
+
+
+/* {{{ */
PHP_METHOD(MYSQLND_UH_CLASS_CONN_DATA_NAME, __construct)
{
if (!MYSQLND_UH_G(enabled)) {
@@ -952,6 +979,13 @@
ZEND_ARG_INFO(0, "name")
METHOD_ARG_INFO_END()
+METHOD_ARG_INFO_BEGIN_W_CONN(txCommitOrRollback_arginfo)
+ ZEND_ARG_INFO(0, "commit")
+ ZEND_ARG_INFO(0, "flags")
+ ZEND_ARG_INFO(0, "name")
+METHOD_ARG_INFO_END()
+
+
static zend_function_entry php_mysqlnd_uh_class_conn_data_functions[] = {
PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, __construct, NULL, \
ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, query, \
query_arginfo, ZEND_ACC_PUBLIC) @@ -1005,6 +1039,7 @@
PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, txCommit, txCommit_arginfo, \
ZEND_ACC_PUBLIC) PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, txRollback, \
txRollback_arginfo, ZEND_ACC_PUBLIC) PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, \
txBegin, txBegin_arginfo, ZEND_ACC_PUBLIC) + PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, \
txCommitOrRollback, txCommitOrRollback_arginfo, ZEND_ACC_PUBLIC) { NULL, NULL, NULL \
} };
Modified: pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_conn_data.c
===================================================================
--- pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_conn_data.c 2013-12-19 19:58:17 UTC (rev \
332476)
+++ pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_conn_data.c 2013-12-19 20:19:38 UTC (rev \
332477) @@ -1125,7 +1125,35 @@
}
/* }}} */
+/* {{{ */
+enum_func_status MYSQLND_METHOD(mysqlnd_uh_conn_data, \
tx_commit_or_rollback)(MYSQLND_CONN_DATA * conn, const zend_bool commit, const \
unsigned int flags, const char * const name TSRMLS_DC) { + enum_func_status ret = \
FAIL;
+ DBG_ENTER("mysqlnd_uh_conn_data.tx_begin");
+ DBG_INF_FMT("conn_data %p", conn);
+
+ EXTRACT_DATA_AND_USER_OBJ(conn, conn_data, conn_obj);
+ if (conn_obj) {
+ zval *retval = NULL;
+ MYSQLND_UH_HOOK_ARG_RESOURCE(conn_resource, conn_data);
+ MYSQLND_UH_HOOK_ARG_BOOL(commit);
+ MYSQLND_UH_HOOK_ARG_LONG(flags);
+ MYSQLND_UH_HOOK_ARG_STRING(name);
+
+ mysqlnd_uh_call_method_with_4_params(conn_obj, NULL, "txcommitorrollback", \
&retval, conn_resource, zv_commit, zv_flags, zv_name); + zval_ptr_dtor(&zv_commit);
+ zval_ptr_dtor(&zv_flags);
+ zval_ptr_dtor(&zv_name);
+ RETVAL_BOOL_CHECK_TYPE(retval, "txCommitOrRollback");
+ RETVAL_BOOL_TO_FUNC_STATUS(retval, ret);
+ } else {
+ ret = org_mysqlnd_conn_data_methods.tx_commit_or_rollback(conn, commit, flags, \
name TSRMLS_CC); + }
+
+ DBG_RETURN(ret);
+}
+/* }}} */
+
/* {{{ */
void MYSQLND_METHOD(mysqlnd_uh_conn_data, dtor)(MYSQLND_CONN_DATA * conn TSRMLS_DC) \
{ DBG_ENTER("mysqlnd_uh_conn_data.dtor (private)");
@@ -1251,10 +1279,10 @@
my_mysqlnd_conn_data_methods->tx_commit = MYSQLND_METHOD(mysqlnd_uh_conn_data, \
tx_commit); my_mysqlnd_conn_data_methods->tx_rollback = \
MYSQLND_METHOD(mysqlnd_uh_conn_data, tx_rollback); \
my_mysqlnd_conn_data_methods->tx_begin = MYSQLND_METHOD(mysqlnd_uh_conn_data, \
tx_begin); + my_mysqlnd_conn_data_methods->tx_commit_or_rollback = \
MYSQLND_METHOD(mysqlnd_uh_conn_data, tx_commit_or_rollback); /*
- func_mysqlnd_conn_data__tx_begin tx_begin
- typedef enum_func_status (*func_mysqlnd_conn_data__tx_begin)(MYSQLND_CONN_DATA * \
conn, const unsigned int mode, const char * const name TSRMLS_DC);; \
func_mysqlnd_conn_data__tx_commit_or_rollback tx_commit_or_rollback; + typedef \
enum_func_status (*func_mysqlnd_conn_data__tx_commit_or_rollback)(MYSQLND_CONN_DATA * \
conn, const zend_bool commit, const unsigned int flags, const char * const name \
TSRMLS_DC); func_mysqlnd_conn_data__tx_cor_options_to_string \
tx_cor_options_to_string; func_mysqlnd_conn_data__tx_savepoint tx_savepoint;
func_mysqlnd_conn_data__tx_savepoint_release tx_savepoint_release;
Added: pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_tx_commit_or_rollback.phpt
===================================================================
--- pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_tx_commit_or_rollback.phpt \
(rev 0)
+++ pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_tx_commit_or_rollback.phpt 2013-12-19 \
20:19:38 UTC (rev 332477) @@ -0,0 +1,97 @@
+--TEST--
+bool MysqlndUhConnectionData::txCommitOrRollback(resource $connection)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+if (version_compare(PHP_VERSION, '5.3.99-dev', '<'))
+ die(sprintf("SKIP PHP 5.4.0 or later, you are using %s\n", PHP_VERSION));
+?>
+--FILE--
+<?php
+ require_once('config.inc');
+
+ class proxy extends MysqlndUhConnectionData {
+ public function txCommitOrRollback($res, $commit, $mode, $name) {
+ printf("%s(%s)\n", __METHOD__, var_export(func_get_args(), true));
+
+ if ($mode == MYSQLND_UH_MYSQLND_TRANS_START_NO_OPT) {
+ printf("mode = MYSQLND_UH_MYSQLND_TRANS_START_NO_OPT\n");
+ }
+ if ($mode & MYSQLND_UH_MYSQLND_TRANS_START_WITH_CONSISTENT_SNAPSHOT) {
+ printf("mode & MYSQLND_UH_MYSQLND_TRANS_START_WITH_CONSISTENT_SNAPSHOT\n");
+ }
+ if ($mode & MYSQLND_UH_MYSQLND_TRANS_START_READ_WRITE) {
+ printf("mode & MYSQLND_UH_MYSQLND_TRANS_START_READ_WRITE\n");
+ }
+ if ($mode & MYSQLND_UH_MYSQLND_TRANS_START_READ_ONLY) {
+ printf("mode & MYSQLND_UH_MYSQLND_TRANS_START_READ_ONLY\n");
+ }
+
+ $ret = parent::txCommitOrRollback($res, $commit, $mode, $name);
+ printf("ret = %s\n", var_export($ret, true));
+ return $ret;
+ }
+ }
+
+ class proxy2 extends MysqlndUhConnectionData {
+ public function txCommitOrRollback($res, $commit, $mode, $name) {
+ var_dump(func_get_args());
+ return -1;
+ }
+ }
+
+ class proxy3 extends MysqlndUhConnectionData {
+ public function txCommitOrRollback($res, $commit, $mode, $name) {
+ var_dump(func_get_args());
+ return false;
+ }
+ }
+
+ $mysqli = mysqlnd_uh_test\connect::mysqli();
+ mysqlnd_uh_set_connection_data_proxy(new proxy());
+ $mysqli->begin_transaction();
+ $mysqli->commit();
+
+ mysqlnd_uh_set_connection_data_proxy(new proxy2());
+ $mysqli->begin_transaction();
+ $mysqli->rollback();
+
+ mysqlnd_uh_set_connection_data_proxy(new proxy3());
+ $mysqli->begin_transaction();
+ $mysqli->commit();
+
+ print "done!";
+?>
+--EXPECTF--
+proxy::txCommitOrRollback(array (
+ 0 => NULL,
+ 1 => true,
+ 2 => 0,
+ 3 => '',
+))
+mode = MYSQLND_UH_MYSQLND_TRANS_START_NO_OPT
+ret = true
+array(4) {
+ [0]=>
+ resource(%d) of type (Mysqlnd Connection Data)
+ [1]=>
+ bool(false)
+ [2]=>
+ int(0)
+ [3]=>
+ string(0) ""
+}
+
+Warning: mysqli::rollback(): (Mysqlnd User Handler) The method \
MysqlndUhConnectionData::txCommitOrRollback() did not return a boolean value as it \
should in %s on line %d +array(4) {
+ [0]=>
+ resource(%d) of type (Mysqlnd Connection Data)
+ [1]=>
+ bool(true)
+ [2]=>
+ int(0)
+ [3]=>
+ string(0) ""
+}
+done!
\ No newline at end of file
Modified: pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_connection_data_interface.phpt
===================================================================
--- pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_connection_data_interface.phpt 2013-12-19 \
19:58:17 UTC (rev 332476)
+++ pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_connection_data_interface.phpt 2013-12-19 \
20:19:38 UTC (rev 332477) @@ -68,6 +68,7 @@
'txCommit' => 'txCommit',
'txRollback' => 'txRollback',
'txBegin' => 'txBegin',
+ 'txCommitOrRollback' => 'txCommitOrRollback',
);
$unexpected = array();
Modified: pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_constants.phpt
===================================================================
--- pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_constants.phpt 2013-12-19 19:58:17 UTC \
(rev 332476)
+++ pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_constants.phpt 2013-12-19 20:19:38 UTC \
(rev 332477) @@ -115,6 +115,10 @@
MYSQLND_UH_MYSQLND_SET_CHARSET_NAME = %d
MYSQLND_UH_MYSQLND_SET_CLIENT_IP = %d
MYSQLND_UH_MYSQLND_SHARED_MEMORY_BASE_NAME = %d
+MYSQLND_UH_MYSQLND_TRANS_START_NO_OPT = %d
+MYSQLND_UH_MYSQLND_TRANS_START_READ_ONLY = %d
+MYSQLND_UH_MYSQLND_TRANS_START_READ_WRITE = %d
+MYSQLND_UH_MYSQLND_TRANS_START_WITH_CONSISTENT_SNAPSHOT = %d
MYSQLND_UH_SERVER_OPTION_DEFAULT_AUTH = %d
MYSQLND_UH_SERVER_OPTION_MULTI_STATEMENTS_OFF = %d
MYSQLND_UH_SERVER_OPTION_MULTI_STATEMENTS_ON = %d
--
PECL CVS Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic