Skip to content

Commit

Permalink
Use variadic signature for PDOStatement::fetchAll()
Browse files Browse the repository at this point in the history
The current signature is incorrect, because the $ctor_args parameter
is not required to be an array (it can at least also be null, and
isn't enforced by an exception anyway).

I'm going for the variadic signature here, because we already use
the same variadic signature in PDO::query() and
PDOStatement::setFetchMode(), all of them accepting essentially the
same arguments.
  • Loading branch information
nikic committed Aug 14, 2020
1 parent ca20f36 commit cfaa270
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 9 deletions.
7 changes: 2 additions & 5 deletions ext/pdo/pdo_stmt.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,8 @@ public function execute(?array $input_parameters = null) {}
/** @return mixed */
public function fetch(int $fetch_style = PDO::FETCH_BOTH, int $cursor_orientation = PDO::FETCH_ORI_NEXT, int $cursor_offset = 0) {}

/**
* @param mixed $fetch_argument
* @return array|false
*/
public function fetchAll(int $fetch_style = PDO::FETCH_BOTH, $fetch_argument = UNKNOWN, array $ctor_args = []) {}
/** @return array|false */
public function fetchAll(int $fetch_style = PDO::FETCH_BOTH, mixed ...$fetch_args) {}

/** @return mixed */
public function fetchColumn(int $column_number = 0) {}
Expand Down
5 changes: 2 additions & 3 deletions ext/pdo/pdo_stmt_arginfo.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: d64c75660cfc44b582e7dcc20c4ce22e8e0848e1 */
* Stub hash: 45c43e025d9194f2dd7b2ab13d86a4e5f316fa48 */

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindColumn, 0, 0, 2)
ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL)
Expand Down Expand Up @@ -46,8 +46,7 @@ ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchAll, 0, 0, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fetch_style, IS_LONG, 0, "PDO::FETCH_BOTH")
ZEND_ARG_INFO(0, fetch_argument)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ctor_args, IS_ARRAY, 0, "[]")
ZEND_ARG_VARIADIC_TYPE_INFO(0, fetch_args, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchColumn, 0, 0, 0)
Expand Down
2 changes: 1 addition & 1 deletion ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ $db = MySQLPDOTest::factory();
$stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2');

class mystatement5 extends mystatement4 {
public function fetchAll($fetch_style = 1, $column_index = 1, $ctor_args = array()) {
public function fetchAll($fetch_style = 1, ...$fetch_args) {
return "no data :)";
}
}
Expand Down

0 comments on commit cfaa270

Please sign in to comment.