cvs: php-src(PHP_5_2) /ext/pdo pdo_stmt.c
| From: | Ilia Alshanetsky | Date: | Sun, 22 Jul 2007 15:14:21 +0000 |
| Subject: | cvs: php-src(PHP_5_2) /ext/pdo pdo_stmt.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-45505@lists.php.net to get a copy of this message | ||
iliaa Sun Jul 22 15:14:21 2007 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/pdo pdo_stmt.c
Log:
Fixed PDO_FETCH_KEY_PAIR implementation for fetchAll()
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.118.2.38.2.19&r2=1.118.2.38.2.20&diff_format=u
Index: php-src/ext/pdo/pdo_stmt.c
diff -u php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.19 php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.20
--- php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.19 Tue Jun 26 01:24:10 2007
+++ php-src/ext/pdo/pdo_stmt.c Sun Jul 22 15:14:21 2007
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_stmt.c,v 1.118.2.38.2.19 2007/06/26 01:24:10 iliaa Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.38.2.20 2007/07/22 15:14:21 iliaa Exp $ */
/* The PDO Statement Handle Class */
@@ -911,8 +911,9 @@
pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "PDO::FETCH_KEY_PAIR fetch
mode requires the result set to contain extactly 2 columns." TSRMLS_CC);
return 0;
}
-
- array_init(return_value);
+ if (!return_all) {
+ array_init(return_value);
+ }
break;
case PDO_FETCH_COLUMN:
@@ -1018,7 +1019,7 @@
return 0;
}
- if (return_all) {
+ if (return_all && how != PDO_FETCH_KEY_PAIR) {
INIT_PZVAL(&grp_val);
fetch_value(stmt, &grp_val, i, NULL TSRMLS_CC);
convert_to_string(&grp_val);
@@ -1044,17 +1045,15 @@
zval *tmp;
MAKE_STD_ZVAL(tmp);
fetch_value(stmt, tmp, ++i, NULL TSRMLS_CC);
-
- if (Z_TYPE_P(val) == IS_STRING) {
- zend_symtable_update(Z_ARRVAL_P(return_value), Z_STRVAL_P(val), Z_STRLEN_P(val) + 1,
&tmp, sizeof(zval *), NULL);
- } else if (Z_TYPE_P(val) == IS_LONG) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(val), tmp, sizeof(tmp), NULL);
+
+ if (Z_TYPE_P(val) == IS_LONG) {
+ zend_hash_index_update((return_all ? Z_ARRVAL_P(return_all) : Z_ARRVAL_P(return_value)),
Z_LVAL_P(val), &tmp, sizeof(zval *), NULL);
} else {
convert_to_string(val);
- zend_symtable_update(Z_ARRVAL_P(return_value), Z_STRVAL_P(val), Z_STRLEN_P(val) + 1,
&tmp, sizeof(zval *), NULL);
+ zend_symtable_update((return_all ? Z_ARRVAL_P(return_all) : Z_ARRVAL_P(return_value)),
Z_STRVAL_P(val), Z_STRLEN_P(val) + 1, &tmp, sizeof(zval *), NULL);
}
- zval_dtor(val);
- FREE_ZVAL(val);
+ zval_ptr_dtor(&val);
+ return 1;
}
break;
@@ -1522,7 +1521,7 @@
if (!error) {
PDO_STMT_CLEAR_ERR();
MAKE_STD_ZVAL(data);
- if (how & PDO_FETCH_GROUP) {
+ if (how & (PDO_FETCH_GROUP|PDO_FETCH_KEY_PAIR)) {
array_init(return_value);
return_all = return_value;
} else {
@@ -1534,10 +1533,12 @@
}
}
if (!error) {
- if ((how & PDO_FETCH_GROUP)) {
+ if (how & PDO_FETCH_GROUP) {
do {
MAKE_STD_ZVAL(data);
} while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
+ } else if (how & PDO_FETCH_KEY_PAIR) {
+ while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
} else {
array_init(return_value);
do {