[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=5Fhooks.c_mysqlnd=5Fuh=5Fhooks=5Fre
From: Ulf_Wendel <uw () php ! net>
Date: 2013-12-20 16:49:52
Message-ID: svn-uw-1387558192-332492-121977498 () svn ! php ! net
[Download RAW message or body]
uw Fri, 20 Dec 2013 16:49:52 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=332492
Log:
Plumbing one of many issues related to the result class
Changed paths:
U pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks.c
U pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_result.c
A pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_res_m_fetch_into.phpt
Modified: pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks.c
===================================================================
--- pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks.c 2013-12-20 10:43:04 UTC (rev 332491)
+++ pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks.c 2013-12-20 16:49:52 UTC (rev 332492)
@@ -427,6 +427,7 @@
DBG_ENTER("mysqlnd_uh_get_plugin_result_data");
DBG_INF_FMT("result %p", res);
+
res_data = (MYSQLND_UH_RESULT_DATA **) mysqlnd_plugin_get_plugin_result_data(res, \
mysqlnd_uh_plugin_id);
if (res_data && *res_data) {
@@ -500,7 +501,6 @@
zval_ptr_dtor(&((*res_data)->user_resource));
(*res_data)->user_resource = NULL;
}
-
DBG_INF_FMT("free res_data %p", *res_data);
mnd_pefree(*res_data, 0);
*res_data = NULL;
Modified: pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_result.c
===================================================================
--- pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_result.c 2013-12-20 10:43:04 UTC (rev \
332491)
+++ pecl/mysqlnd_uh/trunk/mysqlnd_uh_hooks_result.c 2013-12-20 16:49:52 UTC (rev \
332492) @@ -99,12 +99,21 @@
MYSQLND_UH_HOOK_ARG_RESOURCE(res_resource, result_data);
MYSQLND_UH_HOOK_ARG_BOOL(implicit);
- mysqlnd_uh_conn_free_plugin_result_data(result, TRUE TSRMLS_CC);
+ /* NOTE: we have to handle the resource.
+ Plugin data, which contains the resource zval, can be free'd but we need the \
resource until + the end of the call.
+ */
+ Z_ADDREF_P(res_resource);
+ mysqlnd_uh_conn_free_plugin_result_data(result, FALSE TSRMLS_CC);
+
zval *retval = NULL;
mysqlnd_uh_call_method_with_2_params(result_obj, NULL, "freeresult", &retval, \
res_resource, zv_implicit); zval_ptr_dtor(&zv_implicit);
+ /* NOTE: free resource zval */
+ zval_ptr_dtor(&res_resource);
+
RETVAL_BOOL_CHECK_TYPE(retval, "freeResult");
MYSQLND_UH_HOOK_RETVAL_BOOL_TO_FUNC_STATUS(retval, ret);
@@ -135,9 +144,37 @@
memcpy(&org_mysqlnd_res_methods, my_mysqlnd_res_methods, sizeof(struct \
st_mysqlnd_res_methods));
/* Replace selected methods */
+
my_mysqlnd_res_methods->fetch_into = MYSQLND_METHOD(mysqlnd_uh_result, \
fetch_into); my_mysqlnd_res_methods->free_result = \
MYSQLND_METHOD(mysqlnd_uh_result, free_result);
+ /*
+ func_mysqlnd_res__use_result use_result;
+ func_mysqlnd_res__store_result store_result;
+ func_mysqlnd_res__fetch_into fetch_into;
+ func_mysqlnd_res__fetch_row_c fetch_row_c;
+ func_mysqlnd_res__fetch_all fetch_all;
+ func_mysqlnd_res__fetch_field_data fetch_field_data;
+ func_mysqlnd_res__num_rows num_rows;
+ func_mysqlnd_res__num_fields num_fields;
+ func_mysqlnd_res__skip_result skip_result;
+ func_mysqlnd_res__seek_data seek_data;
+ func_mysqlnd_res__seek_field seek_field;
+ func_mysqlnd_res__field_tell field_tell;
+ func_mysqlnd_res__fetch_field fetch_field;
+ func_mysqlnd_res__fetch_field_direct fetch_field_direct;
+ func_mysqlnd_res__fetch_fields fetch_fields;
+ func_mysqlnd_res__read_result_metadata read_result_metadata;
+ func_mysqlnd_res__fetch_lengths fetch_lengths;
+ func_mysqlnd_res__store_result_fetch_data store_result_fetch_data;
+ func_mysqlnd_res__initialize_result_set_rest initialize_result_set_rest;
+ func_mysqlnd_res__free_result_buffers free_result_buffers;
+ func_mysqlnd_res__free_result free_result;
+ func_mysqlnd_res__free_result_internal free_result_internal;
+ func_mysqlnd_res__free_result_contents free_result_contents;
+ func_mysqlnd_res__free_buffered_data free_buffered_data;
+ func_mysqlnd_res__unbuffered_free_last_data unbuffered_free_last_data;
+ */
}
/* }}} */
Added: pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_res_m_fetch_into.phpt
===================================================================
--- pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_res_m_fetch_into.phpt \
(rev 0)
+++ pecl/mysqlnd_uh/trunk/tests/mysqlnd_uh_class_res_m_fetch_into.phpt 2013-12-20 \
16:49:52 UTC (rev 332492) @@ -0,0 +1,34 @@
+--TEST--
+bool MysqlndUhResult::fetchInto()
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once("skipifconnectfailure.inc");
+?>
+--FILE--
+<?php
+ require_once('config.inc');
+
+ class proxy extends MysqlndUhResult {
+ public function fetchInto($res, &$rows, $flags, $extension) {
+ printf("%s(%s)\n", __METHOD__, var_export(func_get_args(), true));
+ $ret = parent::fetchInto($res, $rows, $flags, $extension);
+ var_dump($ret);
+ return $ret;
+ }
+ }
+ mysqlnd_uh_set_result_proxy(new proxy());
+
+ $conn = mysqlnd_uh_test\connect::mysqli();
+ mysqlnd_uh_test\query_test::mysqli($conn);
+ if (true != ($res = $conn->query("SELECT 1 as 'one' FROM DUAL")))
+ printf("[001] Expecting true got %s\n", var_export($res));
+
+ while ($row = $res->fetch_assoc()) {
+ var_dump($row);
+ }
+
+ print "done!";
+?>
+--EXPECTF--
+done!
\ No newline at end of file
--
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