[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-20 9:04:18
Message-ID: svn-uw-1387530258-332485-222131211 () svn ! php ! net
[Download RAW message or body]

uw                                       Fri, 20 Dec 2013 09:04:18 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=332485

Log:
New ConnData::connectHandshake

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_connect_handshake.phpt
    U   pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_connection_data_interface.phpt


["svn-diffs-332485.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-20 08:37:50 UTC (rev \
                332484)
+++ pecl/mysqlnd_uh/trunk/mysqlnd_uh_class_conn_data.c	2013-12-20 09:04:18 UTC (rev \
332485) @@ -910,6 +910,36 @@
 /* }}} */


+/* {{{ */
+PHP_METHOD(MYSQLND_UH_CLASS_CONN_DATA_NAME, connectHandshake)
+{
+	const char *host = NULL, *user = NULL, *passwd = NULL, *db = NULL;
+	int host_len = 0, user_len = 0, passwd_len = 0, db_len = 0;
+	long mysql_flags = 0;
+	zval* mysqlnd_rsrc;
+	MYSQLND_UH_RES_CONN* res_conn;
+	MYSQLND_CONN_DATA *conn_data;
+
+	CHECK_ENABLED();
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!sss!l", &mysqlnd_rsrc,
+		&host, &host_len, &user, &user_len, &passwd, &passwd_len,
+		&db, &db_len, &mysql_flags) == 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.connect_handshake(
+		conn_data, host, user, passwd, passwd_len, db, db_len,
+		mysql_flags TSRMLS_CC)) {
+		RETVAL_TRUE;
+	} else {
+		RETVAL_FALSE;
+	}
+}
+/* }}} */
+
+
 /* Additional argument info for Zend - may it be used for helpful dev tips... */
 ZEND_BEGIN_ARG_INFO(query_arginfo, 0)
 	ZEND_ARG_INFO(0, MYSQLND_UH_RES_MYSQLND_CONN_DATA_NAME)
@@ -1071,6 +1101,14 @@
 	ZEND_ARG_INFO(0, "mysql_flags")
 METHOD_ARG_INFO_END()

+METHOD_ARG_INFO_BEGIN_W_CONN(connectHandshake_arginfo)
+	ZEND_ARG_INFO(0, "host")
+	ZEND_ARG_INFO(0, "user")
+	ZEND_ARG_INFO(0, "password")
+	ZEND_ARG_INFO(0, "database")
+	ZEND_ARG_INFO(0, "mysql_flags")
+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) @@ -1129,6 +1167,7 @@
 	PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, txSavepointRelease, \
