]> granicus.if.org Git - php/commitdiff
Add some trace info as well as update CLIENT_ flags
authorAndrey Hristov <andrey@php.net>
Wed, 16 Jul 2014 16:24:39 +0000 (19:24 +0300)
committerAndrey Hristov <andrey@php.net>
Wed, 16 Jul 2014 16:24:39 +0000 (19:24 +0300)
ext/mysqli/mysqli.c
ext/mysqli/tests/mysqli_constants.phpt
ext/mysqlnd/mysqlnd.c
ext/mysqlnd/mysqlnd_enum_n_def.h
ext/mysqlnd/mysqlnd_net.c

index b23d7e313924a43680d1c8f83d34615628849d2d..f13958897faed681784a28cc71971b10c056bda6 100644 (file)
@@ -715,6 +715,10 @@ PHP_MINIT_FUNCTION(mysqli)
        REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_IGNORE_SPACE", CLIENT_IGNORE_SPACE, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_NO_SCHEMA", CLIENT_NO_SCHEMA, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_FOUND_ROWS", CLIENT_FOUND_ROWS, CONST_CS | CONST_PERSISTENT);
+#if (MYSQL_VERSION_ID >= 50611 && defined(CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS)) || defined(MYSQLI_USE_MYSQLND)
+       REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS", CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS", MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, CONST_CS | CONST_PERSISTENT);
+#endif
 
        /* for mysqli_query */
        REGISTER_LONG_CONSTANT("MYSQLI_STORE_RESULT", MYSQLI_STORE_RESULT, CONST_CS | CONST_PERSISTENT);
@@ -848,9 +852,6 @@ PHP_MINIT_FUNCTION(mysqli)
        REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_BACKUP_LOG", REFRESH_BACKUP_LOG, CONST_CS | CONST_PERSISTENT);
 #endif
 
