Skip to content

Commit

Permalink
bug #19369 Fix the DBAL session handler version check for Postgresql …
Browse files Browse the repository at this point in the history
…(stof)

This PR was merged into the 2.7 branch.

Discussion
----------

Fix the DBAL session handler version check for Postgresql

| Q             | A
| ------------- | ---
| Branch?       | 2.7
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | no
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

#19048 broken the DBAL session handler when using Postgresql by using method which does not exist on the main DBAL Connection class.

Commits
-------

e98c584 Fix the DBAL session handler version check for Postgresql
  • Loading branch information
fabpot committed Jul 18, 2016
2 parents 4590759 + e98c584 commit 28029a2
Showing 1 changed file with 23 additions and 1 deletion.
Expand Up @@ -13,6 +13,7 @@

use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver\DriverException;
use Doctrine\DBAL\Driver\ServerInfoAwareConnection;
use Doctrine\DBAL\Platforms\SQLServer2008Platform;

/**
Expand Down Expand Up @@ -241,9 +242,30 @@ private function getMergeSql()
"WHEN MATCHED THEN UPDATE SET $this->dataCol = :data, $this->timeCol = :time;";
case 'sqlite' === $platform:
return "INSERT OR REPLACE INTO $this->table ($this->idCol, $this->dataCol, $this->timeCol) VALUES (:id, :data, :time)";
case 'postgresql' === $platform && version_compare($this->con->getServerVersion(), '9.5', '>='):
case 'postgresql' === $platform && version_compare($this->getServerVersion(), '9.5', '>='):
return "INSERT INTO $this->table ($this->idCol, $this->dataCol, $this->timeCol) VALUES (:id, :data, :time) ".
"ON CONFLICT ($this->idCol) DO UPDATE SET ($this->dataCol, $this->timeCol) = (EXCLUDED.$this->dataCol, EXCLUDED.$this->timeCol)";
}
}

private function getServerVersion()
{
$params = $this->con->getParams();

if (isset($params['serverVersion'])) {
return $params['serverVersion']; // Explicit platform version requested (supersedes auto-detection), so we respect it.
}

$wrappedConnection = $this->con->getWrappedConnection();

if ($wrappedConnection instanceof ServerInfoAwareConnection) {
return $wrappedConnection->getServerVersion();
}

if ($wrappedConnection instanceof \PDO) { // Support DBAL 2.4 by accessing it directly when using PDO PgSQL
return $wrappedConnection->getAttribute(\PDO::ATTR_SERVER_VERSION);
}

return ''; // If we cannot guess the version, the empty string will mean we won't use the code for newer versions when doing version checks.
}
}

0 comments on commit 28029a2

Please sign in to comment.