txSavepointRelease_arginfo, ZEND_ACC_PUBLIC)  PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, \
executeInitCommands, executeInitCommands_arginfo, ZEND_ACC_PUBLIC)  \
PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, getUpdatedConnectFlags, \
getUpdatedConnectFlags_arginfo, ZEND_ACC_PUBLIC) \
+	PHP_ME(MYSQLND_UH_CLASS_CONN_DATA_NAME, connectHandshake, connectHandshake_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-20 08:37:50 UTC (rev \
                332484)
+++ pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_conn_data.c	2013-12-20 09:04:18 UTC (rev \
332485) @@ -235,7 +235,7 @@
 															   unsigned int mysql_flags TSRMLS_DC) {
 	enum_func_status ret = FAIL;

-	DBG_ENTER("mysqlnd_uh_conn_data.init");
+	DBG_ENTER("mysqlnd_uh_conn_data.connect");
 	DBG_INF_FMT("conn_data %p", conn);

 	EXTRACT_DATA_AND_USER_OBJ(conn, conn_data, conn_obj);
@@ -1243,6 +1243,44 @@


 /* {{{ */
+enum_func_status MYSQLND_METHOD(mysqlnd_uh_conn_data, \
connect_handshake)(MYSQLND_CONN_DATA * conn, const char * host, const char * user, \
+															   const char * passwd, unsigned int passwd_len, const char * db, \
+															   unsigned int db_len, unsigned int mysql_flags TSRMLS_DC) { \
+	enum_func_status ret = FAIL; +
+	DBG_ENTER("mysqlnd_uh_conn_data.connect_handshake");
+	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_STRING(host);
+		MYSQLND_UH_HOOK_ARG_STRING(user);
+		MYSQLND_UH_HOOK_ARG_STRING_LEN(passwd, passwd_len);
+		MYSQLND_UH_HOOK_ARG_STRING_LEN(db, db_len);
+		MYSQLND_UH_HOOK_ARG_LONG(mysql_flags);
+
+		mysqlnd_uh_call_method_with_6_params(conn_obj, NULL, "connecthandshake", &retval, \
conn_resource, zv_host, zv_user, zv_passwd, zv_db, zv_mysql_flags); \
+		zval_ptr_dtor(&zv_host); +		zval_ptr_dtor(&zv_user);
+		zval_ptr_dtor(&zv_passwd);
+		zval_ptr_dtor(&zv_db);
+		zval_ptr_dtor(&zv_mysql_flags);
+
+		RETVAL_BOOL_CHECK_TYPE(retval, "connect_handshake");
+		RETVAL_BOOL_TO_FUNC_STATUS(retval, ret);
+
+	} else {
+		ret = org_mysqlnd_conn_data_methods.connect_handshake(conn, host, user, passwd, \
passwd_len, db, db_len, mysql_flags 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)");
 	DBG_INF_FMT("conn_data %p", conn);
@@ -1378,20 +1416,18 @@
 	*/
 	my_mysqlnd_conn_data_methods->execute_init_commands	= \
MYSQLND_METHOD(mysqlnd_uh_conn_data, execute_init_commands);  \
my_mysqlnd_conn_data_methods->get_updated_connect_flags	= \
                MYSQLND_METHOD(mysqlnd_uh_conn_data, get_updated_connect_flags);
-
+	my_mysqlnd_conn_data_methods->connect_handshake	= \
MYSQLND_METHOD(mysqlnd_uh_conn_data, connect_handshake);  /*
 	TODO:
-	func_mysqlnd_conn_data__get_updated_connect_flags get_updated_connect_flags;
-	typedef unsigned int		(*func_mysqlnd_conn_data__get_updated_connect_flags)(MYSQLND_CONN_DATA \
* conn, unsigned int mysql_flags TSRMLS_DC); \
+	func_mysqlnd_conn_data__connect_handshake connect_handshake; +	typedef \
enum_func_status	(*func_mysqlnd_conn_data__connect_handshake)(MYSQLND_CONN_DATA * \
conn, const char * const host, const char * const user, const char * const passwd, \
const unsigned int passwd_len, const char * const db, const unsigned int db_len, \
const unsigned int mysql_flags TSRMLS_DC);

-	func_mysqlnd_conn_data__connect_handshake connect_handshake;
 	func_mysqlnd_conn_data__simple_command_send_request simple_command_send_request;
 	func_mysqlnd_conn_data__fetch_auth_plugin_by_name fetch_auth_plugin_by_name;

 	func_mysqlnd_conn_data__set_client_option_2d set_client_option_2d;
     */

-
 }
 /* }}} */


Added: pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_connect_handshake.phpt
 ===================================================================
--- pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_connect_handshake.phpt	  \
                (rev 0)
+++ pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_conn_data_m_connect_handshake.phpt	2013-12-20 \
09:04:18 UTC (rev 332485) @@ -0,0 +1,62 @@
+--TEST--
+MysqlndUhConnectionData::connectHandshake(resource $res, string $host, string $user, \
string $passwd, string $db, string $db, int $mysql_flags) +--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once("skipifconnectfailure.inc");
+?>
+--FILE--
+<?php
+	require_once('config.inc');
+
+	class proxy extends MysqlndUhConnectionData {
+		public function connectHandshake($res, $host, $user, $passwd, $db, $mysql_flags) {
+			printf("%s(%s)\n", __METHOD__, var_export(func_get_args(), true));
+			/* CAUTION: Userland must call the default implementation. If not, you'll get a \
crash */ +			return parent::connectHandshake($res, $host, $user, $passwd, $db, \
$mysql_flags); +		}
+	}
+
+	class proxy2 extends MysqlndUhConnectionData {
+		public function connectHandshake($res, $host, $user, $passwd, $db, $mysql_flags) {
+			printf("%s(%s)\n", __METHOD__, var_export(func_get_args(), true));
+			/* CAUTION: Userland must call the default implementation. If not, you'll get a \
crash */ +			return parent::connectHandshake($res, $host, $user, $passwd, $db, \
$mysql_flags); +		}
+	}
+
+	$conn = mysqlnd_uh_test\connect::mysqli();
+	mysqlnd_uh_test\query_test::mysqli($conn);
+
+	mysqlnd_uh_set_connection_data_proxy(new proxy());
+
+	$conn = mysqlnd_uh_test\connect::mysqli();
+	mysqlnd_uh_test\query_test::mysqli($conn);
+
+	$mysqli = mysqli_init();
+	var_dump(mysqlnd_uh_set_connection_data_proxy(new proxy2(), $mysqli));
+	var_dump($mysqli->connect(MYSQLND_UH_TEST_MYSQL_HOST, MYSQLND_UH_TEST_MYSQL_USER, \
MYSQLND_UH_TEST_MYSQL_PASSWD, MYSQLND_UH_TEST_MYSQL_DB, MYSQLND_UH_TEST_MYSQL_PORT, \
MYSQLND_UH_TEST_MYSQL_SOCKET)); +	mysqlnd_uh_test\query_test::mysqli($mysqli);
+
+	print "done!";
+?>
+--EXPECTF--
+proxy::connectHandshake(array (
+  0 => %s,
+  1 => %s,
+  2 => %s,
+  3 => %s,
+  4 => %s,
+  5 => %s,
+))
+bool(true)
+proxy2::connectHandshake(array (
+  0 => %s,
+  1 => %s,
+  2 => %s,
+  3 => %s,
+  4 => %s,
+  5 => %s,
+))
+NULL
+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-20 \
                08:37:50 UTC (rev 332484)
+++ pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_connection_data_interface.phpt	2013-12-20 \
09:04:18 UTC (rev 332485) @@ -73,6 +73,7 @@
 		'txSavepointRelease' => 'txSavepointRelease',
 		'executeInitCommands' => 'executeInitCommands',
 		'getUpdatedConnectFlags' => 'getUpdatedConnectFlags',
+		'connectHandshake' => 'connectHandshake',
 	);

 	$unexpected = array();



-- 
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