[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