Skip to content

Commit

Permalink
Merge branch '2.10.x' into 2.11.x
Browse files Browse the repository at this point in the history
  • Loading branch information
morozov committed Jun 20, 2020
2 parents 932df08 + 3caae11 commit f7e8b5f
Show file tree
Hide file tree
Showing 26 changed files with 138 additions and 49 deletions.
5 changes: 3 additions & 2 deletions lib/Doctrine/DBAL/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
use Doctrine\DBAL\Driver\PingableConnection;
use Doctrine\DBAL\Driver\ResultStatement;
use Doctrine\DBAL\Driver\ServerInfoAwareConnection;
use Doctrine\DBAL\Driver\Statement as DriverStatement;
use Doctrine\DBAL\Exception\InvalidArgumentException;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Query\Expression\ExpressionBuilder;
Expand Down Expand Up @@ -1098,7 +1097,7 @@ public function iterateColumn(string $query, array $params = [], array $types =
*
* @param string $statement The SQL statement to prepare.
*
* @return DriverStatement The prepared statement.
* @return Statement The prepared statement.
*
* @throws DBALException
*/
Expand Down Expand Up @@ -1709,6 +1708,8 @@ public function getWrappedConnection()
{
$this->connect();

assert($this->_conn !== null);

return $this->_conn;
}

Expand Down
11 changes: 10 additions & 1 deletion lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Doctrine\DBAL\Schema\MySqlSchemaManager;
use Doctrine\DBAL\VersionAwarePlatformDriver;

use function assert;
use function preg_match;
use function stripos;
use function version_compare;
Expand Down Expand Up @@ -204,7 +205,15 @@ public function getDatabase(Connection $conn)
{
$params = $conn->getParams();

return $params['dbname'] ?? $conn->query('SELECT DATABASE()')->fetchColumn();
if (isset($params['dbname'])) {
return $params['dbname'];
}

$database = $conn->query('SELECT DATABASE()')->fetchColumn();

assert($database !== false);

return $database;
}

/**
Expand Down
11 changes: 10 additions & 1 deletion lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Doctrine\DBAL\Schema\PostgreSqlSchemaManager;
use Doctrine\DBAL\VersionAwarePlatformDriver;

use function assert;
use function preg_match;
use function strpos;
use function version_compare;
Expand Down Expand Up @@ -122,7 +123,15 @@ public function getDatabase(Connection $conn)
{
$params = $conn->getParams();

return $params['dbname'] ?? $conn->query('SELECT CURRENT_DATABASE()')->fetchColumn();
if (isset($params['dbname'])) {
return $params['dbname'];
}

$database = $conn->query('SELECT CURRENT_DATABASE()')->fetchColumn();

assert($database !== false);

return $database;
}

/**
Expand Down
11 changes: 10 additions & 1 deletion lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Doctrine\DBAL\Schema\SQLAnywhereSchemaManager;
use Doctrine\DBAL\VersionAwarePlatformDriver;

use function assert;
use function preg_match;
use function version_compare;

Expand Down Expand Up @@ -124,7 +125,15 @@ public function getDatabase(Connection $conn)
{
$params = $conn->getParams();

return $params['dbname'] ?? $conn->query('SELECT DB_NAME()')->fetchColumn();
if (isset($params['dbname'])) {
return $params['dbname'];
}

$database = $conn->query('SELECT DB_NAME()')->fetchColumn();

assert($database !== false);

return $database;
}

/**
Expand Down
11 changes: 10 additions & 1 deletion lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use Doctrine\DBAL\Schema\SQLServerSchemaManager;
use Doctrine\DBAL\VersionAwarePlatformDriver;

use function assert;
use function preg_match;
use function version_compare;

Expand Down Expand Up @@ -65,7 +66,15 @@ public function getDatabase(Connection $conn)
{
$params = $conn->getParams();

return $params['dbname'] ?? $conn->query('SELECT DB_NAME()')->fetchColumn();
if (isset($params['dbname'])) {
return $params['dbname'];
}

$database = $conn->query('SELECT DB_NAME()')->fetchColumn();

assert($database !== false);

return $database;
}

/**
Expand Down
6 changes: 6 additions & 0 deletions lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use stdClass;

use function array_change_key_case;
use function assert;
use function db2_bind_param;
use function db2_execute;
use function db2_fetch_array;
Expand All @@ -34,6 +35,7 @@
use function func_num_args;
use function fwrite;
use function gettype;
use function is_int;
use function is_object;
use function is_resource;
use function is_string;
Expand Down Expand Up @@ -96,6 +98,8 @@ public function __construct($stmt)
*/
public function bindValue($param, $value, $type = ParameterType::STRING)
{
assert(is_int($param));

return $this->bindParam($param, $value, $type);
}

Expand All @@ -104,6 +108,8 @@ public function bindValue($param, $value, $type = ParameterType::STRING)
*/
public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null)
{
assert(is_int($column));

switch ($type) {
case ParameterType::INTEGER:
$this->bind($column, $variable, DB2_PARAM_IN, DB2_LONG);
Expand Down
5 changes: 3 additions & 2 deletions lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -226,11 +226,12 @@ public function rollBack()
public function errorCode()
{
$error = oci_error($this->dbh);

if ($error !== false) {
$error = $error['code'];
return $error['code'];
}

return $error;
return null;
}

/**
Expand Down
5 changes: 4 additions & 1 deletion lib/Doctrine/DBAL/Driver/PDOConnection.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,10 @@ public function __construct($dsn, $user = null, $password = null, ?array $option
public function exec($statement)
{
try {
return parent::exec($statement);
$result = parent::exec($statement);
assert($result !== false);

return $result;
} catch (\PDOException $exception) {
throw new PDOException($exception);
}
Expand Down
5 changes: 5 additions & 0 deletions lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use stdClass;

use function array_key_exists;
use function assert;
use function func_get_args;
use function func_num_args;
use function gettype;
Expand Down Expand Up @@ -96,6 +97,8 @@ public function __construct($conn, $sql)
*/
public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null)
{
assert(is_int($column));

switch ($type) {
case ParameterType::INTEGER:
case ParameterType::BOOLEAN:
Expand Down Expand Up @@ -130,6 +133,8 @@ public function bindParam($column, &$variable, $type = ParameterType::STRING, $l
*/
public function bindValue($param, $value, $type = ParameterType::STRING)
{
assert(is_int($param));

return $this->bindParam($param, $value, $type);
}

Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ public function errorCode()
return $errors[0]['code'];
}

return false;
return null;
}

/**
Expand Down
30 changes: 15 additions & 15 deletions lib/Doctrine/DBAL/Driver/Statement.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ interface Statement extends ResultStatement
* As mentioned above, the named parameters are not natively supported by the mysqli driver, use executeQuery(),
* fetchAll(), fetchArray(), fetchColumn(), fetchAssoc() methods to have the named parameter emulated by doctrine.
*
* @param mixed $param Parameter identifier. For a prepared statement using named placeholders,
* this will be a parameter name of the form :name. For a prepared statement
* using question mark placeholders, this will be the 1-indexed position of the parameter.
* @param mixed $value The value to bind to the parameter.
* @param int $type Explicit data type for the parameter using the {@link \Doctrine\DBAL\ParameterType}
* constants.
* @param int|string $param Parameter identifier. For a prepared statement using named placeholders,
* this will be a parameter name of the form :name. For a prepared statement
* using question mark placeholders, this will be the 1-indexed position of the parameter.
* @param mixed $value The value to bind to the parameter.
* @param int $type Explicit data type for the parameter using the {@link \Doctrine\DBAL\ParameterType}
* constants.
*
* @return bool TRUE on success or FALSE on failure.
*/
Expand All @@ -44,15 +44,15 @@ public function bindValue($param, $value, $type = ParameterType::STRING);
* of stored procedures that return data as output parameters, and some also as input/output
* parameters that both send in data and are updated to receive it.
*
* @param mixed $column Parameter identifier. For a prepared statement using named placeholders,
* this will be a parameter name of the form :name. For a prepared statement using
* question mark placeholders, this will be the 1-indexed position of the parameter.
* @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter.
* @param int $type Explicit data type for the parameter using the {@link \Doctrine\DBAL\ParameterType}
* constants. To return an INOUT parameter from a stored procedure, use the bitwise
* OR operator to set the PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter.
* @param int|null $length You must specify maxlength when using an OUT bind
* so that PHP allocates enough memory to hold the returned value.
* @param int|string $column Parameter identifier. For a prepared statement using named placeholders,
* this will be a parameter name of the form :name. For a prepared statement using
* question mark placeholders, this will be the 1-indexed position of the parameter.
* @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter.
* @param int $type Explicit data type for the parameter using the {@link \Doctrine\DBAL\ParameterType}
* constants. To return an INOUT parameter from a stored procedure, use the bitwise
* OR operator to set the PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter.
* @param int|null $length You must specify maxlength when using an OUT bind
* so that PHP allocates enough memory to hold the returned value.
*
* @return bool TRUE on success or FALSE on failure.
*/
Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/DBAL/Query/QueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ public function setMaxResults($maxResults)
* Gets the maximum number of results the query object was set to retrieve (the "limit").
* Returns NULL if all results will be returned.
*
* @return int The maximum number of results.
* @return int|null The maximum number of results.
*/
public function getMaxResults()
{
Expand Down
5 changes: 5 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,8 @@ parameters:
message: '~Method Doctrine\\DBAL\\Driver\\PDOSqlsrv\\Connection\:\:lastInsertId\(\) should return string but returns string\|false\|null\.~'
paths:
- %currentWorkingDirectory%/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Connection.php

-
message: '~Method Doctrine\\DBAL\\Portability\\Connection::prepare\(\) should return Doctrine\\DBAL\\Statement but returns Doctrine\\DBAL\\Portability\\Statement\.~'
paths:
- %currentWorkingDirectory%/lib/Doctrine/DBAL/Portability/Connection.php
20 changes: 19 additions & 1 deletion psalm.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<psalm
totallyTyped="false"
errorLevel="6"
errorLevel="5"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
Expand Down Expand Up @@ -32,6 +32,16 @@
<file name="lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php"/>
</errorLevel>
</ConflictingReferenceConstraint>
<FalsableReturnStatement>
<errorLevel type="suppress">
<!--
Fixing these issues requires an API change
-->
<file name="lib/Doctrine/DBAL/Driver/PDOSqlsrv/Connection.php"/>
<file name="lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereConnection.php"/>
<file name="lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php"/>
</errorLevel>
</FalsableReturnStatement>
<MethodSignatureMismatch>
<errorLevel type="suppress">
<!--
Expand All @@ -41,6 +51,14 @@
<file name="lib/Doctrine/DBAL/Driver/PDOConnection.php"/>
</errorLevel>
</MethodSignatureMismatch>
<NullableReturnStatement>
<errorLevel type="suppress">
<!--
Fixing this issue requires an API change
-->
<file name="lib/Doctrine/DBAL/Driver/AbstractSQLiteDriver.php"/>
</errorLevel>
</NullableReturnStatement>
<TooFewArguments>
<errorLevel type="suppress">
<!--
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ protected function createSchemaManager(Connection $connection): AbstractSchemaMa
}

/**
* @return mixed[][]
* {@inheritDoc}
*/
protected function getDatabasePlatformsForVersions(): array
{
Expand Down
7 changes: 6 additions & 1 deletion tests/Doctrine/Tests/DBAL/Driver/StatementIteratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
use Doctrine\DBAL\Driver\IBMDB2\DB2Statement;
use Doctrine\DBAL\Driver\Mysqli\MysqliStatement;
use Doctrine\DBAL\Driver\OCI8\OCI8Statement;
use Doctrine\DBAL\Driver\ResultStatement;
use Doctrine\DBAL\Driver\SQLAnywhere\SQLAnywhereStatement;
use Doctrine\DBAL\Driver\SQLSrv\SQLSrvStatement;
use Doctrine\DBAL\Driver\Statement;
use Doctrine\DBAL\Driver\StatementIterator;
use Doctrine\DBAL\Portability\Statement as PortabilityStatement;
use Doctrine\Tests\DbalTestCase;
use IteratorIterator;
use PHPUnit\Framework\MockObject\MockObject;
use Traversable;

Expand All @@ -19,16 +21,19 @@
class StatementIteratorTest extends DbalTestCase
{
/**
* @param class-string<ResultStatement> $class
*
* @dataProvider statementProvider()
*/
public function testGettingIteratorDoesNotCallFetch(string $class): void
{
$stmt = $this->createPartialMock($class, ['fetch', 'fetchAll', 'fetchColumn']);

$stmt->expects($this->never())->method('fetch');
$stmt->expects($this->never())->method('fetchAll');
$stmt->expects($this->never())->method('fetchColumn');

$stmt->getIterator();
new IteratorIterator($stmt);
}

public function testIteratorIterationCallsFetchOncePerStep(): void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace Doctrine\Tests\DBAL\Functional\Driver\PDOSqlsrv;

use Doctrine\DBAL\Driver as DriverInterface;
use Doctrine\DBAL\Driver\Connection;
use Doctrine\DBAL\Driver\PDOConnection;
use Doctrine\DBAL\Driver\PDOSqlsrv\Driver;
use Doctrine\Tests\DBAL\Functional\Driver\AbstractDriverTest;
use Doctrine\Tests\TestUtil;
Expand Down Expand Up @@ -41,7 +41,7 @@ protected static function getDatabaseNameForConnectionWithoutDatabaseNameParamet
/**
* @param int[]|string[] $driverOptions
*/
protected function getConnection(array $driverOptions): Connection
private function getConnection(array $driverOptions): PDOConnection
{
$params = TestUtil::getConnectionParams();

Expand Down
Loading

0 comments on commit f7e8b5f

Please sign in to comment.