Mariadb.php
75 lines
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * Matomo - free/libre analytics platform |
| 5 | * |
| 6 | * @link https://matomo.org |
| 7 | * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later |
| 8 | */ |
| 9 | namespace Piwik\Db\Schema; |
| 10 | |
| 11 | use Piwik\Date; |
| 12 | /** |
| 13 | * Mariadb schema |
| 14 | */ |
| 15 | class Mariadb extends \Piwik\Db\Schema\Mysql |
| 16 | { |
| 17 | protected $minimumSupportedVersion = '5.5'; |
| 18 | public function getDatabaseType() : string |
| 19 | { |
| 20 | return 'MariaDB'; |
| 21 | } |
| 22 | /** |
| 23 | * Adds a max_statement_time hint into a SELECT query if $limit is bigger than 0 |
| 24 | * |
| 25 | * @param string $sql query to add hint to |
| 26 | * @param float $limit time limit in seconds |
| 27 | */ |
| 28 | public function addMaxExecutionTimeHintToQuery(string $sql, float $limit) : string |
| 29 | { |
| 30 | if ($limit <= 0) { |
| 31 | return $sql; |
| 32 | } |
| 33 | $sql = trim($sql); |
| 34 | $pos = stripos($sql, 'SELECT'); |
| 35 | $isMaxExecutionTimeoutAlreadyPresent = stripos($sql, 'max_statement_time=') !== \false; |
| 36 | if ($pos !== \false && !$isMaxExecutionTimeoutAlreadyPresent) { |
| 37 | $maxExecutionTimeHint = 'SET STATEMENT max_statement_time=' . ceil($limit) . ' FOR '; |
| 38 | $sql = substr_replace($sql, $maxExecutionTimeHint . 'SELECT', $pos, strlen('SELECT')); |
| 39 | } |
| 40 | return $sql; |
| 41 | } |
| 42 | public function isOptimizeInnoDBSupported() : bool |
| 43 | { |
| 44 | $version = strtolower($this->getVersion()); |
| 45 | $semanticVersion = strstr($version, '-', $beforeNeedle = \true); |
| 46 | return version_compare($semanticVersion, '10.1.1', '>='); |
| 47 | } |
| 48 | public function supportsRankingRollupWithoutExtraSorting() : bool |
| 49 | { |
| 50 | return \false; |
| 51 | } |
| 52 | public function hasReachedEOL() : bool |
| 53 | { |
| 54 | $currentVersion = $this->getVersion(); |
| 55 | // End of security update for certain MariaDb versions as of https://mariadb.org/about/#maintenance-policy |
| 56 | // Support for 10.6 LTS ends on 6th July 2026 |
| 57 | if (version_compare($currentVersion, '10.6', '>=') && version_compare($currentVersion, '10.7', '<') && Date::today()->isEarlier(Date::factory('2026-07-07'))) { |
| 58 | return \false; |
| 59 | } |
| 60 | // Support for 10.11 LTS ends on 16th February 2028 |
| 61 | if (version_compare($currentVersion, '10.11', '>=') && version_compare($currentVersion, '10.12', '<') && Date::today()->isEarlier(Date::factory('2028-02-17'))) { |
| 62 | return \false; |
| 63 | } |
| 64 | // Support for 11.4 LTS ends on 29th May 2029 |
| 65 | if (version_compare($currentVersion, '11.4', '>=') && version_compare($currentVersion, '11.5', '<') && Date::today()->isEarlier(Date::factory('2029-05-30'))) { |
| 66 | return \false; |
| 67 | } |
| 68 | // Support for all versions prior to 11.8 (not covered by conditions above) already ended |
| 69 | if (version_compare($currentVersion, '11.8', '<')) { |
| 70 | return \true; |
| 71 | } |
| 72 | return \false; |
| 73 | } |
| 74 | } |
| 75 |