]> granicus.if.org Git - php/commitdiff
Don't use zend_string for other fields (only name here is enough)
authorXinchen Hui <laruence@php.net>
Tue, 24 Jun 2014 16:42:20 +0000 (00:42 +0800)
committerXinchen Hui <laruence@php.net>
Tue, 24 Jun 2014 16:42:20 +0000 (00:42 +0800)
ext/mysql/php_mysql.c
ext/mysqli/mysqli_api.c
ext/mysqlnd/mysqlnd_result.c
ext/mysqlnd/mysqlnd_result_meta.c
ext/mysqlnd/mysqlnd_structs.h
ext/mysqlnd/mysqlnd_wireprotocol.c
ext/mysqlnd/mysqlnd_wireprotocol.h
ext/mysqlnd/php_mysqlnd_config.h [new file with mode: 0644]
ext/pdo_mysql/mysql_statement.c

index cbef4e6960402e9f0bbc5103bdf0c87ad8d2e786..6518f8d36ad44658cbba52ac87815f8e947ab50b 100644 (file)
@@ -1969,11 +1969,9 @@ Q: String or long first?
                                        }
                                        mysql_field_seek(mysql_result, 0);
                                        while ((tmp_field = mysql_fetch_field(mysql_result))) {
-#ifdef MYSQL_USE_MYSQLND
-                                               if ((!table_name || !strncasecmp(tmp_field->table->val, table_name, tmp_field->table->len)) && !strncasecmp(tmp_field->name->val, field_name, tmp_field->name->len)) {
-#else
-                                               if ((!table_name || !strcasecmp(tmp_field->table, table_name)) && !strcasecmp(tmp_field->name, field_name)) {
-#endif
+                                               if ((!table_name ||
+                                                                       !strncasecmp(tmp_field->table, table_name, tmp_field->table_length)) &&
+                                                               !strncasecmp(tmp_field->name, field_name, tmp_field->name_length)) {
                                                        field_offset = i;
                                                        break;
                                                }
@@ -2424,14 +2422,12 @@ PHP_FUNCTION(mysql_fetch_field)
        object_init(return_value);
 
 #if MYSQL_USE_MYSQLND
-       add_property_str(return_value, "name", STR_COPY(mysql_field->name));
-       add_property_str(return_value, "table", STR_COPY(mysql_field->table));
-       add_property_str(return_value, "def", mysql_field->def? STR_COPY(mysql_field->def) : STR_EMPTY_ALLOC());
+       add_property_str(return_value, "name", STR_COPY(mysql_field->sname));
 #else
-       add_property_string(return_value, "name", (mysql_field->name?mysql_field->name:""));
-       add_property_string(return_value, "table", (mysql_field->table?mysql_field->table:""));
-       add_property_string(return_value, "def", (mysql_field->def?mysql_field->def:""));
+       add_property_stringl(return_value, "name", (mysql_field->name?mysql_field->name:""), mysql_field->name_length);
 #endif
+       add_property_stringl(return_value, "table", (mysql_field->table?mysql_field->table:""), mysql_field->table_length);
+       add_property_stringl(return_value, "def", (mysql_field->def?mysql_field->def:""), mysql_field->def_length);
        add_property_long(return_value, "max_length", mysql_field->max_length);
        add_property_long(return_value, "not_null", IS_NOT_NULL(mysql_field->flags)?1:0);
        add_property_long(return_value, "primary_key", IS_PRI_KEY(mysql_field->flags)?1:0);
@@ -2502,17 +2498,13 @@ static void php_mysql_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type)
        switch (entry_type) {
                case PHP_MYSQL_FIELD_NAME:
 #ifdef MYSQL_USE_MYSQLND
-                       RETVAL_STR(STR_COPY(mysql_field->name));
+                       RETVAL_STR(STR_COPY(mysql_field->sname));
 #else
                        RETVAL_STRING(mysql_field->name);
 #endif
                        break;
                case PHP_MYSQL_FIELD_TABLE:
-#ifdef MYSQL_USE_MYSQLND
-                       RETVAL_STR(STR_COPY(mysql_field->table));
-#else
                        RETVAL_STRING(mysql_field->table);
-#endif
                        break;
                case PHP_MYSQL_FIELD_LEN:
                        RETVAL_LONG(mysql_field->length);
index dab3cd73a2201611078ab3cba082e65d3a9d40a0..175b9b80768a85b0f8de37a0d3c295d007bdd220 100644 (file)
@@ -1149,21 +1149,17 @@ PHP_FUNCTION(mysqli_stmt_fetch)
 static void php_add_field_properties(zval *value, const MYSQL_FIELD *field TSRMLS_DC)
 {
 #ifdef MYSQLI_USE_MYSQLND
-       add_property_str(value, "name", STR_COPY(field->name));
-       add_property_str(value, "orgname", STR_COPY(field->org_name));
-       add_property_str(value, "table", STR_COPY(field->table));
-       add_property_str(value, "orgtable", STR_COPY(field->org_table));
-       add_property_str(value, "def", field->def? STR_COPY(field->def) : STR_EMPTY_ALLOC());
-       add_property_str(value, "db", STR_COPY(field->db));
+       add_property_str(value, "name", STR_COPY(field->sname));
 #else
-       add_property_string(value, "name",(field->name ? field->name : ""));
-       add_property_string(value, "orgname",(field->org_name ? field->org_name : ""));
-       add_property_string(value, "table",(field->table ? field->table : ""));
-       add_property_string(value, "orgtable",(field->org_table ? field->org_table : ""));
-       add_property_string(value, "def",(field->def ? field->def : ""));
-       add_property_string(value, "db",(field->db ? field->db : ""));
+       add_property_string(value, "name",(field->name ? field->name : ""), field->name_length);
 #endif
 
+       add_property_stringl(value, "orgname", (field->org_name ? field->org_name : ""), field->org_name_length);
+       add_property_stringl(value, "table", (field->table ? field->table : ""), field->table_length);
+       add_property_stringl(value, "orgtable", (field->org_table ? field->org_table : ""), field->org_table_length);
+       add_property_stringl(value, "def", (field->def ? field->def : ""), field->def_length);
+       add_property_stringl(value, "db", (field->db ? field->db : ""), field->db_length);
+
        /* FIXME: manually set the catalog to "def" due to bug in
         * libmysqlclient which does not initialize field->catalog
         * and in addition, the catalog is always be "def"
index bc2bbd5df9fb29c428ebc33e002ad3288a5f8e7c..a8d1a565303c2ff0d8e965d21ef7b69a920dd6d0 100644 (file)
@@ -869,7 +869,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void
                                                */
                                                Z_TRY_ADDREF_P(data);
                                                if (meta->zend_hash_keys[i].is_numeric == FALSE) {
-                                                       zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].name, data);
+                                                       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);
                                                }
@@ -1120,7 +1120,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo
                                */
                                Z_TRY_ADDREF_P(data);
                                if (meta->zend_hash_keys[i].is_numeric == FALSE) {
-                                       zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].name, data);
+                                       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);
                                }
