1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Db\Schema;
/**
* Mariadb schema
*/
class Tidb extends Mysql
{
public function getDatabaseType(): string
{
return 'TiDb';
}
/**
* TiDB performs a sanity check before performing e.g. ALTER TABLE statements. If any of the used columns does not
* exist before the query fails. This also happens if the column would be added in the same query.
*
*/
public function supportsComplexColumnUpdates(): bool
{
return false;
}
public function getDefaultCollationForCharset(string $charset): string
{
$collation = parent::getDefaultCollationForCharset($charset);
if ('utf8mb4' === $charset && 'utf8mb4_bin' === $collation) {
// replace the TiDB default "utf8mb4_bin" with a better default
return 'utf8mb4_0900_ai_ci';
}
return $collation;
}
public function getDefaultPort(): int
{
return 4000;
}
public function getTableCreateOptions(): string
{
$engine = $this->getTableEngine();
$charset = $this->getUsedCharset();
$collation = $this->getUsedCollation();
$rowFormat = $this->getTableRowFormat();
if ('utf8mb4' === $charset && '' === $collation) {
$collation = 'utf8mb4_0900_ai_ci';
}
$options = "ENGINE=$engine DEFAULT CHARSET=$charset";
if ('' !== $collation) {
$options .= " COLLATE=$collation";
}
if ('' !== $rowFormat) {
$options .= " $rowFormat";
}
return $options;
}
public function isOptimizeInnoDBSupported(): bool
{
return false;
}
public function optimizeTables(array $tables, bool $force = false): bool
{
// OPTIMIZE TABLE not supported for TiDb
return false;
}
public function supportsSortingInSubquery(): bool
{
// TiDb optimizer removes all sorting from subqueries
return false;
}
public function getSupportedReadIsolationTransactionLevel(): string
{
// TiDB doesn't support READ UNCOMMITTED
return 'READ COMMITTED';
}
public function hasReachedEOL(): bool
{
// ignore in EOL checks
return false;
}
}
|