]> granicus.if.org Git - php/commitdiff
Have the lengths also to skip many calls to strlen
authorAndrey Hristov <andrey@php.net>
Thu, 22 Oct 2009 17:07:55 +0000 (17:07 +0000)
committerAndrey Hristov <andrey@php.net>
Thu, 22 Oct 2009 17:07:55 +0000 (17:07 +0000)
ext/mysqlnd/mysqlnd.c
ext/mysqlnd/mysqlnd_structs.h

index 14b7df97848e35d067ab7535a648af2adc2fceb8..822bc42841871d7801fcd3eb285515336a80b126 100644 (file)
@@ -174,6 +174,11 @@ MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND *conn TSRMLS_DC)
                mnd_pefree(conn->passwd, pers);
                conn->passwd = NULL;
        }
+       if (conn->connect_or_select_db) {
+               DBG_INF("Freeing connect_or_select_db");
+               mnd_pefree(conn->connect_or_select_db, pers);
+               conn->connect_or_select_db = NULL;
+       }
        if (conn->unix_socket) {
                DBG_INF("Freeing unix_socket");
                mnd_pefree(conn->unix_socket, pers);
@@ -588,6 +593,7 @@ PHPAPI MYSQLND *mysqlnd_connect(MYSQLND *conn,
        } else {
                conn->scheme = transport;
        }
+       conn->scheme_len = strlen(conn->scheme);
        DBG_INF(conn->scheme);
        conn->net.stream = php_stream_xport_create(conn->scheme, transport_len, streams_options, streams_flags,
                                                                                           hashed_details, 
@@ -726,13 +732,18 @@ PHPAPI MYSQLND *mysqlnd_connect(MYSQLND *conn,
                CONN_SET_STATE(conn, CONN_READY);
 
                conn->user                              = pestrdup(user, conn->persistent);
+               conn->user_len                  = strlen(conn->user);
                conn->passwd                    = pestrndup(passwd, passwd_len, conn->persistent);
+               conn->passwd_len                = passwd_len;
                conn->port                              = port;
+               conn->connect_or_select_db = pestrndup(db, db_len, conn->persistent);
+               conn->connect_or_select_db_len = db_len;
 
                if (!unix_socket) {
                        char *p;
 
                        conn->host = pestrdup(host, conn->persistent);
+                       conn->host_len = strlen(conn->host);
                        spprintf(&p, 0, "%s via TCP/IP", conn->host);
                        if (conn->persistent) {
                                conn->host_info = pestrdup(p, 1);
@@ -742,6 +753,7 @@ PHPAPI MYSQLND *mysqlnd_connect(MYSQLND *conn,
                        }
                } else {
                        conn->unix_socket       = pestrdup(socket, conn->persistent);
+                       conn->unix_socket_len = strlen(conn->unix_socket);
                        conn->host_info         = pestrdup("Localhost via UNIX socket", conn->persistent);
                }
                conn->client_flag               = auth_packet->client_flags;
@@ -1282,7 +1294,12 @@ MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn,
          a protocol of giving back -1. Thus we have to follow it :(
        */
        SET_ERROR_AFF_ROWS(conn);
-
+       if (ret == PASS) {
+               if (conn->connect_or_select_db) {
+                       pefree(conn->connect_or_select_db, conn->persistent);
+               }
+               conn->connect_or_select_db = pestrndup(db, db_len, conn->persistent);
+       }
        DBG_RETURN(ret);
 }
 /* }}} */
index a5ba59e6eaaf6eeb123526832e42d7e63817978e..b54ea7fa7a147962aa5b30ddd4be7c5dc56f3621 100644 (file)
@@ -393,17 +393,23 @@ struct st_mysqlnd_connection
 
 /* Information related */
        char                    *host;
+       unsigned int    host_len;
        char                    *unix_socket;
+       unsigned int    unix_socket_len;
        char                    *user;
+       unsigned int    user_len;
        char                    *passwd;
-       unsigned int    *passwd_len;
+       unsigned int    passwd_len;
        char                    *scheme;
+       unsigned int    scheme_len;
        uint64_t                thread_id;
        char                    *server_version;
        char                    *host_info;
        unsigned char   *scramble;
        const MYSQLND_CHARSET *charset;
        const MYSQLND_CHARSET *greet_charset;
+       char                    *connect_or_select_db;
+       unsigned int    connect_or_select_db_len;
        MYSQLND_INFILE  infile;
        unsigned int    protocol_version;
        unsigned long   max_packet_size;