-#if (MYSQL_VERSION_ID >= 50611 && defined(CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS)) || defined(MYSQLI_USE_MYSQLND)
-       REGISTER_LONG_CONSTANT("MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS", MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, CONST_CS | CONST_PERSISTENT);
-#endif
 
        REGISTER_LONG_CONSTANT("MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT", TRANS_START_WITH_CONSISTENT_SNAPSHOT, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_TRANS_START_READ_WRITE", TRANS_START_READ_WRITE, CONST_CS | CONST_PERSISTENT);
index bed9d53419cf994ffeffffca6ddaec56015d0132..9bbc8bb4b734a81e782964ba06d04abb38f70ba1 100644 (file)
@@ -196,6 +196,7 @@ require_once('skipifconnectfailure.inc');
        if (($IS_MYSQLND && version_compare(PHP_VERSION, ' 5.4.12-dev', '>=')) || (!$IS_MYSQLND && ($version > 50610))) {
                /* could be that MySQL/libmysql 5.6.9 had the flag already but it was no stable release */
                $expected_constants["MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true;
+               $expected_constants["MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true;
        }
 
        $unexpected_constants = array();
index 893a144c4b6745242d1076482acbe3c25ec82e2a..2254fd92bc75a3d7640badab9e0033932716425f 100644 (file)
@@ -321,6 +321,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, simple_command_send_request)(MYSQLND_CONN_DATA
        DBG_ENTER("mysqlnd_conn_data::simple_command_send_request");
        DBG_INF_FMT("command=%s silent=%u", mysqlnd_command_to_text[command], silent);
        DBG_INF_FMT("conn->server_status=%u", conn->upsert_status->server_status);
+       DBG_INF_FMT("sending %u bytes", arg_len + 1); /* + 1 is for the command */
 
        switch (CONN_GET_STATE(conn)) {
                case CONN_READY:
@@ -448,6 +449,31 @@ mysqlnd_switch_to_ssl_if_needed(
        const MYSQLND_CHARSET * charset;
        MYSQLND_PACKET_AUTH * auth_packet;
        DBG_ENTER("mysqlnd_switch_to_ssl_if_needed");
+       DBG_INF_FMT("client_capability_flags=%lu", mysql_flags);
+       DBG_INF_FMT("CLIENT_LONG_PASSWORD=      %d", mysql_flags & CLIENT_LONG_PASSWORD);
+       DBG_INF_FMT("CLIENT_FOUND_ROWS=         %d", mysql_flags & CLIENT_FOUND_ROWS);
+       DBG_INF_FMT("CLIENT_LONG_FLAG=          %d", mysql_flags & CLIENT_LONG_FLAG);
+       DBG_INF_FMT("CLIENT_NO_SCHEMA=          %d", mysql_flags & CLIENT_NO_SCHEMA);
+       DBG_INF_FMT("CLIENT_COMPRESS=           %d", mysql_flags & CLIENT_COMPRESS);
+       DBG_INF_FMT("CLIENT_ODBC=                       %d", mysql_flags & CLIENT_ODBC);
+       DBG_INF_FMT("CLIENT_LOCAL_FILES=        %d", mysql_flags & CLIENT_LOCAL_FILES);
+       DBG_INF_FMT("CLIENT_IGNORE_SPACE=       %d", mysql_flags & CLIENT_IGNORE_SPACE);
+       DBG_INF_FMT("CLIENT_PROTOCOL_41=        %d", mysql_flags & CLIENT_PROTOCOL_41);
+       DBG_INF_FMT("CLIENT_INTERACTIVE=        %d", mysql_flags & CLIENT_INTERACTIVE);
+       DBG_INF_FMT("CLIENT_SSL=                        %d", mysql_flags & CLIENT_SSL);
+       DBG_INF_FMT("CLIENT_IGNORE_SIGPIPE=     %d", mysql_flags & CLIENT_IGNORE_SIGPIPE);
+       DBG_INF_FMT("CLIENT_TRANSACTIONS=       %d", mysql_flags & CLIENT_TRANSACTIONS);
+       DBG_INF_FMT("CLIENT_RESERVED=           %d", mysql_flags & CLIENT_RESERVED);
+       DBG_INF_FMT("CLIENT_SECURE_CONNECTION=%d", mysql_flags & CLIENT_SECURE_CONNECTION);
+       DBG_INF_FMT("CLIENT_MULTI_STATEMENTS=%d", mysql_flags & CLIENT_MULTI_STATEMENTS);
+       DBG_INF_FMT("CLIENT_MULTI_RESULTS=      %d", mysql_flags & CLIENT_MULTI_RESULTS);
+       DBG_INF_FMT("CLIENT_PS_MULTI_RESULTS=%d", mysql_flags & CLIENT_PS_MULTI_RESULTS);
+       DBG_INF_FMT("CLIENT_CONNECT_ATTRS=      %d", mysql_flags & CLIENT_PLUGIN_AUTH);
+       DBG_INF_FMT("CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA=     %d", mysql_flags & CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA);
+       DBG_INF_FMT("CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS=       %d", mysql_flags & CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS);
+       DBG_INF_FMT("CLIENT_SESSION_TRACK=              %d", mysql_flags & CLIENT_SESSION_TRACK);
+       DBG_INF_FMT("CLIENT_SSL_VERIFY_SERVER_CERT=     %d", mysql_flags & CLIENT_SSL_VERIFY_SERVER_CERT);
+       DBG_INF_FMT("CLIENT_REMEMBER_OPTIONS=           %d", mysql_flags & CLIENT_REMEMBER_OPTIONS);
 
        auth_packet = conn->protocol->m.get_auth_packet(conn->protocol, FALSE TSRMLS_CC);
        if (!auth_packet) {
@@ -1863,6 +1889,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn TSR
        enum_func_status ret = PASS;
        MYSQLND_NET * net = conn->net;
        php_stream * net_stream = net->data->m.get_stream(net TSRMLS_CC);
+       enum mysqlnd_connection_state state;
 
        DBG_ENTER("mysqlnd_send_close");
        DBG_INF_FMT("conn=%llu net->data->stream->abstract=%p", conn->thread_id, net_stream? net_stream->abstract:NULL);
@@ -1873,7 +1900,9 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn TSR
                        MYSQLND_DEC_CONN_STATISTIC(conn->stats, STAT_OPENED_PERSISTENT_CONNECTIONS);
                }
        }
-       switch (CONN_GET_STATE(conn)) {
+       state = CONN_GET_STATE(conn);
+       DBG_INF_FMT("state=%u", state);
+       switch (state) {
                case CONN_READY:
                        DBG_INF("Connection clean, sending COM_QUIT");
                        if (net_stream) {
index e1fc5f8f01f8f4c45bcca1e6088cf08d7335d0f7..3212c778a8fbe4b23d66d2898d147123d474d453 100644 (file)
 #define CLIENT_CONNECT_ATTRS           (1UL << 20) /* Client supports connection attributes */
 #define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA  (1UL << 21) /* Enable authentication response packet to be larger than 255 bytes. */
 #define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS            (1UL << 22) /* Don't close the connection for a connection with expired password. */
-#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
+#define CLIENT_SESSION_TRACK                                   (1UL << 23) /* Extended OK */
+#define CLIENT_SSL_VERIFY_SERVER_CERT  (1UL << 30)
+#define CLIENT_REMEMBER_OPTIONS                        (1UL << 31)
 
 #define MYSQLND_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | \
                                CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION | \
@@ -214,23 +216,23 @@ typedef enum mysqlnd_protocol_type
 
 typedef enum mysqlnd_field_types
 {
-       MYSQL_TYPE_DECIMAL,
-       MYSQL_TYPE_TINY,
-       MYSQL_TYPE_SHORT,
-       MYSQL_TYPE_LONG,
-       MYSQL_TYPE_FLOAT,
-       MYSQL_TYPE_DOUBLE,
-       MYSQL_TYPE_NULL,
-       MYSQL_TYPE_TIMESTAMP,
-       MYSQL_TYPE_LONGLONG,
-       MYSQL_TYPE_INT24,
-       MYSQL_TYPE_DATE,
-       MYSQL_TYPE_TIME,
-       MYSQL_TYPE_DATETIME,
-       MYSQL_TYPE_YEAR,
-       MYSQL_TYPE_NEWDATE,
-       MYSQL_TYPE_VARCHAR,
-       MYSQL_TYPE_BIT,
+       MYSQL_TYPE_DECIMAL      = 0,
+       MYSQL_TYPE_TINY         = 1,
+       MYSQL_TYPE_SHORT        = 2,
+       MYSQL_TYPE_LONG         = 3,
+       MYSQL_TYPE_FLOAT        = 4,
+       MYSQL_TYPE_DOUBLE       = 5,
+       MYSQL_TYPE_NULL         = 6,
+       MYSQL_TYPE_TIMESTAMP= 7,
+       MYSQL_TYPE_LONGLONG     = 8,
+       MYSQL_TYPE_INT24        = 9,
+       MYSQL_TYPE_DATE         = 10,
+       MYSQL_TYPE_TIME         = 11,
+       MYSQL_TYPE_DATETIME     = 12,
+       MYSQL_TYPE_YEAR         = 13,
+       MYSQL_TYPE_NEWDATE      = 14,
+       MYSQL_TYPE_VARCHAR      = 15,
+       MYSQL_TYPE_BIT          = 16,
        MYSQL_TYPE_NEWDECIMAL=246,
        MYSQL_TYPE_ENUM=247,
        MYSQL_TYPE_SET=248,
@@ -322,23 +324,23 @@ typedef enum mysqlnd_server_option
 typedef enum mysqlnd_connection_state
 {
        CONN_ALLOCED = 0,
-       CONN_READY,
-       CONN_QUERY_SENT,
-       CONN_SENDING_LOAD_DATA,
-       CONN_FETCHING_DATA,
-       CONN_NEXT_RESULT_PENDING,
-       CONN_QUIT_SENT /* object is "destroyed" at this stage */
+       CONN_READY = 1,
+       CONN_QUERY_SENT = 2,
+       CONN_SENDING_LOAD_DATA = 3,
+       CONN_FETCHING_DATA = 4,
+       CONN_NEXT_RESULT_PENDING = 5,
+       CONN_QUIT_SENT = 6 /* object is "destroyed" at this stage */
 } enum_mysqlnd_connection_state;
 
 
 typedef enum mysqlnd_stmt_state
 {
        MYSQLND_STMT_INITTED = 0,
-       MYSQLND_STMT_PREPARED,
-       MYSQLND_STMT_EXECUTED,
-       MYSQLND_STMT_WAITING_USE_OR_STORE,
-       MYSQLND_STMT_USE_OR_STORE_CALLED,
-       MYSQLND_STMT_USER_FETCHING /* fetch_row_buff or fetch_row_unbuf */
+       MYSQLND_STMT_PREPARED = 1,
+       MYSQLND_STMT_EXECUTED = 2,
+       MYSQLND_STMT_WAITING_USE_OR_STORE = 3,
+       MYSQLND_STMT_USE_OR_STORE_CALLED = 4,
+       MYSQLND_STMT_USER_FETCHING = 5/* fetch_row_buff or fetch_row_unbuf */
 } enum_mysqlnd_stmt_state;
 
 
@@ -596,9 +598,10 @@ enum php_mysqlnd_server_command
        COM_STMT_RESET = 26,
        COM_SET_OPTION = 27,
        COM_STMT_FETCH = 28,
-       COM_DAEMON,
-       COM_BINLOG_DUMP_GTID,
-       COM_RESET_CONNECTION,
+       COM_DAEMON = 29,
+       COM_BINLOG_DUMP_GTID = 30,
+       COM_RESET_CONNECTION = 31,
+       COM_STMT_EXECUTE_BATCH = 32,
        COM_END
 };
 
index fadcbd87f6b3cc2765d34e5441243b1604c22e98..a0beed8b9775d3e520676b3f2c908d8dc8754ca3 100644 (file)
@@ -99,6 +99,7 @@ MYSQLND_METHOD(mysqlnd_net, network_write_ex)(MYSQLND_NET * const net, const zen
 {
        size_t ret;
        DBG_ENTER("mysqlnd_net::network_write_ex");
+       DBG_INF_FMT("sending %u bytes", count);
        ret = php_stream_write(net->data->m.get_stream(net TSRMLS_CC), (char *)buffer, count);
        DBG_RETURN(ret);
 }
@@ -357,6 +358,10 @@ MYSQLND_METHOD(mysqlnd_net, send_ex)(MYSQLND_NET * const net, zend_uchar * const
 
        do {
                to_be_sent = MIN(left, MYSQLND_MAX_PACKET_SIZE);
+               DBG_INF_FMT("to_be_sent=%u", to_be_sent);
+               DBG_INF_FMT("packets_sent=%u", packets_sent);
+               DBG_INF_FMT("compressed_envelope_packet_no=%u", net->compressed_envelope_packet_no);
+               DBG_INF_FMT("packet_no=%u", net->packet_no);
 #ifdef MYSQLND_COMPRESSION_ENABLED
                if (net->data->compressed == TRUE) {
                        /* here we need to compress the data and then write it, first comes the compressed header */