]> granicus.if.org Git - php/commitdiff
Merge mysql changes
authorJohannes Schlüter <johannes@php.net>
Thu, 4 Feb 2010 20:28:55 +0000 (20:28 +0000)
committerJohannes Schlüter <johannes@php.net>
Thu, 4 Feb 2010 20:28:55 +0000 (20:28 +0000)
293815 Add possibility to restrain the number of levels (andrey)
293816 decrement correctly! (andrey)
293976 Fix for bug#50772  (andrey)
294302 Tests related to #50727 (uw)
294313 Fix a bug in mysqlnd where a pointer was not incremented (andrey)
294317 Fix second bug in that code, + instead of += thus not increasing (andrey)
294337 No idea which recent change has cause this little API change, however it is not (uw)
294421 Pass tsrmls to all functions, which might need it in the future. (andrey)

17 files changed:
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_nonapi.c
ext/mysqli/php_mysqli_structs.h
ext/mysqli/tests/bug50772.phpt [new file with mode: 0644]
ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt [new file with mode: 0644]
ext/mysqlnd/mysqlnd.c
ext/mysqlnd/mysqlnd.h
ext/mysqlnd/mysqlnd_debug.c
ext/mysqlnd/mysqlnd_debug.h
ext/mysqlnd/mysqlnd_ps.c
ext/mysqlnd/mysqlnd_result.c
ext/mysqlnd/mysqlnd_result_meta.c
ext/mysqlnd/mysqlnd_statistics.h
ext/mysqlnd/mysqlnd_structs.h
ext/mysqlnd/mysqlnd_wireprotocol.c
ext/pdo_mysql/mysql_driver.c
ext/pdo_mysql/mysql_statement.c

index 43b60848ca362dada91b6802906f1cdd3d05b0da..5c9cd6e0a29a58cf9382edb151c50b16559d8ffc 100644 (file)
@@ -1333,9 +1333,9 @@ PHP_FUNCTION(mysqli_info)
 }
 /* }}} */
 
-/* {{{ proto resource mysqli_init(void)
-   Initialize mysqli and return a resource for use with mysql_real_connect */
-PHP_FUNCTION(mysqli_init)
+
+/* {{{ php_mysqli_init() */
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
 {
        MYSQLI_RESOURCE *mysqli_resource;
        MY_MYSQL *mysql;
@@ -1372,6 +1372,15 @@ PHP_FUNCTION(mysqli_init)
 }
 /* }}} */
 
+
+/* {{{ proto resource mysqli_init(void)
+   Initialize mysqli and return a resource for use with mysql_real_connect */
+PHP_FUNCTION(mysqli_init)
+{
+       php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+}
+/* }}} */
+
 /* {{{ proto mixed mysqli_insert_id(object link)
    Get the ID generated from the previous INSERT operation */
 PHP_FUNCTION(mysqli_insert_id)
index 9cbf8d2607fa5ec8de5b559a195b80c7ebe0023b..b3b0dded08538075195e9e3d476d4986405d59b7 100644 (file)
@@ -80,7 +80,8 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
 #endif
 
        if (getThis() && !ZEND_NUM_ARGS() && in_ctor) {
-               RETURN_NULL();
+               php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+               return;
        }
        hostname = username = dbname = passwd = socket = NULL;
 
index 76253785794c0495031d5564687e766c0085d4db..ecf91518fb86b86cb9d154fe3f6e85d00e044ad7 100644 (file)
@@ -338,6 +338,8 @@ if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_stmt_errno(stmt)) { \
 
 void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor);
 
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS);
+
 
 ZEND_BEGIN_MODULE_GLOBALS(mysqli)
        long                    default_link;