@@ -1215,7 +1215,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void
                                */
                                Z_TRY_ADDREF_P(data);
                                if (meta->zend_hash_keys[i].is_numeric == FALSE) {
-                                       zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].name, data);
+                                       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);
                                }
index 5bd9f0f0b2fe0369ac110f011a1856838f21d301..d39300991db3e6b32550c3f15e83a2630f49f4a0 100644 (file)
@@ -33,26 +33,16 @@ static void
 php_mysqlnd_free_field_metadata(MYSQLND_FIELD *meta, zend_bool persistent TSRMLS_DC)
 {
        if (meta) {
-               if (meta->def) {
-                       STR_RELEASE(meta->def);
-               }
-               if (meta->name) {
-                       STR_RELEASE(meta->name);
-               }
-               if (meta->org_name) {
-                       STR_RELEASE(meta->org_name);
-               }
-               if (meta->table) {
-                       STR_RELEASE(meta->table);
-               }
-               if (meta->org_table) {
-                       STR_RELEASE(meta->org_table);
+               if (meta->root) {
+                       mnd_pefree(meta->root, persistent);
+                       meta->root = NULL;
                }
-               if (meta->db) {
-                       STR_RELEASE(meta->db);
+               if (meta->def) {
+                       mnd_pefree(meta->def, persistent);
+                       meta->def = NULL;
                }
-               if (meta->catalog) {
-                       STR_RELEASE(meta->catalog);
+               if (meta->sname) {
+                       STR_RELEASE(meta->sname);
                }
        }
 }
@@ -123,6 +113,12 @@ MYSQLND_METHOD(mysqlnd_res_meta, read_metadata)(MYSQLND_RES_METADATA * const met
        for (;i < meta->field_count; i++) {
                long idx;
 
+               if (meta->fields[i].root) {
+                       /* We re-read metadata for PS */
+                       mnd_pefree(meta->fields[i].root, meta->persistent);
+                       meta->fields[i].root = NULL;
+               }
+
                field_packet->metadata = &(meta->fields[i]);
                if (FAIL == PACKET_READ(field_packet, conn)) {
                        PACKET_FREE(field_packet);
@@ -187,8 +183,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 =
-                                       mysqlnd_is_key_numeric(field_packet->metadata->name->val,
-                                                                                  field_packet->metadata->name->len + 1,
+                                       mysqlnd_is_key_numeric(field_packet->metadata->name,
+                                                                                  field_packet->metadata->name_length + 1,
                                                                                   &idx))) {
                        meta->zend_hash_keys[i].key = idx;
                } 
@@ -270,14 +266,47 @@ MYSQLND_METHOD(mysqlnd_res_meta, clone_metadata)(const MYSQLND_RES_METADATA * co
        */
        memcpy(new_fields, orig_fields, (meta->field_count) * sizeof(MYSQLND_FIELD));
        for (i = 0; i < meta->field_count; i++) {
-               new_fields[i].name = STR_DUP(orig_fields[i].name, persistent);
-               new_fields[i].org_name = STR_DUP(orig_fields[i].org_name, persistent);
-               new_fields[i].table     = STR_DUP(orig_fields[i].table, persistent);
-               new_fields[i].org_table = STR_DUP(orig_fields[i].org_table, persistent);
-               new_fields[i].db = STR_DUP(orig_fields[i].db, persistent);
-               new_fields[i].catalog = STR_DUP(orig_fields[i].catalog, persistent);
+               /* First copy the root, then field by field adjust the pointers */
+               new_fields[i].root = mnd_pemalloc(orig_fields[i].root_len, persistent);
+
+               if (!new_fields[i].root) {
+                       goto oom;
+               }
+
+               memcpy(new_fields[i].root, orig_fields[i].root, new_fields[i].root_len);
+
+               if (orig_fields[i].sname) {
+                       new_fields[i].sname = STR_COPY(orig_fields[i].sname);
+                       new_fields[i].name = new_fields[i].sname->val;
+                       new_fields[i].name_length = new_fields[i].sname->len;
+               }
+
+               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);
+               }
+               if (orig_fields[i].table && orig_fields[i].table != mysqlnd_empty_string) {
+                       new_fields[i].table     = new_fields[i].root +
+                               (orig_fields[i].table - orig_fields[i].root);
+               }
+               if (orig_fields[i].org_table && orig_fields[i].org_table != mysqlnd_empty_string) {
+                       new_fields[i].org_table = new_fields[i].root +
+                               (orig_fields[i].org_table - orig_fields[i].root);
+               }
+               if (orig_fields[i].db && orig_fields[i].db != mysqlnd_empty_string) {
+                       new_fields[i].db = new_fields[i].root + (orig_fields[i].db - orig_fields[i].root);
+               }
+               if (orig_fields[i].catalog && orig_fields[i].catalog != mysqlnd_empty_string) {
+                       new_fields[i].catalog = new_fields[i].root + (orig_fields[i].catalog - orig_fields[i].root);
+               }
+               /* def is not on the root, if allocated at all */
                if (orig_fields[i].def) {
-                       new_fields[i].def = STR_DUP(orig_fields[i].def, persistent);
+                       new_fields[i].def = mnd_pemalloc(orig_fields[i].def_length + 1, persistent);
+                       if (!new_fields[i].def) {
+                               goto oom;
+                       }
+                       /* copy the trailing \0 too */
+                       memcpy(new_fields[i].def, orig_fields[i].def, orig_fields[i].def_length + 1);
                }
        }
        new_meta->current_field = 0;
@@ -306,7 +335,7 @@ MYSQLND_METHOD(mysqlnd_res_meta, fetch_field)(MYSQLND_RES_METADATA * const meta
                DBG_RETURN(NULL);
        }
        DBG_INF_FMT("name=%s max_length=%u",
-               meta->fields[meta->current_field].name? meta->fields[meta->current_field].name->val:"",
+               meta->fields[meta->current_field].name? meta->fields[meta->current_field].name:"",
                meta->fields[meta->current_field].max_length);
        DBG_RETURN(&meta->fields[meta->current_field++]);
 }
@@ -320,7 +349,7 @@ MYSQLND_METHOD(mysqlnd_res_meta, fetch_field_direct)(const MYSQLND_RES_METADATA
        DBG_ENTER("mysqlnd_res_meta::fetch_field_direct");
        DBG_INF_FMT("fieldnr=%u", fieldnr);
        DBG_INF_FMT("name=%s max_length=%u",
-               meta->fields[meta->current_field].name? meta->fields[meta->current_field].name->val:"",
+               meta->fields[meta->current_field].name? meta->fields[meta->current_field].name:"",
                meta->fields[meta->current_field].max_length);
        DBG_RETURN(&meta->fields[fieldnr]);
 }
index 5bb59cd6ca96edc51fccdef1d5691f0884517179..f8e69986fef4dd1e6dc57d4e295568d13ce2a2e2 100644 (file)
@@ -72,19 +72,29 @@ typedef struct st_mysqlnd_cmd_buffer
 
 typedef struct st_mysqlnd_field
 {
-       zend_string *name;                      /* Name of column */
-       zend_string *org_name;          /* Original column name, if an alias */
-       zend_string  *table;                    /* Table of column if column was a field */
-       zend_string  *org_table;                /* Org table name, if table was an alias */
-       zend_string  *db;                       /* Database for table */
-       zend_string  *catalog;          /* Catalog for table */
-       zend_string  *def;                                      /* Default value (set by mysql_list_fields) */
+       zend_string *sname;                     /* Name of column */
+       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 */
+       const char  *org_table;         /* Org table name, if table was an alias */
+       const char  *db;                        /* Database for table */
+       const char  *catalog;           /* Catalog for table */
+       char  *def;                 /* Default value (set by mysql_list_fields) */
        unsigned long length;           /* Width of column (create length) */
        unsigned long max_length;       /* Max width for selected set */
+       unsigned int name_length;
+       unsigned int org_name_length;
+       unsigned int table_length;
+       unsigned int org_table_length;
+       unsigned int db_length;
+       unsigned int catalog_length;
+       unsigned int def_length;
        unsigned int flags;                     /* Diverse flags */
        unsigned int decimals;          /* Number of decimals in field */
        unsigned int charsetnr;         /* Character set */
        enum mysqlnd_field_types type;  /* Type of field. See mysql_com.h for types */
+       char *root;
+       size_t root_len;
 } MYSQLND_FIELD;
 
 
index cf92fa448b5db9ad0663d569b301cbf898e0f2b2..8a5c453a77fb5e114fe09616a985e21331623691 100644 (file)
 
 
 static const char *unknown_sqlstate= "HY000";
+const char * const mysqlnd_empty_string = "";
 
 /* Used in mysqlnd_debug.c */
 const char mysqlnd_read_header_name[]  = "mysqlnd_read_header";
 const char mysqlnd_read_body_name[]            = "mysqlnd_read_body";
 
-
 #define ERROR_MARKER 0xFF
 #define EODATA_MARKER 0xFE
 
@@ -1205,11 +1205,17 @@ void php_mysqlnd_rset_header_free_mem(void * _packet, zend_bool stack_allocation
 static size_t rset_field_offsets[] =
 {
        STRUCT_OFFSET(MYSQLND_FIELD, catalog),
+       STRUCT_OFFSET(MYSQLND_FIELD, catalog_length),
        STRUCT_OFFSET(MYSQLND_FIELD, db),
+       STRUCT_OFFSET(MYSQLND_FIELD, db_length),
        STRUCT_OFFSET(MYSQLND_FIELD, table),
+       STRUCT_OFFSET(MYSQLND_FIELD, table_length),
        STRUCT_OFFSET(MYSQLND_FIELD, org_table),
+       STRUCT_OFFSET(MYSQLND_FIELD, org_table_length),
        STRUCT_OFFSET(MYSQLND_FIELD, name),
+       STRUCT_OFFSET(MYSQLND_FIELD, name_length),
        STRUCT_OFFSET(MYSQLND_FIELD, org_name),
+       STRUCT_OFFSET(MYSQLND_FIELD, org_name_length),
 };
 
 
@@ -1223,6 +1229,7 @@ php_mysqlnd_rset_field_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
        zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
        zend_uchar *p = buf;
        zend_uchar *begin = buf;
+       char *root_ptr;
        unsigned long len;
        MYSQLND_FIELD *meta;
        unsigned int i, field_count = sizeof(rset_field_offsets)/sizeof(size_t);
@@ -1255,17 +1262,19 @@ php_mysqlnd_rset_field_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
 
        meta = packet->metadata;
 
-       for (i = 0; i < field_count; i++) {
+       for (i = 0; i < field_count; i += 2) {
                len = php_mysqlnd_net_field_length(&p);
                BAIL_IF_NO_MORE_DATA;
                switch ((len)) {
                        case 0:
-                               *(zend_string **)(((char*)meta) + rset_field_offsets[i]) = STR_EMPTY_ALLOC();
+                               *(const char **)(((char*)meta) + rset_field_offsets[i]) = mysqlnd_empty_string;
+                               *(unsigned int *)(((char*)meta) + rset_field_offsets[i+1]) = 0;
                                break;
                        case MYSQLND_NULL_LENGTH:
                                goto faulty_or_fake;
                        default:
-                               *(zend_string **)(((char *)meta) + rset_field_offsets[i]) = STR_INIT((char *)p, len, packet->persistent_alloc);
+                               *(const char **)(((char *)meta) + rset_field_offsets[i]) = (const char *)p;
+                               *(unsigned int *)(((char*)meta) + rset_field_offsets[i+1]) = len;
                                p += len;
                                total_len += len + 1;
                                break;
@@ -1278,6 +1287,7 @@ php_mysqlnd_rset_field_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
                DBG_ERR_FMT("Protocol error. Server sent false length. Expected 12 got %d", (int) *p);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Protocol error. Server sent false length. Expected 12");
        }
+
        p++;
        BAIL_IF_NO_MORE_DATA;
 
@@ -1326,14 +1336,73 @@ php_mysqlnd_rset_field_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC)
        {
                BAIL_IF_NO_MORE_DATA;
                DBG_INF_FMT("Def found, length %lu, persistent=%u", len, packet->persistent_alloc);
-               meta->def = STR_INIT((char *)p, len, packet->persistent_alloc);
-               p += len;
+               meta->def = mnd_pemalloc(len + 1, packet->persistent_alloc);
+               if (!meta->def) {
+                       SET_OOM_ERROR(*conn->error_info);
+                       DBG_RETURN(FAIL);               
+               }
+               memcpy(meta->def, p, len);
+               meta->def[len] = '\0';
+               meta->def_length = len;
+               p += len;       
        } 
 
+       root_ptr = meta->root = mnd_pemalloc(total_len, packet->persistent_alloc);
+       if (!root_ptr) {
+               SET_OOM_ERROR(*conn->error_info);
+               DBG_RETURN(FAIL);       
+       }
+
+       meta->root_len = total_len;
+
+       if (meta->name != mysqlnd_empty_string) {
+               meta->sname = STR_INIT(meta->name, meta->name_length, packet->persistent_alloc);
+       } else {
+               meta->sname = STR_EMPTY_ALLOC();
+       }
+       meta->name = meta->sname->val;
+       meta->name_length = meta->sname->len;
+
+       /* Now do allocs */
+       if (meta->catalog && meta->catalog != mysqlnd_empty_string) {
+               len = meta->catalog_length;
+               meta->catalog = memcpy(root_ptr, meta->catalog, len);
+               *(root_ptr +=len) = '\0';
+               root_ptr++;
+       }
+
+       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++;
+       }
+
+       if (meta->table && meta->table != mysqlnd_empty_string) {
+               len = meta->table_length;
+               meta->table = memcpy(root_ptr, meta->table, len);
+               *(root_ptr +=len) = '\0';
+               root_ptr++;
+       }
+
+       if (meta->org_table && meta->org_table != mysqlnd_empty_string) {
+               len = meta->org_table_length;
+               meta->org_table = memcpy(root_ptr, meta->org_table, len);
+               *(root_ptr +=len) = '\0';
+               root_ptr++;
+       }
+
+       if (meta->org_name && meta->org_name != mysqlnd_empty_string) {
+               len = meta->org_name_length;
+               meta->org_name = memcpy(root_ptr, meta->org_name, len);
+               *(root_ptr +=len) = '\0';
+               root_ptr++;
+       }
+
        DBG_INF_FMT("allocing root. persistent=%u", packet->persistent_alloc);
 
-       DBG_INF_FMT("FIELD=[%s.%s.%s]", meta->db? meta->db->val:"*NA*", meta->table? meta->table->val:"*NA*",
-                               meta->name? meta->name->val:"*NA*");
+       DBG_INF_FMT("FIELD=[%s.%s.%s]", meta->db? meta->db:"*NA*", meta->table? meta->table:"*NA*",
+                               meta->name? meta->name:"*NA*");
 
        DBG_RETURN(PASS);
 
index 6360512f96b8f2665f8924d0b72476a143144cdc..bd87d9e75742be8de2bcb267199d97080ff52938 100644 (file)
@@ -304,6 +304,7 @@ unsigned long       php_mysqlnd_net_field_length(zend_uchar **packet);
 zend_uchar *   php_mysqlnd_net_store_length(zend_uchar *packet, uint64_t length);
 size_t                 php_mysqlnd_net_store_length_size(uint64_t length);
 
+PHPAPI const extern char * const mysqlnd_empty_string;
 
 enum_func_status php_mysqlnd_rowp_read_binary_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval * fields,
                                                                                 unsigned int field_count, const MYSQLND_FIELD * fields_metadata,
diff --git a/ext/mysqlnd/php_mysqlnd_config.h b/ext/mysqlnd/php_mysqlnd_config.h
new file mode 100644 (file)
index 0000000..8a501ae
--- /dev/null
@@ -0,0 +1,441 @@
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
+#define HAVE_ULONG 1
+#define HAVE_INT8_T 1
+#define HAVE_UINT8_T 1
+#define HAVE_INT16_T 1
+#define HAVE_UINT16_T 1
+#define HAVE_INT32_T 1
+#define HAVE_UINT32_T 1
+#define HAVE_INT64_T 1
+#define HAVE_UINT64_T 1
index b2d2b7a01f4809857031086c00ea06078f007836..30a2f04f983a462130d96e3f94543752fe7ee8f5 100644 (file)
@@ -699,21 +699,11 @@ static int pdo_mysql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) /* {{{
                int namelen;
 
                if (S->H->fetch_table_names) {
-#ifdef PDO_USE_MYSQLND
-                       namelen = spprintf(&cols[i].name, 0, "%s.%s", S->fields[i].table->val, S->fields[i].name->val);
-#else
                        namelen = spprintf(&cols[i].name, 0, "%s.%s", S->fields[i].table, S->fields[i].name);
-#endif
                        cols[i].namelen = namelen;
                } else {
-#ifdef PDO_USE_MYSQLND
-                       cols[i].namelen = S->fields[i].name->len;
-                       cols[i].name = estrndup(S->fields[i].name->val, S->fields[i].name->len);
-#else
-                       namelen = strlen(S->fields[i].name);
-                       cols[i].namelen = namelen;
-                       cols[i].name = estrndup(S->fields[i].name, namelen);
-#endif
+                       cols[i].namelen = S->fields[i].name_length;
+                       cols[i].name = estrndup(S->fields[i].name, S->fields[i].name_length);
                }
 
                cols[i].precision = S->fields[i].decimals;
@@ -856,11 +846,7 @@ static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_va
        F = S->fields + colno;
 
        if (F->def) {
-#ifdef PDO_USE_MYSQLND
-               add_assoc_str(return_value, "mysql:def", STR_COPY(F->def));
-#else
                add_assoc_string(return_value, "mysql:def", F->def);
-#endif
        }
        if (IS_NOT_NULL(F->flags)) {
                add_next_index_string(&flags, "not_null");
@@ -902,11 +888,7 @@ static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_va
 #endif
 
        add_assoc_zval(return_value, "flags", &flags);
-#ifdef PDO_USE_MYSQLND
-       add_assoc_str(return_value, "table", STR_COPY(F->table));
-#else
        add_assoc_string(return_value, "table", (char *) (F->table?F->table : ""));
-#endif
 
        PDO_DBG_RETURN(SUCCESS);
 } /* }}} */