abies Fri May 21 09:46:04 2004 EDT Modified files: /php-src/ext/interbase ibase_query.c Log: Added test for duplicate field names when returning rows as hashes or objects # This change should be in 5.0.0, as it might break BC http://cvs.php.net/diff.php/php-src/ext/interbase/ibase_query.c?r1=1.6&r2=1.7&ty=u Index: php-src/ext/interbase/ibase_query.c diff -u php-src/ext/interbase/ibase_query.c:1.6 php-src/ext/interbase/ibase_query.c:1.7 --- php-src/ext/interbase/ibase_query.c:1.6 Wed May 12 11:16:51 2004 +++ php-src/ext/interbase/ibase_query.c Fri May 21 09:46:04 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ibase_query.c,v 1.6 2004/05/12 15:16:51 abies Exp $ */ +/* $Id: ibase_query.c,v 1.7 2004/05/21 13:46:04 abies Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1504,7 +1504,31 @@ 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]; + + if (! (fetch_type & FETCH_ROW)) { + int i = 0; + char const *base = "FIELD"; /* use 'FIELD' if name is empty */ + + /** + * Ensure no two columns have identical names: + * keep generating new names until we find one that is unique. + */ + switch (*var->aliasname) { + void *p; + + default: + i = 1; + strcpy(alias, base = var->aliasname); + + while (SUCCESS == zend_symtable_find(Z_ARRVAL_P(return_value),alias,strlen(alias)+1,&p)) { + + case '\0': + sprintf(alias, "%s_%02d", base, i++); + } + } + } if (((var->sqltype & 1) == 0) || *var->sqlind != -1) { zval *result; @@ -1614,13 +1638,13 @@ if (fetch_type & FETCH_ROW) { add_index_zval(return_value, i, result); } else { - add_assoc_zval(return_value, var->aliasname, result); + add_assoc_zval(return_value, alias, result); } } else { if (fetch_type & FETCH_ROW) { add_index_null(return_value, i); } else { - add_assoc_null(return_value, var->aliasname); + add_assoc_null(return_value, alias); } } } /* for field */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php