Skip to content

Commit

Permalink
Merge pull request #2527 from phansys/ticket_2519
Browse files Browse the repository at this point in the history
Normalize method signatures for `fetch()` and `fetchAll()`
  • Loading branch information
Ocramius authored Jun 6, 2017
2 parents b331b1e + cd1450a commit 66fa7f8
Show file tree
Hide file tree
Showing 12 changed files with 98 additions and 57 deletions.
25 changes: 25 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Upgrade to 2.6

## MINOR BC BREAK: `fetch()` and `fetchAll()` method signatures in `Doctrine\DBAL\Driver\ResultStatement`

1. ``Doctrine\DBAL\Driver\ResultStatement::fetch()`` now has 3 arguments instead of 1, respecting
``PDO::fetch()`` signature.

Before:

Doctrine\DBAL\Driver\ResultStatement::fetch($fetchMode);

After:

Doctrine\DBAL\Driver\ResultStatement::fetch($fetchMode, $cursorOrientation, $cursorOffset);

2. ``Doctrine\DBAL\Driver\ResultStatement::fetchAll()`` now has 3 arguments instead of 1, respecting
``PDO::fetchAll()`` signature.

Before:

Doctrine\DBAL\Driver\ResultStatement::fetchAll($fetchMode);

After:

Doctrine\DBAL\Driver\ResultStatement::fetch($fetchMode, $fetchArgument, $ctorArgs);


## MINOR BC BREAK: URL-style DSN with percentage sign in password

