|
13 | 13 |
|
14 | 14 | useDoctrine\DBAL\Connection; |
15 | 15 | useDoctrine\DBAL\Driver\DriverException; |
| 16 | +useDoctrine\DBAL\Driver\ServerInfoAwareConnection; |
16 | 17 | useDoctrine\DBAL\Platforms\SQLServer2008Platform; |
17 | 18 |
|
18 | 19 | /** |
@@ -241,9 +242,30 @@ private function getMergeSql() |
241 | 242 | "WHEN MATCHED THEN UPDATE SET$this->dataCol = :data,$this->timeCol = :time;"; |
242 | 243 | case'sqlite' ===$platform: |
243 | 244 | return"INSERT OR REPLACE INTO$this->table ($this->idCol,$this->dataCol,$this->timeCol) VALUES (:id, :data, :time)"; |
244 | | -case'postgresql' ===$platform &&version_compare($this->con->getServerVersion(),'9.5','>='): |
| 245 | +case'postgresql' ===$platform &&version_compare($this->getServerVersion(),'9.5','>='): |
245 | 246 | return"INSERT INTO$this->table ($this->idCol,$this->dataCol,$this->timeCol) VALUES (:id, :data, :time)". |
246 | 247 | "ON CONFLICT ($this->idCol) DO UPDATE SET ($this->dataCol,$this->timeCol) = (EXCLUDED.$this->dataCol, EXCLUDED.$this->timeCol)"; |
247 | 248 | } |
248 | 249 | } |
| 250 | + |
| 251 | +privatefunctiongetServerVersion() |
| 252 | + { |
| 253 | +$params =$this->con->getParams(); |
| 254 | + |
| 255 | +if (isset($params['serverVersion'])) { |
| 256 | +return$params['serverVersion'];// Explicit platform version requested (supersedes auto-detection), so we respect it. |
| 257 | + } |
| 258 | + |
| 259 | +$wrappedConnection =$this->con->getWrappedConnection(); |
| 260 | + |
| 261 | +if ($wrappedConnectioninstanceof ServerInfoAwareConnection) { |
| 262 | +return$wrappedConnection->getServerVersion(); |
| 263 | + } |
| 264 | + |
| 265 | +if ($wrappedConnectioninstanceof \PDO) {// Support DBAL 2.4 by accessing it directly when using PDO PgSQL |
| 266 | +return$wrappedConnection->getAttribute(\PDO::ATTR_SERVER_VERSION); |
| 267 | + } |
| 268 | + |
| 269 | +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. |
| 270 | + } |
249 | 271 | } |