davidc Mon Nov 10 18:47:28 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/pdopdo_dbh.c pdo_stmt.c
Log:
- After readying Johannes's mail, the conclusion that a "smarter" system
to find out if the return_value had the correct number of elements was
definitely needed. Simply added a difference to both dbh and stmt to
make sure that the error info always has 3 elements.
- Bug #44154 (pdo->errorInfo doesn't always return three elements)
- Now pdo->errorInfo() AND stmt->errorInfo() return three elements.
- [DOC] Make sure that not only the pdo->errorInfo() is returning 3 elms, but
also the PDOStatement object
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_dbh.c?r1=1.82.2.31.2.17.2.14&r2=1.82.2.31.2.17.2.15&diff_format=u
Index: php-src/ext/pdo/pdo_dbh.c
diff -u php-src/ext/pdo/pdo_dbh.c:1.82.2.31.2.17.2.14
php-src/ext/pdo/pdo_dbh.c:1.82.2.31.2.17.2.15
--- php-src/ext/pdo/pdo_dbh.c:1.82.2.31.2.17.2.14 Tue Nov 4 18:28:41 2008
+++ php-src/ext/pdo/pdo_dbh.c Mon Nov 10 18:47:28 2008
@@ -18,7 +18,7 @@
+--+
*/
-/* $Id: pdo_dbh.c,v 1.82.2.31.2.17.2.14 2008/11/04 18:28:41 davidc Exp $ */
+/* $Id: pdo_dbh.c,v 1.82.2.31.2.17.2.15 2008/11/10 18:47:28 davidc Exp $ */
/* The PDO Database Handle Class */
@@ -987,7 +987,10 @@
RETURN_NULL();
}
- // Then we get back to the default fallback
+ /**
+* Making sure that we fallback to the default implementation
+* if the dbh->error_code is not null.
+*/
RETURN_STRING(dbh->error_code, 1);
}
/* }}} */
@@ -996,11 +999,16 @@
Fetch extended error information associated with the last operation on the
database handle */
static PHP_METHOD(PDO, errorInfo)
{
+ int error_count;
+ int error_count_diff = 0;
+ int error_expected_count = 3;
+
pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC);
if (zend_parse_parameters_none() == FAILURE) {
return;
}
+
PDO_CONSTRUCT_CHECK;
array_init(return_value);
@@ -1009,12 +1017,27 @@
add_next_index_string(return_value,
dbh->query_stmt->error_code, 1);
} else {
add_next_index_string(return_value, dbh->error_code, 1);
- add_next_index_null(return_value);
- add_next_index_null(return_value);
}
+
if (dbh->methods->fetch_err) {
dbh->methods->fetch_err(dbh, dbh->query_stmt, return_value
TSRMLS_CC);
}
+
+ /**
+* In order to be consistent, we have to make sure we add the good
amount
+* of nulls depending on the current number of elements. We make a
simple
+* difference and add the needed elements
+*/
+ error_count = zend_hash_num_elements(Z_ARRVAL_P(return_value));
+
+ if (error_expected_count > error_count) {
+ error_count_diff = error_expected_count - error_count;
+
+ int current_index;
+ for (current_index = 0; current_index < error_count_diff;
current_index++) {
+ add_next_index_null(return_value);
+ }
+ }
}
/* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.118.2.38.2.24.2.34&r2=1.118.2.38.2.24.2.35&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.24.2.34
php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.35
--- php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.34 Wed Nov 5 23:40:37 2008
+++ php-src/ext/pdo/pdo_stmt.c Mon Nov 10 18:47:28 2008
@@ -18,7 +18,7 @@
+--+
*/
-/* $Id: pdo_stmt.c,v 1.118.2.38.2.24.2.34 2008/11/05 23:40:37 felipe Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.38.2.24.2.35 2008/11/10 18:47:28 davidc Exp $ */
/* The PDO Statement Handle Class */
@@ -1778,6 +1778,10 @@
return;
}
+ if (stmt->error_code[0] == '\0') {
+ RETURN_NULL();
+ }
+
RETURN_STRING(stmt->error_code, 1);
}
/* }}} */
@@ -1786,6 +1790,10 @@
Fetch extended error information associated with the last operation on the
statement handle */
static PHP_METHOD(PDOStatement, errorInfo)
{
+ int error_count;
+ int error_count_diff = 0;
+ int error_expected_count = 3;
+
PHP_STMT_GET_OBJ;
if (zend_parse_parameters_none() == FAILURE) {
@@ -1798,6 +1806,17 @@
if (stmt->dbh->methods->fetch_err) {
stmt->dbh->methods->fetch_err(stmt->dbh, stmt, return_value
TSRMLS_CC);
}
+
+ error_count = zend_hash_num_elements(Z_ARRVAL_P(return_value));
+
+ if (error_expected_count > error_count) {
+ error_count_diff = error_expected_count - error_count;
+
+ int current_index;
+