summaryrefslogtreecommitdiff
path: root/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php')
-rw-r--r--vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php86
1 files changed, 86 insertions, 0 deletions
diff --git a/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php b/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php
new file mode 100644
index 0000000..40d6507
--- /dev/null
+++ b/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php
@@ -0,0 +1,86 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\DBAL\Driver;
6
7use Doctrine\DBAL\Driver;
8use Doctrine\DBAL\Driver\API\ExceptionConverter as ExceptionConverterInterface;
9use Doctrine\DBAL\Driver\API\MySQL\ExceptionConverter;
10use Doctrine\DBAL\Platforms\AbstractMySQLPlatform;
11use Doctrine\DBAL\Platforms\Exception\InvalidPlatformVersion;
12use Doctrine\DBAL\Platforms\MariaDB1052Platform;
13use Doctrine\DBAL\Platforms\MariaDB1060Platform;
14use Doctrine\DBAL\Platforms\MariaDBPlatform;
15use Doctrine\DBAL\Platforms\MySQL80Platform;
16use Doctrine\DBAL\Platforms\MySQLPlatform;
17use Doctrine\DBAL\ServerVersionProvider;
18
19use function preg_match;
20use function stripos;
21use function version_compare;
22
23/**
24 * Abstract base implementation of the {@see Driver} interface for MySQL based drivers.
25 */
26abstract class AbstractMySQLDriver implements Driver
27{
28 /**
29 * {@inheritDoc}
30 *
31 * @throws InvalidPlatformVersion
32 */
33 public function getDatabasePlatform(ServerVersionProvider $versionProvider): AbstractMySQLPlatform
34 {
35 $version = $versionProvider->getServerVersion();
36 if (stripos($version, 'mariadb') !== false) {
37 $mariaDbVersion = $this->getMariaDbMysqlVersionNumber($version);
38 if (version_compare($mariaDbVersion, '10.6.0', '>=')) {
39 return new MariaDB1060Platform();
40 }
41
42 if (version_compare($mariaDbVersion, '10.5.2', '>=')) {
43 return new MariaDB1052Platform();
44 }
45
46 return new MariaDBPlatform();
47 }
48
49 if (version_compare($version, '8.0.0', '>=')) {
50 return new MySQL80Platform();
51 }
52
53 return new MySQLPlatform();
54 }
55
56 public function getExceptionConverter(): ExceptionConverterInterface
57 {
58 return new ExceptionConverter();
59 }
60
61 /**
62 * Detect MariaDB server version, including hack for some mariadb distributions
63 * that starts with the prefix '5.5.5-'
64 *
65 * @param string $versionString Version string as returned by mariadb server, i.e. '5.5.5-Mariadb-10.0.8-xenial'
66 *
67 * @throws InvalidPlatformVersion
68 */
69 private function getMariaDbMysqlVersionNumber(string $versionString): string
70 {
71 if (
72 preg_match(
73 '/^(?:5\.5\.5-)?(mariadb-)?(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)/i',
74 $versionString,
75 $versionParts,
76 ) === 0
77 ) {
78 throw InvalidPlatformVersion::new(
79 $versionString,
80 '^(?:5\.5\.5-)?(mariadb-)?<major_version>.<minor_version>.<patch_version>',
81 );
82 }
83
84 return $versionParts['major'] . '.' . $versionParts['minor'] . '.' . $versionParts['patch'];
85 }
86}