Fix the DBAL session handler version check for Postgresql
This commit is contained in:
parent
d303b9dffe
commit
e98c5841da
@ -13,6 +13,7 @@ namespace Symfony\Bridge\Doctrine\HttpFoundation;
|
|||||||
|
|
||||||
use Doctrine\DBAL\Connection;
|
use Doctrine\DBAL\Connection;
|
||||||
use Doctrine\DBAL\Driver\DriverException;
|
use Doctrine\DBAL\Driver\DriverException;
|
||||||
|
use Doctrine\DBAL\Driver\ServerInfoAwareConnection;
|
||||||
use Doctrine\DBAL\Platforms\SQLServer2008Platform;
|
use Doctrine\DBAL\Platforms\SQLServer2008Platform;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -241,9 +242,30 @@ class DbalSessionHandler implements \SessionHandlerInterface
|
|||||||
"WHEN MATCHED THEN UPDATE SET $this->dataCol = :data, $this->timeCol = :time;";
|
"WHEN MATCHED THEN UPDATE SET $this->dataCol = :data, $this->timeCol = :time;";
|
||||||
case 'sqlite' === $platform:
|
case 'sqlite' === $platform:
|
||||||
return "INSERT OR REPLACE INTO $this->table ($this->idCol, $this->dataCol, $this->timeCol) VALUES (:id, :data, :time)";
|
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) ".
|
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)";
|
"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.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user