diff --git a/ext/mysqli/tests/bug50772.phpt b/ext/mysqli/tests/bug50772.phpt
new file mode 100644 (file)
index 0000000..4724d0f
--- /dev/null
@@ -0,0 +1,36 @@
+--TEST--
+Bug #50772 (mysqli constructor without parameters does not return a working mysqli object)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+       include "connect.inc";
+       $db1 = new mysqli();
+
+       // These calls fail
+       $db1->options(MYSQLI_OPT_CONNECT_TIMEOUT, 3);
+       $db1->real_connect($host, $user, $passwd);
+       if(mysqli_connect_error()) {
+               echo "error 1\n";
+       } else {
+               echo "ok 1\n";
+       }
+
+       $db2 = mysqli_init();
+
+       $db2->options(MYSQLI_OPT_CONNECT_TIMEOUT, 3);
+       $db2->real_connect($host, $user, $passwd);
+       if(mysqli_connect_error()) {
+               echo "error 2\n";
+       } else {
+               echo "ok 2\n";
+       }
+       echo "done\n";
+?>
+--EXPECTF--
+ok 1
+ok 2
+done
\ No newline at end of file
diff --git a/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt b/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt
new file mode 100644 (file)
index 0000000..d0940a7
--- /dev/null
@@ -0,0 +1,282 @@
+--TEST--
+Interface of the class mysqli
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifemb.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+       require('table.inc');
+
+       function dump_properties($mysqli) {
+
+               printf("\nClass variables:\n");
+               $variables = array_keys(get_class_vars(get_class($mysqli)));
+               sort($variables);
+               foreach ($variables as $k => $var) {
+                       printf("%s = '%s'\n", $var, var_export(@$mysqli->$var, true));
+               }
+
+               printf("\nObject variables:\n");
+               $variables = array_keys(get_object_vars($mysqli));
+               foreach ($variables as $k => $var) {
+                       printf("%s = '%s'\n", $var, var_export(@$mysqli->$var, true));
+               }
+
+               printf("\nMagic, magic properties:\n");
+
+               assert(@mysqli_affected_rows($mysqli) === @$mysqli->affected_rows);
+               printf("mysqli->affected_rows = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->affected_rows, gettype(@$mysqli->affected_rows),
+                       @mysqli_affected_rows($mysqli), gettype(@mysqli_affected_rows($mysqli)));
+
+               assert(@mysqli_get_client_info() === @$mysqli->client_info);
+               printf("mysqli->client_info = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->client_info, gettype(@$mysqli->client_info),
+                       @mysqli_get_client_info(), gettype(@mysqli_get_client_info()));
+
+               assert(@mysqli_get_client_version() === @$mysqli->client_version);
+               printf("mysqli->client_version =  '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->client_version, gettype(@$mysqli->client_version),
+                       @mysqli_get_client_version(), gettype(@mysqli_get_client_version()));
+
+               assert(@mysqli_errno($mysqli) === @$mysqli->errno);
+               printf("mysqli->errno = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->errno, gettype(@$mysqli->errno),
+
+                       @mysqli_errno($mysqli), gettype(@mysqli_errno($mysqli)));
+
+               assert(@mysqli_error($mysqli) === @$mysqli->error);
+               printf("mysqli->error = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->error, gettype(@$mysqli->error),
+                       @mysqli_error($mysqli), gettype(@mysqli_error($mysqli)));
+
+               assert(@mysqli_field_count($mysqli) === @$mysqli->field_count);
+               printf("mysqli->field_count = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->field_count, gettype(@$mysqli->field_count),
+                       @mysqli_field_count($mysqli), gettype(@mysqli_field_count($mysqli)));
+
+               assert(@mysqli_insert_id($mysqli) === @$mysqli->insert_id);
+               printf("mysqli->insert_id = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->insert_id, gettype(@$mysqli->insert_id),
+                       @mysqli_insert_id($mysqli), gettype(@mysqli_insert_id($mysqli)));
+
+               assert(@mysqli_sqlstate($mysqli) === @$mysqli->sqlstate);
+               printf("mysqli->sqlstate = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->sqlstate, gettype(@$mysqli->sqlstate),
+                       @mysqli_sqlstate($mysqli), gettype(@mysqli_sqlstate($mysqli)));
+
+               assert(@mysqli_get_host_info($mysqli) === @$mysqli->host_info);
+               printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->host_info, gettype(@$mysqli->host_info),
+                       @mysqli_get_host_info($mysqli), gettype(@mysqli_get_host_info($mysqli)));
+
+               /* note that the data types are different */
+               assert(@mysqli_info($mysqli) == @$mysqli->info);
+               printf("mysqli->info = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->info, gettype(@$mysqli->info),
+                       @mysqli_info($mysqli), gettype(@mysqli_info($mysqli)));
+
+               assert(@mysqli_thread_id($mysqli) > @$mysqli->thread_id);
+               assert(gettype(@$mysqli->thread_id) == gettype(@mysqli_thread_id($mysqli)));
+               printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->thread_id, gettype(@$mysqli->thread_id),
+                       @mysqli_thread_id($mysqli), gettype(@mysqli_thread_id($mysqli)));
+
+               assert(@mysqli_get_proto_info($mysqli) === @$mysqli->protocol_version);
+               printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->protocol_version, gettype(@$mysqli->protocol_version),
+                       @mysqli_get_proto_info($mysqli), gettype(@mysqli_get_proto_info($mysqli)));
+
+               assert(@mysqli_get_server_info($mysqli) === @$mysqli->server_info);
+               printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->server_info, gettype(@$mysqli->server_info),
+                       @mysqli_get_server_info($mysqli), gettype(@mysqli_get_server_info($mysqli)));
+
+               assert(@mysqli_get_server_version($mysqli) === @$mysqli->server_version);
+               printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->server_version, gettype(@$mysqli->server_version),
+                       @mysqli_get_server_version($mysqli), gettype(@mysqli_get_server_version($mysqli)));
+
+               assert(@mysqli_warning_count($mysqli) === @$mysqli->warning_count);
+               printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->warning_count, gettype(@$mysqli->warning_count),
+                       @mysqli_warning_count($mysqli), gettype(@mysqli_warning_count($mysqli)));
+
+               printf("\nAccess to undefined properties:\n");
+               printf("mysqli->unknown = '%s'\n", @$mysqli->unknown);
+
+               @$mysqli->unknown = 13;
+               printf("setting mysqli->unknown, @mysqli_unknown = '%s'\n", @$mysqli->unknown);
+
+               $unknown = 'friday';
+               @$mysqli->unknown = $unknown;
+               printf("setting mysqli->unknown, @mysqli_unknown = '%s'\n", @$mysqli->unknown);
+
+               printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n");
+               assert(@mysqli_connect_error() === @$mysqli->connect_error);
+               printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->connect_error, gettype(@$mysqli->connect_error),
+                       @mysqli_connect_error(), gettype(@mysqli_connect_error()));
+
+               assert(@mysqli_connect_errno() === @$mysqli->connect_errno);
+               printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n",
+                       @$mysqli->connect_errno, gettype(@$mysqli->connect_errno),
+                       @mysqli_connect_errno(), gettype(@mysqli_connect_errno()));
+       }
+
+       printf("Without RS\n");
+       $mysqli = @new mysqli($host, $user, $passwd . "invalid", $db, $port, $socket);
+       dump_properties($mysqli);
+
+       printf("With RS\n");
+       $mysqli = @new mysqli($host, $user, $passwd . "invalid", $db, $port, $socket);
+       $res = @$mysqli->query("SELECT * FROM test");
+       dump_properties($mysqli);
+
+       print "done!";
+?>
+--CLEAN--
+<?php require_once("clean_table.inc"); ?>
+--EXPECTF--
+Without RS
+
+Class variables:
+affected_rows = 'NULL'
+client_info = 'NULL'
+client_version = '%s'
+connect_errno = '%s'
+connect_error = ''%s'
+errno = 'NULL'
+error = 'NULL'
+field_count = 'NULL'
+host_info = 'NULL'
+info = 'NULL'
+insert_id = 'NULL'
+protocol_version = 'NULL'
+server_info = 'NULL'
+server_version = 'NULL'
+sqlstate = 'NULL'
+thread_id = 'NULL'
+warning_count = 'NULL'
+
+Object variables:
+affected_rows = 'NULL'
+client_info = 'NULL'
+client_version = '%s'
+connect_errno = '%s'
+connect_error = '%s'
+errno = 'NULL'
+error = 'NULL'
+field_count = 'NULL'
+host_info = 'NULL'
+info = 'NULL'
+insert_id = 'NULL'
+server_info = 'NULL'
+server_version = 'NULL'
+sqlstate = 'NULL'
+protocol_version = 'NULL'
+thread_id = 'NULL'
+warning_count = 'NULL'
+
+Magic, magic properties:
+mysqli->affected_rows = ''/NULL (''/NULL)
+
+Warning: assert(): Assertion failed in %s on line %d
+mysqli->client_info = ''/NULL ('%s'/%s)
+mysqli->client_version =  '%s'/integer ('%s'/integer)
+mysqli->errno = ''/NULL (''/NULL)
+mysqli->error = ''/NULL (''/NULL)
+mysqli->field_count = ''/NULL (''/NULL)
+mysqli->insert_id = ''/NULL (''/NULL)
+mysqli->sqlstate = ''/NULL (''/NULL)
+mysqli->host_info = ''/NULL (''/NULL)
+mysqli->info = ''/NULL (''/NULL)
+
+Warning: assert(): Assertion failed in %s on line %d
+mysqli->thread_id = ''/NULL (''/NULL)
+mysqli->protocol_version = ''/NULL (''/NULL)
+mysqli->server_info = ''/NULL (''/NULL)
+mysqli->server_version = ''/NULL (''/NULL)
+mysqli->warning_count = ''/NULL (''/NULL)
+
+Access to undefined properties:
+mysqli->unknown = ''
+setting mysqli->unknown, @mysqli_unknown = '13'
+setting mysqli->unknown, @mysqli_unknown = 'friday'
+
+Access hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):
+mysqli->connect_error = '%s'/%s)
+mysqli->connect_errno = '%s'/integer ('%s'/integer)
+With RS
+
+Class variables:
+affected_rows = 'NULL'
+client_info = 'NULL'
+client_version = '%s'
+connect_errno = '%s'
+connect_error = '%s'
+errno = 'NULL'
+error = 'NULL'
+field_count = 'NULL'
+host_info = 'NULL'
+info = 'NULL'
+insert_id = 'NULL'
+protocol_version = 'NULL'
+server_info = 'NULL'
+server_version = 'NULL'
+sqlstate = 'NULL'
+thread_id = 'NULL'
+warning_count = 'NULL'
+
+Object variables:
+affected_rows = 'NULL'
+client_info = 'NULL'
+client_version = '%s'
+connect_errno = '%s'
+connect_error = '%s'
+errno = 'NULL'
+error = 'NULL'
+field_count = 'NULL'
+host_info = 'NULL'
+info = 'NULL'
+insert_id = 'NULL'
+server_info = 'NULL'
+server_version = 'NULL'
+sqlstate = 'NULL'
+protocol_version = 'NULL'
+thread_id = 'NULL'
+warning_count = 'NULL'
+
+Magic, magic properties:
+mysqli->affected_rows = ''/NULL (''/NULL)
+
+Warning: assert(): Assertion failed in %s on line %d
+mysqli->client_info = ''/NULL ('%s'/%s)
+mysqli->client_version =  '%s'/integer ('%s'/integer)
+mysqli->errno = ''/NULL (''/NULL)
+mysqli->error = ''/NULL (''/NULL)
+mysqli->field_count = ''/NULL (''/NULL)
+mysqli->insert_id = ''/NULL (''/NULL)
+mysqli->sqlstate = ''/NULL (''/NULL)
+mysqli->host_info = ''/NULL (''/NULL)
+mysqli->info = ''/NULL (''/NULL)
+
+Warning: assert(): Assertion failed in %s on line %d
+mysqli->thread_id = ''/NULL (''/NULL)
+mysqli->protocol_version = ''/NULL (''/NULL)
+mysqli->server_info = ''/NULL (''/NULL)
+mysqli->server_version = ''/NULL (''/NULL)
+mysqli->warning_count = ''/NULL (''/NULL)
+
+Access to undefined properties:
+mysqli->unknown = ''
+setting mysqli->unknown, @mysqli_unknown = '13'
+setting mysqli->unknown, @mysqli_unknown = 'friday'
+
+Access hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):
+mysqli->connect_error = '%s'/%s)
+mysqli->connect_errno = '%s'/integer ('%s'/integer)
+done!
\ No newline at end of file
index bf3f475a5a4c05cd02863e7e00cf98ebb75e806a..6fa5eae5c0bb2d476daf33d0ef08ecc1fb6bb3cb 100644 (file)
@@ -397,8 +397,7 @@ MYSQLND_METHOD(mysqlnd_conn, simple_command)(MYSQLND *conn, enum php_mysqlnd_ser
 
 /* {{{ mysqlnd_conn::set_server_option */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND * const conn,
-                                                                                               enum_mysqlnd_server_option option TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, set_server_option)(MYSQLND * const conn, enum_mysqlnd_server_option option TSRMLS_DC)
 {
        enum_func_status ret;
        char buffer[2];
@@ -1108,8 +1107,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_fields)(MYSQLND *conn, const char *table, cons
 
 /* {{{ mysqlnd_conn::list_method */
 MYSQLND_RES *
-MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND *conn, const char *query,
-                                                                                 const char *achtung_wild, char *par1 TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND *conn, const char *query, const char *achtung_wild, char *par1 TSRMLS_DC)
 {
        char *show_query = NULL;
        size_t show_query_len;
@@ -1145,7 +1143,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND *conn, const char *query,
 
 /* {{{ mysqlnd_conn::errno */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, errno)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, errno)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->error_info.error_no;
 }
