File: Tidb.php

package info (click to toggle)
matomo 5.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 95,068 kB
  • sloc: php: 289,425; xml: 127,249; javascript: 112,130; python: 202; sh: 178; makefile: 20; sql: 10
file content (101 lines) | stat: -rw-r--r-- 2,429 bytes parent folder | download
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;
    }
}