]> granicus.if.org Git - php/commitdiff
Merge mysqlnd_field_hash_key structure into st_mysqlnd_field.
authorDmitry Stogov <dmitry@zend.com>
Tue, 14 Nov 2017 13:14:13 +0000 (16:14 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 14 Nov 2017 13:14:13 +0000 (16:14 +0300)
ext/mysqlnd/mysqlnd_result.c
ext/mysqlnd/mysqlnd_result_meta.c
ext/mysqlnd/mysqlnd_structs.h

index 1035d0379fc633bc38be94c6c4ba2f41c237d458..ddefc9efd5b57885db0082e253cc930fa6b338c2 100644 (file)
@@ -869,10 +869,10 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void
                                                  hashing of the column name, which is not needed as it can be precomputed.
                                                */
                                                Z_TRY_ADDREF_P(data);
-                                               if (meta->zend_hash_keys[i].is_numeric == FALSE) {
+                                               if (meta->fields[i].is_numeric == FALSE) {
                                                        zend_hash_update(row_ht, meta->fields[i].sname, data);
                                                } else {
-                                                       zend_hash_index_update(row_ht, meta->zend_hash_keys[i].key, data);
+                                                       zend_hash_index_update(row_ht, meta->fields[i].num_key, data);
                                                }
                                        }
 
@@ -1123,10 +1123,10 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo
                                  hashing of the column name, which is not needed as it can be precomputed.
                                */
                                Z_TRY_ADDREF_P(data);
-                               if (meta->zend_hash_keys[i].is_numeric == FALSE) {
+                               if (meta->fields[i].is_numeric == FALSE) {
                                        zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data);
                                } else {
-                                       zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data);
+                                       zend_hash_index_update(Z_ARRVAL_P(row), meta->fields[i].num_key, data);
                                }
                        }
                }
@@ -1219,10 +1219,10 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void
                                  hashing of the column name, which is not needed as it can be precomputed.
                                */
                                Z_TRY_ADDREF_P(data);
-                               if (meta->zend_hash_keys[i].is_numeric == FALSE) {
+                               if (meta->fields[i].is_numeric == FALSE) {
                                        zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data);
                                } else {
-                                       zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data);
+                                       zend_hash_index_update(Z_ARRVAL_P(row), meta->fields[i].num_key, data);
                                }
                        }
                        /*
index 1db22f507d93ecbe01a1f90abf7a2274f064f66e..1b2f4ddc33bc55a524220c65e9710d755886f2c9 100644 (file)
@@ -87,8 +87,8 @@ MYSQLND_METHOD(mysqlnd_res_meta, read_metadata)(MYSQLND_RES_METADATA * const met
                }
 
                /* For BC we have to check whether the key is numeric and use it like this */
-               if ((meta->zend_hash_keys[i].is_numeric = ZEND_HANDLE_NUMERIC(field_packet.metadata->sname, idx))) {
-                       meta->zend_hash_keys[i].key = idx;
+               if ((meta->fields[i].is_numeric = ZEND_HANDLE_NUMERIC(field_packet.metadata->sname, idx))) {
+                       meta->fields[i].num_key = idx;
                }
        }
        PACKET_FREE(&field_packet);
@@ -116,11 +116,6 @@ MYSQLND_METHOD(mysqlnd_res_meta, free)(MYSQLND_RES_METADATA * meta)
                meta->fields = NULL;
        }
 
-       if (meta->zend_hash_keys) {
-               DBG_INF("Freeing zend_hash_keys");
-               mnd_efree(meta->zend_hash_keys);
-               meta->zend_hash_keys = NULL;
-       }
        DBG_INF("Freeing metadata structure");
        mnd_efree(meta);
 
@@ -138,7 +133,6 @@ MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata)(const MYSQLND_RES_METADATA * co
        MYSQLND_RES_METADATA * new_meta = NULL;
        MYSQLND_FIELD * new_fields;
        MYSQLND_FIELD * orig_fields = meta->fields;
-       size_t len = meta->field_count * sizeof(struct mysqlnd_field_hash_key);
 
        DBG_ENTER("mysqlnd_res_meta::clone_metadata");
 
@@ -153,12 +147,6 @@ MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata)(const MYSQLND_RES_METADATA * co
                goto oom;
        }
 
-       new_meta->zend_hash_keys = mnd_emalloc(len);
-       if (!new_meta->zend_hash_keys) {
-               goto oom;
-       }
-       memcpy(new_meta->zend_hash_keys, meta->zend_hash_keys, len);
-
        /*
          This will copy also the strings and the root, which we will have
          to adjust in the loop
@@ -180,6 +168,9 @@ MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata)(const MYSQLND_RES_METADATA * co
                        new_fields[i].name_length = ZSTR_LEN(new_fields[i].sname);
                }
 
+               new_fields[i].is_numeric = orig_fields[i].is_numeric;
+               new_fields[i].num_key = orig_fields[i].num_key;
+
                if (orig_fields[i].org_name && orig_fields[i].org_name != mysqlnd_empty_string) {
                        new_fields[i].org_name = new_fields[i].root +
                                (orig_fields[i].org_name - orig_fields[i].root);
@@ -316,8 +307,7 @@ mysqlnd_result_meta_init(unsigned int field_count)
                ret->field_count = field_count;
                /* +1 is to have empty marker at the end */
                ret->fields = mnd_ecalloc(field_count + 1, sizeof(MYSQLND_FIELD));
-               ret->zend_hash_keys = mnd_ecalloc(field_count, sizeof(struct mysqlnd_field_hash_key));
-               if (!ret->fields || !ret->zend_hash_keys) {
+               if (!ret->fields) {
                        break;
                }
                DBG_INF_FMT("meta=%p", ret);
index 3d76bc22bf6feec650b1f2944bb8707075f95d46..15b8f9a09a3639c8edb04dd3f975246265867a65 100644 (file)
@@ -85,6 +85,8 @@ typedef struct st_mysqlnd_cmd_buffer
 typedef struct st_mysqlnd_field
 {
        zend_string *sname;                     /* Name of column */
+       zend_bool    is_numeric;
+       zend_ulong       num_key;
        const char  *name;          /* Name of column in C string */
        const char  *org_name;          /* Original column name, if an alias */
        const char  *table;                     /* Table of column if column was a field */
@@ -1134,18 +1136,9 @@ struct st_mysqlnd_protocol_frame_codec
 };
 
 
-
-struct mysqlnd_field_hash_key
-{
-       zend_bool               is_numeric;
-       zend_ulong      key;
-};
-
-
 struct st_mysqlnd_result_metadata
 {
        MYSQLND_FIELD                                   *fields;
-       struct mysqlnd_field_hash_key   *zend_hash_keys;
 
        MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta) * m;