@@ -1154,7 +1152,7 @@ MYSQLND_METHOD(mysqlnd_conn, errno)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::error */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, error)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, error)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->error_info.error;
 }
@@ -1163,7 +1161,7 @@ MYSQLND_METHOD(mysqlnd_conn, error)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::sqlstate */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, sqlstate)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, sqlstate)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->error_info.sqlstate[0] ? conn->error_info.sqlstate:MYSQLND_SQLSTATE_NULL;
 }
@@ -1182,8 +1180,7 @@ PHPAPI ulong mysqlnd_old_escape_string(char *newstr, const char *escapestr, size
 
 /* {{{ mysqlnd_conn::escape_string */
 static ulong
-MYSQLND_METHOD(mysqlnd_conn, escape_string)(const MYSQLND * const conn, char *newstr,
-                                                                                       const char *escapestr, size_t escapestr_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, escape_string)(const MYSQLND * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_conn::escape_string");
        DBG_INF_FMT("conn=%llu", conn->thread_id);
@@ -1208,9 +1205,7 @@ MYSQLND_METHOD(mysqlnd_conn, dump_debug_info)(MYSQLND * const conn TSRMLS_DC)
 
 /* {{{ mysqlnd_conn::select_db */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn,
-                                                                               const char * const db,
-                                                                               unsigned int db_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn, const char * const db, unsigned int db_len TSRMLS_DC)
 {
        enum_func_status ret;
 
@@ -1529,7 +1524,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn, set_state)(MYSQLND * const conn, enum mysql
 
 /* {{{ mysqlnd_conn::field_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, field_count)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, field_count)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->field_count;
 }
@@ -1538,7 +1533,7 @@ MYSQLND_METHOD(mysqlnd_conn, field_count)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::insert_id */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_conn, insert_id)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, insert_id)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->upsert_status.last_insert_id;
 }
@@ -1547,7 +1542,7 @@ MYSQLND_METHOD(mysqlnd_conn, insert_id)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::affected_rows */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_conn, affected_rows)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, affected_rows)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->upsert_status.affected_rows;
 }
@@ -1556,7 +1551,7 @@ MYSQLND_METHOD(mysqlnd_conn, affected_rows)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::warning_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, warning_count)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, warning_count)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->upsert_status.warning_count;
 }
@@ -1565,7 +1560,7 @@ MYSQLND_METHOD(mysqlnd_conn, warning_count)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::info */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, info)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, info)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->last_message;
 }
@@ -1590,7 +1585,7 @@ PHPAPI unsigned int mysqlnd_get_client_version()
 
 /* {{{ mysqlnd_conn::get_server_info */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, get_server_info)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, get_server_info)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->server_version;
 }
@@ -1599,7 +1594,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_server_info)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::get_host_info */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, get_host_info)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, get_host_info)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->host_info;
 }
@@ -1608,7 +1603,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_host_info)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::get_proto_info */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_conn, get_proto_info)(const MYSQLND *const conn)
+MYSQLND_METHOD(mysqlnd_conn, get_proto_info)(const MYSQLND *const conn TSRMLS_DC)
 {
        return conn->protocol_version;
 }
@@ -1617,7 +1612,7 @@ MYSQLND_METHOD(mysqlnd_conn, get_proto_info)(const MYSQLND *const conn)
 
 /* {{{ mysqlnd_conn::charset_name */
 static const char *
-MYSQLND_METHOD(mysqlnd_conn, charset_name)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, charset_name)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->charset->name;
 }
@@ -1626,7 +1621,7 @@ MYSQLND_METHOD(mysqlnd_conn, charset_name)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::thread_id */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_conn, thread_id)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, thread_id)(const MYSQLND * const conn TSRMLS_DC)
 {
        return conn->thread_id;
 }
@@ -1635,7 +1630,7 @@ MYSQLND_METHOD(mysqlnd_conn, thread_id)(const MYSQLND * const conn)
 
 /* {{{ mysqlnd_conn::get_server_version */
 static unsigned long
