[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