URL-style DSNs (e.g. ``mysql://foo@bar:localhost/db``) are now assumed to be percent-encoded
Expand Down
4 changes: 2 additions & 2 deletions lib/Doctrine/DBAL/Cache/ArrayStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public function getIterator()
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
if (isset($this->data[$this->num])) {
$row = $this->data[$this->num++];
Expand All @@ -122,7 +122,7 @@ public function fetch($fetchMode = null)
/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$rows = array();
while ($row = $this->fetch($fetchMode)) {
Expand Down
4 changes: 2 additions & 2 deletions lib/Doctrine/DBAL/Cache/ResultCacheStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public function getIterator()
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
if ($this->data === null) {
$this->data = array();
Expand Down Expand Up @@ -179,7 +179,7 @@ public function fetch($fetchMode = null)
/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$rows = array();
while ($row = $this->fetch($fetchMode)) {
Expand Down
12 changes: 6 additions & 6 deletions lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class DB2Statement implements \IteratorAggregate, Statement
/**
* @var resource
*/
private $_stmt = null;
private $_stmt;

/**
* @var array
Expand Down Expand Up @@ -147,8 +147,8 @@ public function errorCode()
public function errorInfo()
{
return array(
0 => db2_stmt_errormsg(),
1 => db2_stmt_error(),
db2_stmt_errormsg(),
db2_stmt_error(),
);
}

Expand Down Expand Up @@ -207,7 +207,7 @@ public function getIterator()
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
// do not try fetching from the statement if it's not expected to contain result
// in order to prevent exceptional situation
Expand Down Expand Up @@ -243,14 +243,14 @@ public function fetch($fetchMode = null)
case \PDO::FETCH_OBJ:
return db2_fetch_object($this->_stmt);
default:
throw new DB2Exception("Given Fetch-Style " . $fetchMode . " is not supported.");
throw new DB2Exception('Given Fetch-Style ' . $fetchMode . ' is not supported.');
}
}

/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$rows = array();

Expand Down
4 changes: 2 additions & 2 deletions lib/Doctrine/DBAL/Driver/Mysqli/MysqliStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ private function _fetch()
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
// do not try fetching from the statement if it's not expected to contain result
// in order to prevent exceptional situation
Expand Down Expand Up @@ -313,7 +313,7 @@ public function fetch($fetchMode = null)
/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$fetchMode = $fetchMode ?: $this->_defaultFetchMode;

Expand Down
4 changes: 2 additions & 2 deletions lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ public function getIterator()
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
// do not try fetching from the statement if it's not expected to contain result
// in order to prevent exceptional situation
Expand All @@ -405,7 +405,7 @@ public function fetch($fetchMode = null)
/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$fetchMode = $fetchMode ?: $this->_defaultFetchMode;

Expand Down
14 changes: 7 additions & 7 deletions lib/Doctrine/DBAL/Driver/PDOStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,18 +111,18 @@ public function execute($params = null)
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null, $cursorOrientation = null, $cursorOffset = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
try {
if ($fetchMode === null && $cursorOrientation === null && $cursorOffset === null) {
if ($fetchMode === null && \PDO::FETCH_ORI_NEXT === $cursorOrientation && 0 === $cursorOffset) {
return parent::fetch();
}

if ($cursorOrientation === null && $cursorOffset === null) {
if (\PDO::FETCH_ORI_NEXT === $cursorOrientation && 0 === $cursorOffset) {
return parent::fetch($fetchMode);
}

if ($cursorOffset === null) {
if (0 === $cursorOffset) {
return parent::fetch($fetchMode, $cursorOrientation);
}

Expand All @@ -138,15 +138,15 @@ public function fetch($fetchMode = null, $cursorOrientation = null, $cursorOffse
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
try {
if ($fetchMode === null && $fetchArgument === null && $ctorArgs === null) {
if ($fetchMode === null && null === $fetchArgument && null === $ctorArgs) {
return parent::fetchAll();
}

if ($fetchArgument === null && $ctorArgs === null) {
if (null === $fetchArgument && null === $ctorArgs) {
return parent::fetchAll($fetchMode);
}

if ($ctorArgs === null) {
if (null === $ctorArgs) {
return parent::fetchAll($fetchMode, $fetchArgument);
}

Expand Down
42 changes: 33 additions & 9 deletions lib/Doctrine/DBAL/Driver/ResultStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,29 +58,53 @@ public function setFetchMode($fetchMode, $arg2 = null, $arg3 = null);
/**
* Returns the next row of a result set.
*
* @param integer|null $fetchMode Controls how the next row will be returned to the caller.
* The value must be one of the PDO::FETCH_* constants,
* defaulting to PDO::FETCH_BOTH.
* @param int|null $fetchMode Controls how the next row will be returned to the caller.
* The value must be one of the \PDO::FETCH_* constants,
* defaulting to \PDO::FETCH_BOTH.
* @param int $cursorOrientation For a ResultStatement object representing a scrollable cursor,
* this value determines which row will be returned to the caller.
* This value must be one of the \PDO::FETCH_ORI_* constants,
* defaulting to \PDO::FETCH_ORI_NEXT. To request a scrollable
* cursor for your ResultStatement object, you must set the \PDO::ATTR_CURSOR
* attribute to \PDO::CURSOR_SCROLL when you prepare the SQL statement with
* \PDO::prepare().
* @param int $cursorOffset For a ResultStatement object representing a scrollable cursor for which the
* cursorOrientation parameter is set to \PDO::FETCH_ORI_ABS, this value
* specifies the absolute number of the row in the result set that shall be
* fetched.
* For a ResultStatement object representing a scrollable cursor for which the
* cursorOrientation parameter is set to \PDO::FETCH_ORI_REL, this value
* specifies the row to fetch relative to the cursor position before
* ResultStatement::fetch() was called.
*
* @return mixed The return value of this method on success depends on the fetch mode. In all cases, FALSE is
* returned on failure.
*
* @see PDO::FETCH_* constants.
*/
public function fetch($fetchMode = null);
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0);

/**
* Returns an array containing all of the result set rows.
*
* @param integer|null $fetchMode Controls how the next row will be returned to the caller.
* The value must be one of the PDO::FETCH_* constants,
* defaulting to PDO::FETCH_BOTH.
* @param int|null $fetchMode Controls how the next row will be returned to the caller.
* The value must be one of the \PDO::FETCH_* constants,
* defaulting to \PDO::FETCH_BOTH.
* @param int|null $fetchArgument This argument has a different meaning depending on the value of the $fetchMode parameter:
* * \PDO::FETCH_COLUMN: Returns the indicated 0-indexed column.
* * \PDO::FETCH_CLASS: Returns instances of the specified class, mapping the columns of each
* row to named properties in the class.
* * \PDO::FETCH_FUNC: Returns the results of calling the specified function, using each row's
* columns as parameters in the call.
* @param array|null $ctorArgs Controls how the next row will be returned to the caller.
* The value must be one of the \PDO::FETCH_* constants,
* defaulting to \PDO::FETCH_BOTH.
*
* @return array
*
* @see PDO::FETCH_* constants.
* @see \PDO::FETCH_* constants.
*/
public function fetchAll($fetchMode = null);
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null);

/**
* Returns a single column from the next row of a result set or FALSE if there are no more rows.
Expand Down
4 changes: 2 additions & 2 deletions lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ public function execute($params = null)
*
* @throws SQLAnywhereException
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
if ( ! is_resource($this->result)) {
return false;
Expand Down Expand Up @@ -235,7 +235,7 @@ public function fetch($fetchMode = null)
/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$rows = array();

Expand Down
14 changes: 8 additions & 6 deletions lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ private function prepare()
$params = array();

foreach ($this->variables as $column => &$variable) {
if ($this->types[$column] === \PDO::PARAM_LOB) {
if (PDO::PARAM_LOB === $this->types[$column]) {
$params[$column - 1] = array(
&$variable,
SQLSRV_PARAM_IN,
Expand Down Expand Up @@ -302,8 +302,10 @@ public function getIterator()

/**
* {@inheritdoc}
*
* @throws SQLSrvException
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
// do not try fetching from the statement if it's not expected to contain result
// in order to prevent exceptional situation
Expand All @@ -318,25 +320,25 @@ public function fetch($fetchMode = null)
return sqlsrv_fetch_array($this->stmt, self::$fetchMap[$fetchMode]) ?: false;
}

if ($fetchMode == PDO::FETCH_OBJ || $fetchMode == PDO::FETCH_CLASS) {
if (in_array($fetchMode, array(PDO::FETCH_OBJ, PDO::FETCH_CLASS), true)) {
$className = $this->defaultFetchClass;
$ctorArgs = $this->defaultFetchClassCtorArgs;

if (count($args) >= 2) {
$className = $args[1];
$ctorArgs = (isset($args[2])) ? $args[2] : array();
$ctorArgs = isset($args[2]) ? $args[2] : array();
}

return sqlsrv_fetch_object($this->stmt, $className, $ctorArgs) ?: false;
}

throw new SQLSrvException("Fetch mode is not supported!");
throw new SQLSrvException('Fetch mode is not supported!');
}

/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$rows = array();

Expand Down
8 changes: 4 additions & 4 deletions lib/Doctrine/DBAL/Portability/Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public function getIterator()
/**
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
$fetchMode = $fetchMode ?: $this->defaultFetchMode;

Expand All @@ -159,12 +159,12 @@ public function fetch($fetchMode = null)
/**
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null, $columnIndex = 0)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
$fetchMode = $fetchMode ?: $this->defaultFetchMode;

if ($columnIndex != 0) {
$rows = $this->stmt->fetchAll($fetchMode, $columnIndex);
if ($fetchArgument) {
$rows = $this->stmt->fetchAll($fetchMode, $fetchArgument);
} else {
$rows = $this->stmt->fetchAll($fetchMode);
}
Expand Down
20 changes: 5 additions & 15 deletions lib/Doctrine/DBAL/Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -252,29 +252,19 @@ public function getIterator()
}

/**
* Fetches the next row from a result set.
*
* @param integer|null $fetchMode
*
* @return mixed The return value of this function on success depends on the fetch type.
* In all cases, FALSE is returned on failure.
* {@inheritdoc}
*/
public function fetch($fetchMode = null)
public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0)
{
return $this->stmt->fetch($fetchMode);
}

/**
* Returns an array containing all of the result set rows.
*
* @param integer|null $fetchMode
* @param mixed $fetchArgument
*
* @return array An array containing all of the remaining rows in the result set.
* {@inheritdoc}
*/
public function fetchAll($fetchMode = null, $fetchArgument = 0)
public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null)
{
if ($fetchArgument !== 0) {
if ($fetchArgument) {
return $this->stmt->fetchAll($fetchMode, $fetchArgument);
}

Expand Down

0 comments on commit 66fa7f8

Please sign in to comment.