-MYSQLND_METHOD(mysqlnd_conn, get_server_version)(const MYSQLND * const conn)
+MYSQLND_METHOD(mysqlnd_conn, get_server_version)(const MYSQLND * const conn TSRMLS_DC)
 {
        long major, minor, patch;
        char *p;
index 739e95d2c71d206609da34711fd89327443a4048..c3b2f6bf4de4a93454541b439be0ddc11a407fa9 100644 (file)
@@ -162,7 +162,7 @@ PHPAPI enum_func_status _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQ
 #define mysqlnd_num_rows(result)               ((result)->stored_data? (result)->stored_data->row_count:0)
 #define mysqlnd_num_fields(result)             (result)->field_count
 
-#define mysqlnd_fetch_lengths(result)  ((result)->m.fetch_lengths? (result)->m.fetch_lengths((result)):NULL)
+#define mysqlnd_fetch_lengths(result)  ((result)->m.fetch_lengths? (result)->m.fetch_lengths((result)  TSRMLS_CC) : NULL)
 
 #define mysqlnd_field_seek(result, ofs)                        (result)->m.seek_field((result), (ofs))
 #define mysqlnd_field_tell(result)                             ((result)->meta? (result)->meta->current_field:0)
@@ -192,31 +192,32 @@ PHPAPI enum_func_status _mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQ
 /*****************************************************************************************************/
 
 /* Errors */
-#define mysqlnd_errno(conn)                            (conn)->m->get_error_no((conn))
-#define mysqlnd_error(conn)                            (conn)->m->get_error_str((conn))
-#define mysqlnd_sqlstate(conn)                 (conn)->m->get_sqlstate((conn))
+#define mysqlnd_errno(conn)                            (conn)->m->get_error_no((conn) TSRMLS_CC)
+#define mysqlnd_error(conn)                            (conn)->m->get_error_str((conn) TSRMLS_CC)
+#define mysqlnd_sqlstate(conn)                 (conn)->m->get_sqlstate((conn) TSRMLS_CC)
 
 /* Charset */
-#define mysqlnd_character_set_name(conn) (conn)->m->charset_name((conn))
+#define mysqlnd_character_set_name(conn) (conn)->m->charset_name((conn) TSRMLS_CC)
 
 /* Simple metadata */
-#define mysqlnd_field_count(conn)              (conn)->m->get_field_count((conn))
-#define mysqlnd_insert_id(conn)                        (conn)->m->get_last_insert_id((conn))
-#define mysqlnd_affected_rows(conn)            (conn)->m->get_affected_rows((conn))
-#define mysqlnd_warning_count(conn)            (conn)->m->get_warning_count((conn))
-#define mysqlnd_info(conn)                             (conn)->m->get_last_message((conn))
-#define mysqlnd_get_server_info(conn)  (conn)->m->get_server_information((conn))
-#define mysqlnd_get_host_info(conn)            (conn)->m->get_host_information((conn))
-#define mysqlnd_get_proto_info(conn)   (conn)->m->get_protocol_information((conn))
-#define mysqlnd_thread_id(conn)                        (conn)->m->get_thread_id((conn))
-
-#define mysqlnd_num_rows(result)               (result)->m.num_rows((result))
-#define mysqlnd_num_fields(result)             (result)->m.num_fields((result))
-
-PHPAPI unsigned long * mysqlnd_fetch_lengths(MYSQLND_RES * const result);
-
-#define mysqlnd_field_seek(result, ofs)                        (result)->m.seek_field((result), (ofs))
-#define mysqlnd_field_tell(result)                             (result)->m.field_tell((result))
+#define mysqlnd_field_count(conn)              (conn)->m->get_field_count((conn) TSRMLS_CC)
+#define mysqlnd_insert_id(conn)                        (conn)->m->get_last_insert_id((conn) TSRMLS_CC)
+#define mysqlnd_affected_rows(conn)            (conn)->m->get_affected_rows((conn) TSRMLS_CC)
+#define mysqlnd_warning_count(conn)            (conn)->m->get_warning_count((conn) TSRMLS_CC)
+#define mysqlnd_info(conn)                             (conn)->m->get_last_message((conn) TSRMLS_CC)
+#define mysqlnd_get_server_info(conn)  (conn)->m->get_server_information((conn) TSRMLS_CC)
+#define mysqlnd_get_host_info(conn)            (conn)->m->get_host_information((conn) TSRMLS_CC)
+#define mysqlnd_get_proto_info(conn)   (conn)->m->get_protocol_information((conn) TSRMLS_CC)
+#define mysqlnd_thread_id(conn)                        (conn)->m->get_thread_id((conn) TSRMLS_CC)
+
+#define mysqlnd_num_rows(result)               (result)->m.num_rows((result) TSRMLS_CC)
+#define mysqlnd_num_fields(result)             (result)->m.num_fields((result) TSRMLS_CC)
+
+#define mysqlnd_fetch_lengths(result)  _mysqlnd_fetch_lengths((result) TSRMLS_CC)
+PHPAPI unsigned long * _mysqlnd_fetch_lengths(MYSQLND_RES * const result  TSRMLS_DC);
+
+#define mysqlnd_field_seek(result, ofs)                        (result)->m.seek_field((result), (ofs) TSRMLS_CC)
+#define mysqlnd_field_tell(result)                             (result)->m.field_tell((result) TSRMLS_CC)
 #define mysqlnd_fetch_field(result)                            (result)->m.fetch_field((result) TSRMLS_CC)
 #define mysqlnd_fetch_field_direct(result,fnr) (result)->m.fetch_field_direct((result), (fnr) TSRMLS_CC)
 #define mysqlnd_fetch_fields(result)                   (result)->m.fetch_fields((result) TSRMLS_CC)
@@ -226,15 +227,15 @@ PHPAPI const char *       mysqlnd_get_client_info();
 PHPAPI unsigned int    mysqlnd_get_client_version();
 
 /* PS */
-#define mysqlnd_stmt_insert_id(stmt)           (stmt)->m->get_last_insert_id((stmt))
-#define mysqlnd_stmt_affected_rows(stmt)       (stmt)->m->get_affected_rows((stmt))
-#define mysqlnd_stmt_num_rows(stmt)                    (stmt)->m->get_num_rows((stmt))
-#define mysqlnd_stmt_param_count(stmt)         (stmt)->m->get_param_count((stmt))
-#define mysqlnd_stmt_field_count(stmt)         (stmt)->m->get_field_count((stmt))
-#define mysqlnd_stmt_warning_count(stmt)       (stmt)->m->get_warning_count((stmt))
-#define mysqlnd_stmt_errno(stmt)                       (stmt)->m->get_error_no((stmt))
-#define mysqlnd_stmt_error(stmt)                       (stmt)->m->get_error_str((stmt))
-#define mysqlnd_stmt_sqlstate(stmt)                    (stmt)->m->get_sqlstate((stmt))
+#define mysqlnd_stmt_insert_id(stmt)           (stmt)->m->get_last_insert_id((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_affected_rows(stmt)       (stmt)->m->get_affected_rows((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_num_rows(stmt)                    (stmt)->m->get_num_rows((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_param_count(stmt)         (stmt)->m->get_param_count((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_field_count(stmt)         (stmt)->m->get_field_count((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_warning_count(stmt)       (stmt)->m->get_warning_count((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_errno(stmt)                       (stmt)->m->get_error_no((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_error(stmt)                       (stmt)->m->get_error_str((stmt) TSRMLS_CC)
+#define mysqlnd_stmt_sqlstate(stmt)                    (stmt)->m->get_sqlstate((stmt) TSRMLS_CC)
 #endif /* MYSQLND_USE_OPTIMISATIONS */
 /*****************************************************************************************************/
 
@@ -263,7 +264,7 @@ PHPAPI void mysqlnd_set_local_infile_handler(MYSQLND * const conn, const char *
 #define mysqlnd_kill(conn, pid)                                (conn)->m->kill_connection((conn), (pid) TSRMLS_CC)
 #define mysqlnd_refresh(conn, options)         (conn)->m->refresh_server((conn), (options) TSRMLS_CC)
 #define mysqlnd_shutdown(conn, level)          (conn)->m->shutdown_server((conn), (level) TSRMLS_CC)
-#define mysqlnd_get_server_version(conn)       (conn)->m->get_server_version((conn))
+#define mysqlnd_get_server_version(conn)       (conn)->m->get_server_version((conn) TSRMLS_CC)
 #define mysqlnd_set_character_set(conn, cs)    (conn)->m->set_charset((conn), (cs) TSRMLS_CC)
 #define mysqlnd_stat(conn, msg, msg_len)       (conn)->m->get_server_statistics((conn), (msg), (msg_len) TSRMLS_CC)
 #define mysqlnd_options(conn, opt, value)      (conn)->m->set_client_option((conn), (opt), (value) TSRMLS_CC)
index 1de52920d065085f1c31f0aa417db98c11d67a05..085a8ed55b7677e5b44f74ec44497f0457ae128e 100644 (file)
@@ -1113,11 +1113,18 @@ static int mysqlnd_build_trace_string(zval **frame TSRMLS_DC, int num_args, va_l
        long line;
        HashTable *ht = Z_ARRVAL_PP(frame);
        zval **file, **tmp;
+       uint * level;
 
+       level = va_arg(args, uint *);
        str = va_arg(args, char**);
        len = va_arg(args, int*);
        num = va_arg(args, int*);
 
+       if (!*level) {
+               return ZEND_HASH_APPLY_KEEP;
+       }
+       --*level;
+
        s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
        sprintf(s_tmp, "#%d ", (*num)++);
        TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
@@ -1283,11 +1290,18 @@ static int mysqlnd_build_trace_string(zval **frame TSRMLS_DC, int num_args, va_l
        long line;
        HashTable *ht = Z_ARRVAL_PP(frame);
        zval **file, **tmp;
+       uint * level;
 
+       level = va_arg(args, uint *);
        str = va_arg(args, char**);
        len = va_arg(args, int*);
        num = va_arg(args, int*);
 
+       if (!*level) {
+               return ZEND_HASH_APPLY_KEEP;
+       }
+       --*level;
+
        s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
        sprintf(s_tmp, "#%d ", (*num)++);
        TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
@@ -1323,24 +1337,30 @@ static int mysqlnd_build_trace_string(zval **frame TSRMLS_DC, int num_args, va_l
 #endif
 
 
-char * mysqlnd_get_backtrace(TSRMLS_D)
+PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC)
 {
        zval *trace;
        char *res = estrdup(""), **str = &res, *s_tmp;
        int res_len = 0, *len = &res_len, num = 0;
+       if (max_levels == 0) {
+               max_levels = 99999;
+       }
 
        MAKE_STD_ZVAL(trace);
        zend_fetch_debug_backtrace(trace, 0, 0 TSRMLS_CC);
 
-       zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)mysqlnd_build_trace_string, 3, str, len, &num);
+       zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)mysqlnd_build_trace_string, 4, &max_levels, str, len, &num);
        zval_ptr_dtor(&trace);
 
-       s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
-       sprintf(s_tmp, "#%d {main}", num);
-       TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
-       efree(s_tmp);
+       if (max_levels) {
+               s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
+               sprintf(s_tmp, "#%d {main}", num);
+               TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
+               efree(s_tmp);
+       }
 
        res[res_len] = '\0';
+       *length = res_len;
 
        return res;
 }
index fa6246f9f212a5cae71f9d23f81733bc414840fd..96c953c24dc4b21be6741e06fd57b911d9bd8ac8 100644 (file)
@@ -78,7 +78,7 @@ PHPAPI void * _mysqlnd_calloc(unsigned int nmemb, size_t size MYSQLND_MEM_D);
 PHPAPI void *  _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D);
 PHPAPI void    _mysqlnd_free(void *ptr MYSQLND_MEM_D);
 
