diff options
author | Andrey Hristov <andrey@php.net> | 2014-05-20 19:57:11 +0300 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2014-05-20 19:57:11 +0300 |
commit | 5d57e17a15cf89bf8b20d718ce5070b42ee446e0 (patch) | |
tree | 63ffe65e89412e6e37e267d3889a28d0823d3672 /ext/mysqlnd/mysqlnd_wireprotocol.c | |
parent | 2312af04a7ca7a43166a7a1be20067e632ff917a (diff) | |
download | php-git-5d57e17a15cf89bf8b20d718ce5070b42ee446e0.tar.gz |
First set of phpng changes for mysqlnd
Diffstat (limited to 'ext/mysqlnd/mysqlnd_wireprotocol.c')
-rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index ecce71d9c2..6a22b18829 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -561,9 +561,10 @@ size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC } if (packet->connect_attr && zend_hash_num_elements(packet->connect_attr)) { + size_t ca_payload_len = 0; +#ifdef OLD_CODE HashPosition pos_value; const char ** entry_value; - size_t ca_payload_len = 0; zend_hash_internal_pointer_reset_ex(packet->connect_attr, &pos_value); while (SUCCESS == zend_hash_get_current_data_ex(packet->connect_attr, (void **)&entry_value, &pos_value)) { char *s_key; @@ -579,10 +580,28 @@ size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC } zend_hash_move_forward_ex(conn->options->connect_attr, &pos_value); } +#else + { + zend_string * key; + unsigned long unused_num_key; + zval * entry_value; + ZEND_HASH_FOREACH_KEY_VAL(packet->connect_attr, unused_num_key, key, entry_value) { + if (key) { /* HASH_KEY_IS_STRING */ + size_t value_len = Z_STRLEN_P(entry_value); + + ca_payload_len += php_mysqlnd_net_store_length_size(key->len); + ca_payload_len += key->len; + ca_payload_len += php_mysqlnd_net_store_length_size(value_len); + ca_payload_len += value_len; + } + } ZEND_HASH_FOREACH_END(); + } +#endif if ((sizeof(buffer) - (p - buffer)) >= (ca_payload_len + php_mysqlnd_net_store_length_size(ca_payload_len))) { p = php_mysqlnd_net_store_length(p, ca_payload_len); +#ifdef OLD_CODE zend_hash_internal_pointer_reset_ex(packet->connect_attr, &pos_value); while (SUCCESS == zend_hash_get_current_data_ex(packet->connect_attr, (void **)&entry_value, &pos_value)) { char *s_key; @@ -601,6 +620,27 @@ size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC } zend_hash_move_forward_ex(conn->options->connect_attr, &pos_value); } +#else + { + zend_string * key; + unsigned long unused_num_key; + zval * entry_value; + ZEND_HASH_FOREACH_KEY_VAL(packet->connect_attr, unused_num_key, key, entry_value) { + if (key) { /* HASH_KEY_IS_STRING */ + size_t value_len = Z_STRLEN_P(entry_value); + + /* copy key */ + p = php_mysqlnd_net_store_length(p, key->len); + memcpy(p, key->val, key->len); + p+= key->len; + /* copy value */ + p = php_mysqlnd_net_store_length(p, value_len); + memcpy(p, Z_STRVAL_P(entry_value), value_len); + p+= value_len; + } + } ZEND_HASH_FOREACH_END(); + } +#endif } else { /* cannot put the data - skip */ } @@ -1578,7 +1618,6 @@ php_mysqlnd_rowp_read_text_protocol_aux(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, unsigned int field_count, const MYSQLND_FIELD * fields_metadata, zend_bool as_int_or_float, zend_bool copy_data, MYSQLND_STATS * stats TSRMLS_DC) { - unsigned int i; zend_bool last_field_was_string = FALSE; zval **current_field, **end_field, **start_field; |