]> granicus.if.org Git - php/commitdiff
Removed strcpy() call from most common case
authorArd Biesheuvel <abies@php.net>
Fri, 21 May 2004 14:24:34 +0000 (14:24 +0000)
committerArd Biesheuvel <abies@php.net>
Fri, 21 May 2004 14:24:34 +0000 (14:24 +0000)
Added test for hash index generation

ext/interbase/ibase_query.c
ext/interbase/tests/003.phpt

index 2e370601ff3c6266d1d6f0ff65a40102e5e6368d..0caf2b43a648285e8a4208100f15bd6516b786e7 100644 (file)
@@ -1504,8 +1504,8 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type)
        array_init(return_value);
 
        for (i = 0; i < ib_result->out_sqlda->sqld; ++i) {
-               char alias[METADATALENGTH+4];
                XSQLVAR *var = &ib_result->out_sqlda->sqlvar[i];
+               char buf[METADATALENGTH+4], *alias = var->aliasname;
                
                if (! (fetch_type & FETCH_ROW)) {
                        int i = 0;
@@ -1515,17 +1515,18 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type)
                        * Ensure no two columns have identical names: 
                        * keep generating new names until we find one that is unique.
                        */
-                       switch (*var->aliasname) {
+                       switch (*alias) {
                                void *p;
                                
                                default:
                                        i = 1;
-                                       strcpy(alias, base = var->aliasname);
+                                       base = alias;
                                        
-                                       while (SUCCESS == zend_symtable_find(Z_ARRVAL_P(return_value),alias,strlen(alias)+1,&p)) {
+                                       while (SUCCESS == zend_symtable_find(
+                                                       Z_ARRVAL_P(return_value),alias,strlen(alias)+1,&p)) {
                                
                                case '\0':
-                                               sprintf(alias, "%s_%02d", base, i++);
+                                               sprintf(alias = buf, "%s_%02d", base, i++);
                                        }
                        }
                }
index a700c3cc46e95c5d7ca554af8119d45b2ee290d0..fe0074e518396fe84ee2e5f8153466530b9980ef 100644 (file)
@@ -125,8 +125,59 @@ InterBase: misc sql types (may take a while)
         ibase_free_result($sel);
     } /* for($iter) */
 
+       /* check for correct handling of duplicate field names */
+       $q = ibase_query('SELECT 1 AS id, 2 AS id, 3 AS id, 4 AS id, 5 AS id, 6 AS id, 7 AS id, 8 AS id, 9 AS id,
+               10 AS id, 11 AS id, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 FROM rdb$database');
+       var_dump(ibase_fetch_assoc($q));
+       
     ibase_close();
     echo "end of test\n";
 ?>
 --EXPECT--
+array(22) {
+  ["ID"]=>
+  int(1)
+  ["ID_01"]=>
+  int(2)
+  ["ID_02"]=>
+  int(3)
+  ["ID_03"]=>
+  int(4)
+  ["ID_04"]=>
+  int(5)
+  ["ID_05"]=>
+  int(6)
+  ["ID_06"]=>
+  int(7)
+  ["ID_07"]=>
+  int(8)
+  ["ID_08"]=>
+  int(9)
+  ["ID_09"]=>
+  int(10)
+  ["ID_10"]=>
+  int(11)
+  ["FIELD_00"]=>
+  int(12)
+  ["FIELD_01"]=>
+  int(13)
+  ["FIELD_02"]=>
+  int(14)
+  ["FIELD_03"]=>
+  int(15)
+  ["FIELD_04"]=>
+  int(16)
+  ["FIELD_05"]=>
+  int(17)
+  ["FIELD_06"]=>
+  int(18)
+  ["FIELD_07"]=>
+  int(19)
+  ["FIELD_08"]=>
+  int(20)
+  ["FIELD_09"]=>
+  int(21)
+  ["FIELD_10"]=>
+  int(22)
+}
 end of test