-PHPAPI char *  mysqlnd_get_backtrace(TSRMLS_D);
+PHPAPI char *  mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC);
 
 #if defined(__GNUC__)
 #define DBG_INF_EX(dbg_obj, msg)               do { if (dbg_skip_trace == FALSE) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg)); } while (0)
index d5677ed6d668f33afc81f967bae640d276bb3480..a22aaa3dcae5a64d0682ea586c3d017b4772fdf7 100644 (file)
@@ -304,8 +304,7 @@ mysqlnd_stmt_prepare_read_eof(MYSQLND_STMT *stmt TSRMLS_DC)
 
 /* {{{ mysqlnd_stmt::prepare */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const stmt, const char * const query,
-                                                                         unsigned int query_len TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_stmt, prepare)(MYSQLND_STMT * const stmt, const char * const query, unsigned int query_len TSRMLS_DC)
 {
        MYSQLND_STMT *stmt_to_prepare = stmt;
 
@@ -625,8 +624,7 @@ MYSQLND_METHOD(mysqlnd_stmt, execute)(MYSQLND_STMT * const stmt TSRMLS_DC)
 
 /* {{{ mysqlnd_fetch_stmt_row_buffered */
 enum_func_status
-mysqlnd_fetch_stmt_row_buffered(MYSQLND_RES *result, void *param, unsigned int flags,
-                                                               zend_bool *fetched_anything TSRMLS_DC)
+mysqlnd_fetch_stmt_row_buffered(MYSQLND_RES *result, void *param, unsigned int flags, zend_bool *fetched_anything TSRMLS_DC)
 {
        MYSQLND_STMT *stmt = (MYSQLND_STMT *) param;
        MYSQLND_RES_BUFFERED *set = result->stored_data;
@@ -721,8 +719,7 @@ mysqlnd_fetch_stmt_row_buffered(MYSQLND_RES *result, void *param, unsigned int f
 
 /* {{{ mysqlnd_stmt_fetch_row_unbuffered */
 static enum_func_status
-mysqlnd_stmt_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned int flags,
-                                                               zend_bool *fetched_anything TSRMLS_DC)
+mysqlnd_stmt_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned int flags, zend_bool *fetched_anything TSRMLS_DC)
 {
        enum_func_status ret;
        MYSQLND_STMT *stmt = (MYSQLND_STMT *) param;
@@ -885,8 +882,7 @@ MYSQLND_METHOD(mysqlnd_stmt, use_result)(MYSQLND_STMT *stmt TSRMLS_DC)
 
 /* {{{ mysqlnd_fetch_row_cursor */
 enum_func_status
-mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES *result, void *param, unsigned int flags,
-                                                         zend_bool *fetched_anything TSRMLS_DC)
+mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES *result, void *param, unsigned int flags, zend_bool *fetched_anything TSRMLS_DC)
 {
        enum_func_status ret;
        MYSQLND_STMT *stmt = (MYSQLND_STMT *) param;
@@ -1027,8 +1023,7 @@ mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES *result, void *param, unsigned int fla
 
 /* {{{ mysqlnd_stmt::fetch */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_stmt, fetch)(MYSQLND_STMT * const stmt,
-                                                                       zend_bool * const fetched_anything TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_stmt, fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything TSRMLS_DC)
 {
        enum_func_status ret;
        DBG_ENTER("mysqlnd_stmt::fetch");
@@ -1245,8 +1240,7 @@ MYSQLND_METHOD(mysqlnd_stmt, send_long_data)(MYSQLND_STMT * const stmt, unsigned
 
 /* {{{ mysqlnd_stmt::bind_parameters */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_stmt, bind_parameters)(MYSQLND_STMT * const stmt,
-                                                                                         MYSQLND_PARAM_BIND * const param_bind TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_stmt, bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_stmt::bind_param");
        DBG_INF_FMT("stmt=%lu param_count=%u", stmt->stmt_id, stmt->param_count);
@@ -1512,7 +1506,7 @@ MYSQLND_METHOD(mysqlnd_stmt, set_result_bind_dtor)(MYSQLND_STMT * const stmt,
 
 /* {{{ mysqlnd_stmt::insert_id */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_stmt, insert_id)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->upsert_status.last_insert_id;
 }
@@ -1521,7 +1515,7 @@ MYSQLND_METHOD(mysqlnd_stmt, insert_id)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::affected_rows */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_stmt, affected_rows)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, affected_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->upsert_status.affected_rows;
 }
@@ -1530,7 +1524,7 @@ MYSQLND_METHOD(mysqlnd_stmt, affected_rows)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::num_rows */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_stmt, num_rows)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, num_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->result? mysqlnd_num_rows(stmt->result):0;
 }
@@ -1539,7 +1533,7 @@ MYSQLND_METHOD(mysqlnd_stmt, num_rows)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::warning_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_stmt, warning_count)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, warning_count)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->upsert_status.warning_count;
 }
@@ -1548,7 +1542,7 @@ MYSQLND_METHOD(mysqlnd_stmt, warning_count)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::field_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_stmt, field_count)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, field_count)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->field_count;
 }
@@ -1557,7 +1551,7 @@ MYSQLND_METHOD(mysqlnd_stmt, field_count)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::param_count */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_stmt, param_count)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, param_count)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->param_count;
 }
@@ -1566,7 +1560,7 @@ MYSQLND_METHOD(mysqlnd_stmt, param_count)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::errno */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_stmt, errno)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, errno)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->error_info.error_no;
 }
@@ -1575,7 +1569,7 @@ MYSQLND_METHOD(mysqlnd_stmt, errno)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::error */
 static const char *
-MYSQLND_METHOD(mysqlnd_stmt, error)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, error)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->error_info.error;
 }
@@ -1584,7 +1578,7 @@ MYSQLND_METHOD(mysqlnd_stmt, error)(const MYSQLND_STMT * const stmt)
 
 /* {{{ mysqlnd_stmt::sqlstate */
 static const char *
-MYSQLND_METHOD(mysqlnd_stmt, sqlstate)(const MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, sqlstate)(const MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        return stmt->error_info.sqlstate[0] ? stmt->error_info.sqlstate:MYSQLND_SQLSTATE_NULL;
 }
@@ -1602,7 +1596,7 @@ MYSQLND_METHOD(mysqlnd_stmt, data_seek)(const MYSQLND_STMT * const stmt, uint64_
 
 /* {{{ mysqlnd_stmt::param_metadata */
 static MYSQLND_RES *
-MYSQLND_METHOD(mysqlnd_stmt, param_metadata)(MYSQLND_STMT * const stmt)
+MYSQLND_METHOD(mysqlnd_stmt, param_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC)
 {
        if (!stmt->param_count) {
                return NULL;
index 17f493a4744ed1054666e8f4bd6ca016dd932a9b..1c9af8472bcb4702899cbd1e68a53a1eb5ea91c1 100644 (file)
@@ -542,7 +542,7 @@ mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC
   completeness.
 */
 static 
-unsigned long * mysqlnd_fetch_lengths_buffered(MYSQLND_RES * const result)
+unsigned long * mysqlnd_fetch_lengths_buffered(MYSQLND_RES * const result TSRMLS_DC)
 {
        unsigned int i;
        zval **previous_row;
@@ -573,7 +573,7 @@ unsigned long * mysqlnd_fetch_lengths_buffered(MYSQLND_RES * const result)
 
 /* {{{ mysqlnd_fetch_lengths_unbuffered */
 static
-unsigned long * mysqlnd_fetch_lengths_unbuffered(MYSQLND_RES * const result)
+unsigned long * mysqlnd_fetch_lengths_unbuffered(MYSQLND_RES * const result TSRMLS_DC)
 {
        return result->lengths;
 }
@@ -581,9 +581,9 @@ unsigned long * mysqlnd_fetch_lengths_unbuffered(MYSQLND_RES * const result)
 
 #if !defined(MYSQLND_USE_OPTIMISATIONS) || MYSQLND_USE_OPTIMISATIONS == 0
 /* {{{ mysqlnd_res::fetch_lengths */
-PHPAPI unsigned long * mysqlnd_fetch_lengths(MYSQLND_RES * const result)
+PHPAPI unsigned long * _mysqlnd_fetch_lengths(MYSQLND_RES * const result TSRMLS_DC)
 {
-       return result->m.fetch_lengths? result->m.fetch_lengths(result):NULL;
+       return result->m.fetch_lengths? result->m.fetch_lengths(result TSRMLS_CC) : NULL;
 }
 /* }}} */
 #endif
@@ -698,8 +698,7 @@ mysqlnd_fetch_row_unbuffered_c(MYSQLND_RES *result TSRMLS_DC)
 
 /* {{{ mysqlnd_fetch_row_unbuffered */
 static enum_func_status
-mysqlnd_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned int flags,
-                                                       zend_bool *fetched_anything TSRMLS_DC)
+mysqlnd_fetch_row_unbuffered(MYSQLND_RES *result, void *param, unsigned int flags, zend_bool *fetched_anything TSRMLS_DC)
 {
        enum_func_status                ret;
        zval                                    *row = (zval *) param;
@@ -948,8 +947,7 @@ mysqlnd_fetch_row_buffered_c(MYSQLND_RES *result TSRMLS_DC)
 
 /* {{{ mysqlnd_fetch_row_buffered */
 static enum_func_status
-mysqlnd_fetch_row_buffered(MYSQLND_RES *result, void *param, unsigned int flags,
-                                                  zend_bool *fetched_anything TSRMLS_DC)
+mysqlnd_fetch_row_buffered(MYSQLND_RES *result, void *param, unsigned int flags, zend_bool *fetched_anything TSRMLS_DC)
 {
        unsigned int i;
        zval *row = (zval *) param;
@@ -1267,7 +1265,7 @@ MYSQLND_METHOD(mysqlnd_res, data_seek)(MYSQLND_RES *result, uint64_t row TSRMLS_
 
 /* {{{ mysqlnd_res::num_rows */
 static uint64_t
-MYSQLND_METHOD(mysqlnd_res, num_rows)(const MYSQLND_RES * const result)
+MYSQLND_METHOD(mysqlnd_res, num_rows)(const MYSQLND_RES * const result TSRMLS_DC)
 {
        /* Be compatible with libmysql. We count row_count, but will return 0 */
        return result->stored_data? result->stored_data->row_count:0;
@@ -1277,7 +1275,7 @@ MYSQLND_METHOD(mysqlnd_res, num_rows)(const MYSQLND_RES * const result)
 
 /* {{{ mysqlnd_res::num_fields */
 static unsigned int
-MYSQLND_METHOD(mysqlnd_res, num_fields)(const MYSQLND_RES * const result)
+MYSQLND_METHOD(mysqlnd_res, num_fields)(const MYSQLND_RES * const result TSRMLS_DC)
 {
        return result->field_count;
 }
@@ -1314,8 +1312,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_field)(MYSQLND_RES * const result TSRMLS_DC)
 
 /* {{{ mysqlnd_res::fetch_field_direct */
 static const MYSQLND_FIELD *
-MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(MYSQLND_RES * const result,
-                                                                                               MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res, fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_res::fetch_field_direct");
        if (result->meta) {
@@ -1362,8 +1359,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_fields)(MYSQLND_RES * const result TSRMLS_DC)
 
 /* {{{ mysqlnd_res::field_seek */
 static MYSQLND_FIELD_OFFSET
-MYSQLND_METHOD(mysqlnd_res, field_seek)(MYSQLND_RES * const result,
-                                                                               MYSQLND_FIELD_OFFSET field_offset)
+MYSQLND_METHOD(mysqlnd_res, field_seek)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC)
 {
        MYSQLND_FIELD_OFFSET return_value = 0;
        if (result->meta) {
@@ -1377,9 +1373,9 @@ MYSQLND_METHOD(mysqlnd_res, field_seek)(MYSQLND_RES * const result,
 
 /* {{{ mysqlnd_res::field_tell */
 static MYSQLND_FIELD_OFFSET
-MYSQLND_METHOD(mysqlnd_res, field_tell)(const MYSQLND_RES * const result)
+MYSQLND_METHOD(mysqlnd_res, field_tell)(const MYSQLND_RES * const result TSRMLS_DC)
 {
-       return result->meta? result->meta->m->field_tell(result->meta):0;
+       return result->meta? result->meta->m->field_tell(result->meta TSRMLS_CC) : 0;
 }
 /* }}} */
 
@@ -1451,8 +1447,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_row_c)(MYSQLND_RES *result TSRMLS_DC)
 
 /* {{{ mysqlnd_res::fetch_all */
 static void
-MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES *result, unsigned int flags,
-                                                                          zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC)
+MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES *result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC)
 {
        zval  *row;
        ulong i = 0;
@@ -1487,8 +1482,7 @@ MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES *result, unsigned int flags,
 
 /* {{{ mysqlnd_res::fetch_field_data */
 static void
-MYSQLND_METHOD(mysqlnd_res, fetch_field_data)(MYSQLND_RES *result, unsigned int offset,
-                                                                                         zval *return_value TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res, fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value TSRMLS_DC)
 {
        zval row;
        zval **entry;
index cfb0fbc957d6aefa4c675c4b643088230e1f7aaf..5186f6d94f95546e86a8e661bdd85729e7f6629c 100644 (file)
@@ -138,8 +138,7 @@ zend_bool mysqlnd_unicode_is_key_numeric(UChar *key, size_t length, long *idx)
 
 /* {{{ mysqlnd_res_meta::read_metadata */
 static enum_func_status
-MYSQLND_METHOD(mysqlnd_res_meta, read_metadata)(MYSQLND_RES_METADATA * const meta,
-                                                                                               MYSQLND *conn TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res_meta, read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND *conn TSRMLS_DC)
 {
        unsigned int i = 0;
        MYSQLND_PACKET_RES_FIELD * field_packet;
@@ -303,8 +302,7 @@ MYSQLND_METHOD(mysqlnd_res_meta, free)(MYSQLND_RES_METADATA *meta, zend_bool per
 
 /* {{{ mysqlnd_res::clone_metadata */
 static MYSQLND_RES_METADATA *
-MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata)(const MYSQLND_RES_METADATA * const meta,
-                                                                                                zend_bool persistent TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC)
 {
        unsigned int i;
        /* +1 is to have empty marker at the end */
@@ -393,8 +391,7 @@ MYSQLND_METHOD(mysqlnd_res_meta, fetch_field)(MYSQLND_RES_METADATA * const meta
 
 /* {{{ mysqlnd_res_meta::fetch_field_direct */
 static const MYSQLND_FIELD *
-MYSQLND_METHOD(mysqlnd_res_meta, fetch_field_direct)(const MYSQLND_RES_METADATA * const meta,
-                                                                                                        MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC)
+MYSQLND_METHOD(mysqlnd_res_meta, fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_res_meta::fetch_field_direct");
        DBG_INF_FMT("fieldnr=%d", fieldnr);
@@ -418,7 +415,7 @@ MYSQLND_METHOD(mysqlnd_res_meta, fetch_fields)(MYSQLND_RES_METADATA * const meta
 
 /* {{{ mysqlnd_res_meta::field_tell */
 static MYSQLND_FIELD_OFFSET
-MYSQLND_METHOD(mysqlnd_res_meta, field_tell)(const MYSQLND_RES_METADATA * const meta)
+MYSQLND_METHOD(mysqlnd_res_meta, field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC)
 {
        return meta->current_field;
 }
index b2b5adab963eb02f7a646de740fa575637bf0dba..e9290f363ad8f8b7f8a6b5a27299e81c575c1d66 100644 (file)
@@ -42,13 +42,20 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
 #define MYSQLND_STATS_UNLOCK(stats)
 #endif
 
-#define MYSQLND_CHECK_AND_CALL_HANDLER(stats, statistic, value) \
+#define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(stats, statistic, value) \
        { \
+                       MYSQLND_STATS_LOCK(stats); \
+                       (stats)->values[(statistic)] += (value); \
                        if ((stats)->triggers[(statistic)] && (stats)->in_trigger == FALSE) { \
                                (stats)->in_trigger = TRUE; \
+                               MYSQLND_STATS_UNLOCK(stats); \
+                                                                                                                                                                                       \
                                (stats)->triggers[(statistic)]((stats), (statistic), (value) TSRMLS_CC); \
+                                                                                                                                                                                       \
+                               MYSQLND_STATS_LOCK(stats); \
                                (stats)->in_trigger = FALSE; \
                        } \
+                       MYSQLND_STATS_UNLOCK(_p_s); \
        } \
        
 #define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \
@@ -56,10 +63,7 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
        enum_mysqlnd_collected_stats _s = (statistic);\
        MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
        if ((enabler) && _p_s && _s != _p_s->count) { \
-               MYSQLND_STATS_LOCK(_p_s); \
-               MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s, -1); \
-               _p_s->values[_s]--; \
-               MYSQLND_STATS_UNLOCK(_p_s); \
+               MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \
        }\
  }
 
@@ -68,10 +72,7 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
        enum_mysqlnd_collected_stats _s = (statistic);\
        MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
        if ((enabler) && _p_s && _s != _p_s->count) { \
-               MYSQLND_STATS_LOCK(_p_s); \
-               MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s, 1); \
-               _p_s->values[_s]++; \
-               MYSQLND_STATS_UNLOCK(_p_s); \
+               MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \
        }\
  }
 
@@ -81,10 +82,7 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
        MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \
        if ((enabler) && _p_s && _s != _p_s->count) { \
                uint64_t v = (uint64_t) (value); \
-               MYSQLND_STATS_LOCK(_p_s); \
-               MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s, v); \
-               _p_s->values[_s] += v; \
-               MYSQLND_STATS_UNLOCK(_p_s); \
+               MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \
        }\
  }
 
@@ -96,16 +94,8 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
                uint64_t v2 = (uint64_t) (value2); \
                enum_mysqlnd_collected_stats _s1 = (statistic1);\
                enum_mysqlnd_collected_stats _s2 = (statistic2);\
-               MYSQLND_STATS_LOCK(_p_s); \
-               if (_s1 != _p_s->count) { \
-                       MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s1, v1); \
-                       _p_s->values[_s1]+= v1; \
-               } \
-               if (_s2 != _p_s->count) { \
-                       MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s2, v2); \
-                       _p_s->values[_s2]+= v2; \
-               } \
-               MYSQLND_STATS_UNLOCK(_p_s); \
+               if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
+               if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
        }\
  }
 
@@ -119,20 +109,9 @@ extern const MYSQLND_STRING mysqlnd_stats_values_names[];
                enum_mysqlnd_collected_stats _s1 = (statistic1);\
                enum_mysqlnd_collected_stats _s2 = (statistic2);\
                enum_mysqlnd_collected_stats _s3 = (statistic3);\
-               MYSQLND_STATS_LOCK(_p_s); \
-               if (_s1 != _p_s->count) { \
-                       MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s1, v1); \
-                       _p_s->values[_s1]+= v1; \
-               } \
-               if (_s2 != _p_s->count) { \
-                       MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s2, v2); \
-                       _p_s->values[_s2]+= v2; \
-               } \
-               if (_s3 != _p_s->count) { \
-                       MYSQLND_CHECK_AND_CALL_HANDLER(_p_s, _s3, v3); \
-                       _p_s->values[_s3]+= v3; \
-               } \
-               MYSQLND_STATS_UNLOCK(_p_s); \
+               if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \
+               if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \
+               if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \
        }\
  }
 
index 8af7ece8f1d650ffaedd4efaea2d89204982cf4e..2cf9804aed5451dcf47c7060eed334358b1ac6d1 100644 (file)
@@ -267,13 +267,13 @@ struct st_mysqlnd_packet_chg_user_resp;
 struct st_mysqlnd_protocol_methods
 {
        struct st_mysqlnd_packet_greet *                (*get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
-       struct st_mysqlnd_packet_auth *         (*get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
+       struct st_mysqlnd_packet_auth *                 (*get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
        struct st_mysqlnd_packet_ok *                   (*get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
-       struct st_mysqlnd_packet_command *      (*get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
-       struct st_mysqlnd_packet_eof *          (*get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
-       struct st_mysqlnd_packet_rset_header *(*get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
+       struct st_mysqlnd_packet_command *              (*get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
+       struct st_mysqlnd_packet_eof *                  (*get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
+       struct st_mysqlnd_packet_rset_header *  (*get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
        struct st_mysqlnd_packet_res_field *    (*get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
-       struct st_mysqlnd_packet_row *          (*get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
+       struct st_mysqlnd_packet_row *                  (*get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
        struct st_mysqlnd_packet_stats *                (*get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
        struct st_mysqlnd_packet_prepare_response *(*get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
        struct st_mysqlnd_packet_chg_user_resp*(*get_change_user_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC);
@@ -282,6 +282,7 @@ struct st_mysqlnd_protocol_methods
 
 struct st_mysqlnd_conn_methods
 {
+       void                            (*init)(MYSQLND * conn TSRMLS_DC);
        enum_func_status        (*connect)(MYSQLND *conn, const char *host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket, unsigned int mysql_flags TSRMLS_DC);
        ulong                           (*escape_string)(const MYSQLND * const conn, char *newstr, const char *escapestr, size_t escapestr_len TSRMLS_DC);
        enum_func_status        (*set_charset)(MYSQLND * const conn, const char * const charset TSRMLS_DC);
@@ -304,27 +305,27 @@ struct st_mysqlnd_conn_methods
        enum_func_status        (*server_dump_debug_information)(MYSQLND * const conn TSRMLS_DC);
        enum_func_status        (*change_user)(MYSQLND * const conn, const char * user, const char * passwd, const char * db, zend_bool silent TSRMLS_DC);
 
-       unsigned int            (*get_error_no)(const MYSQLND * const conn);
-       const char *            (*get_error_str)(const MYSQLND * const conn);
-       const char *            (*get_sqlstate)(const MYSQLND * const conn);
-       uint64_t                        (*get_thread_id)(const MYSQLND * const conn);
+       unsigned int            (*get_error_no)(const MYSQLND * const conn TSRMLS_DC);
+       const char *            (*get_error_str)(const MYSQLND * const conn TSRMLS_DC);
+       const char *            (*get_sqlstate)(const MYSQLND * const conn TSRMLS_DC);
+       uint64_t                        (*get_thread_id)(const MYSQLND * const conn TSRMLS_DC);
        void                            (*get_statistics)(const MYSQLND * const conn, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
 
-       unsigned long           (*get_server_version)(const MYSQLND * const conn);
-       const char *            (*get_server_information)(const MYSQLND * const conn);
+       unsigned long           (*get_server_version)(const MYSQLND * const conn TSRMLS_DC);
+       const char *            (*get_server_information)(const MYSQLND * const conn TSRMLS_DC);
        enum_func_status        (*get_server_statistics)(MYSQLND *conn, char **message, unsigned int * message_len TSRMLS_DC);
-       const char *            (*get_host_information)(const MYSQLND * const conn);
-       unsigned int            (*get_protocol_information)(const MYSQLND * const conn);
-       const char *            (*get_last_message)(const MYSQLND * const conn);
-       const char *            (*charset_name)(const MYSQLND * const conn);
+       const char *            (*get_host_information)(const MYSQLND * const conn TSRMLS_DC);
+       unsigned int            (*get_protocol_information)(const MYSQLND * const conn TSRMLS_DC);
+       const char *            (*get_last_message)(const MYSQLND * const conn TSRMLS_DC);
+       const char *            (*charset_name)(const MYSQLND * const conn TSRMLS_DC);
        MYSQLND_RES *           (*list_fields)(MYSQLND *conn, const char *table, const char *achtung_wild TSRMLS_DC);
        MYSQLND_RES *           (*list_method)(MYSQLND *conn, const char *query, const char *achtung_wild, char *par1 TSRMLS_DC);
 
-       uint64_t                        (*get_last_insert_id)(const MYSQLND * const conn);
-       uint64_t                        (*get_affected_rows)(const MYSQLND * const conn);
-       unsigned int            (*get_warning_count)(const MYSQLND * const conn);
+       uint64_t                        (*get_last_insert_id)(const MYSQLND * const conn TSRMLS_DC);
+       uint64_t                        (*get_affected_rows)(const MYSQLND * const conn TSRMLS_DC);
+       unsigned int            (*get_warning_count)(const MYSQLND * const conn TSRMLS_DC);
 
-       unsigned int            (*get_field_count)(const MYSQLND * const conn);
+       unsigned int            (*get_field_count)(const MYSQLND * const conn TSRMLS_DC);
 
        enum_func_status        (*set_server_option)(MYSQLND * const conn, enum_mysqlnd_server_option option TSRMLS_DC);
        enum_func_status        (*set_client_option)(MYSQLND * const conn, enum_mysqlnd_option option, const char * const value TSRMLS_DC);
@@ -360,18 +361,18 @@ struct st_mysqlnd_res_methods
        MYSQLND_ROW_C           (*fetch_row_c)(MYSQLND_RES *result TSRMLS_DC);
        void                            (*fetch_all)(MYSQLND_RES *result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC);
        void                            (*fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value TSRMLS_DC);
-       uint64_t                        (*num_rows)(const MYSQLND_RES * const result);
-       unsigned int            (*num_fields)(const MYSQLND_RES * const result);
+       uint64_t                        (*num_rows)(const MYSQLND_RES * const result TSRMLS_DC);
+       unsigned int            (*num_fields)(const MYSQLND_RES * const result TSRMLS_DC);
        enum_func_status        (*skip_result)(MYSQLND_RES * const result TSRMLS_DC);
        enum_func_status        (*seek_data)(MYSQLND_RES * result, uint64_t row TSRMLS_DC);
-       MYSQLND_FIELD_OFFSET (*seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset);
-       MYSQLND_FIELD_OFFSET (*field_tell)(const MYSQLND_RES * const result);
+       MYSQLND_FIELD_OFFSET (*seek_field)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET field_offset TSRMLS_DC);
+       MYSQLND_FIELD_OFFSET (*field_tell)(const MYSQLND_RES * const result TSRMLS_DC);
        const MYSQLND_FIELD *(*fetch_field)(MYSQLND_RES * const result TSRMLS_DC);
        const MYSQLND_FIELD *(*fetch_field_direct)(MYSQLND_RES * const result, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
        const MYSQLND_FIELD *(*fetch_fields)(MYSQLND_RES * const result TSRMLS_DC);
 
-       enum_func_status        (*read_result_metadata)(MYSQLND_RES *result, MYSQLND *conn TSRMLS_DC);
-       unsigned long *         (*fetch_lengths)(MYSQLND_RES * const result);
+       enum_func_status        (*read_result_metadata)(MYSQLND_RES *result, MYSQLND * conn TSRMLS_DC);
+       unsigned long *         (*fetch_lengths)(MYSQLND_RES * const result TSRMLS_DC);
        enum_func_status        (*store_result_fetch_data)(MYSQLND * const conn, MYSQLND_RES *result, MYSQLND_RES_METADATA *meta, zend_bool binary_protocol, zend_bool to_cache TSRMLS_DC);
        void                            (*initialize_result_set_rest)(MYSQLND_RES * const result TSRMLS_DC);
 
@@ -396,7 +397,7 @@ struct st_mysqlnd_res_meta_methods
        const MYSQLND_FIELD *   (*fetch_field)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
        const MYSQLND_FIELD *   (*fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, MYSQLND_FIELD_OFFSET fieldnr TSRMLS_DC);
        const MYSQLND_FIELD *   (*fetch_fields)(MYSQLND_RES_METADATA * const meta TSRMLS_DC);
-       MYSQLND_FIELD_OFFSET    (*field_tell)(const MYSQLND_RES_METADATA * const meta);
+       MYSQLND_FIELD_OFFSET    (*field_tell)(const MYSQLND_RES_METADATA * const meta TSRMLS_DC);
        enum_func_status                (*read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND *conn TSRMLS_DC);
        MYSQLND_RES_METADATA *  (*clone_metadata)(const MYSQLND_RES_METADATA * const meta, zend_bool persistent TSRMLS_DC);
        void                                    (*free_metadata)(MYSQLND_RES_METADATA *meta, zend_bool persistent TSRMLS_DC);
@@ -427,22 +428,21 @@ struct st_mysqlnd_stmt_methods
        enum_func_status        (*bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind TSRMLS_DC);
        enum_func_status        (*bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no TSRMLS_DC);
        void                            (*set_result_bind_dtor)(MYSQLND_STMT * const stmt, void (*result_bind_dtor)(MYSQLND_RESULT_BIND * TSRMLS_DC) TSRMLS_DC);
-       enum_func_status        (*send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num,
-                                                                                 const char * const data, unsigned long length TSRMLS_DC);
-       MYSQLND_RES *           (*get_parameter_metadata)(MYSQLND_STMT * const stmt);
+       enum_func_status        (*send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num, const char * const data, unsigned long length TSRMLS_DC);
+       MYSQLND_RES *           (*get_parameter_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
        MYSQLND_RES *           (*get_result_metadata)(MYSQLND_STMT * const stmt TSRMLS_DC);
 
-       uint64_t                        (*get_last_insert_id)(const MYSQLND_STMT * const stmt);
-       uint64_t                        (*get_affected_rows)(const MYSQLND_STMT * const stmt);
-       uint64_t                        (*get_num_rows)(const MYSQLND_STMT * const stmt);
+       uint64_t                        (*get_last_insert_id)(const MYSQLND_STMT * const stmt TSRMLS_DC);
+       uint64_t                        (*get_affected_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
+       uint64_t                        (*get_num_rows)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
-       unsigned int            (*get_param_count)(const MYSQLND_STMT * const stmt);
-       unsigned int            (*get_field_count)(const MYSQLND_STMT * const stmt);
-       unsigned int            (*get_warning_count)(const MYSQLND_STMT * const stmt);
+       unsigned int            (*get_param_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
+       unsigned int            (*get_field_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
+       unsigned int            (*get_warning_count)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
-       unsigned int            (*get_error_no)(const MYSQLND_STMT * const stmt);
-       const char *            (*get_error_str)(const MYSQLND_STMT * const stmt);
-       const char *            (*get_sqlstate)(const MYSQLND_STMT * const stmt);
+       unsigned int            (*get_error_no)(const MYSQLND_STMT * const stmt TSRMLS_DC);
+       const char *            (*get_error_str)(const MYSQLND_STMT * const stmt TSRMLS_DC);
+       const char *            (*get_sqlstate)(const MYSQLND_STMT * const stmt TSRMLS_DC);
 
        enum_func_status        (*get_attribute)(const MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, void * const value TSRMLS_DC);
        enum_func_status        (*set_attribute)(MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, const void * const value TSRMLS_DC);
index c2ceec6bb515934d87ff676cff57eb457cd74447..5710377882eacc2040837ed8171962d8fe95dc5f 100644 (file)
@@ -956,7 +956,8 @@ php_mysqlnd_rset_field_read(void *_packet, MYSQLND *conn TSRMLS_DC)
        if (meta->db && meta->db != mysqlnd_empty_string) {
                len = meta->db_length;
                meta->db = memcpy(root_ptr, meta->db, len);
-               *(root_ptr + len) = '\0';
+               *(root_ptr +=len) = '\0';
+               root_ptr++;
        }
 
        if (meta->table && meta->table != mysqlnd_empty_string) {
index 2f6a9be99c51a9b5d31933f56a9de3953fbccd56..1bb6d2a74fd10bb6d36ea7054d461331dc4efd5c 100755 (executable)
@@ -462,7 +462,7 @@ static int pdo_mysql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value
                case PDO_ATTR_SERVER_INFO: {
                        char *tmp;
 #if PDO_USE_MYSQLND
-                       int tmp_len;
+                       unsigned int tmp_len;
 
                        if (mysqlnd_stat(H->server, &tmp, &tmp_len) == PASS) {
                                ZVAL_STRINGL(return_value, tmp, tmp_len, 0);
index ee65ab46ec254421a078cf8d76b99b6cade961d6..d8d40edb3e906be720f1a86037b6205983369fe1 100755 (executable)
@@ -120,7 +120,7 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
 }
 /* }}} */
 
-static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *stmt) /* {{{ */
+static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
 {
        long row_count;
        pdo_mysql_stmt *S = stmt->driver_data;
@@ -237,7 +237,7 @@ static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC)
                }
        }
        
-       pdo_mysql_stmt_set_row_count(stmt);
+       pdo_mysql_stmt_set_row_count(stmt TSRMLS_CC);
        PDO_DBG_RETURN(1);
 }
 /* }}} */
@@ -280,7 +280,7 @@ static int pdo_mysql_stmt_execute_prepared_mysqlnd(pdo_stmt_t *stmt TSRMLS_DC) /
                }
        }
        
-       pdo_mysql_stmt_set_row_count(stmt);
+       pdo_mysql_stmt_set_row_count(stmt TSRMLS_CC);
        PDO_DBG_RETURN(1);
 }
 /* }}} */