| /** | |
| * 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; | |
| /** | |
| * Database schema interface | |
| */ | |
| interface SchemaInterface | |
| { | |
| /** | |
| * Returns the type of the current database (e.g. MySQL, MariaDB, ...) | |
| */ | |
| public function getDatabaseType(): string; | |
| /** | |
| * Get the SQL to create a specific Matomo table | |
| * | |
| * @param string $tableName | |
| * @return string SQL | |
| */ | |
| public function getTableCreateSql($tableName); | |
| /** | |
| * Get the SQL to create Matomo tables | |
| * | |
| * @return array array of strings containing SQL | |
| */ | |
| public function getTablesCreateSql(); | |
| /** | |
| * Creates a new table in the database. | |
| * | |
| * @param string $nameWithoutPrefix The name of the table without any prefix. | |
| * @param string $createDefinition The table create definition | |
| */ | |
| public function createTable($nameWithoutPrefix, $createDefinition); | |
| /** | |
| * Create database | |
| * | |
| * @param string $dbName Name of the database to create | |
| */ | |
| public function createDatabase($dbName = null); | |
| /** | |
| * Drop database | |
| */ | |
| public function dropDatabase(); | |
| /** | |
| * Create all tables | |
| */ | |
| public function createTables(); | |
| /** | |
| * Creates an entry in the User table for the "anonymous" user. | |
| */ | |
| public function createAnonymousUser(); | |
| /** | |
| * Records the Matomo version a user used when installing this Matomo for the first time | |
| */ | |
| public function recordInstallVersion(); | |
| /** | |
| * Returns which Matomo version was used to install this Matomo for the first time. | |
| */ | |
| public function getInstallVersion(); | |
| /** | |
| * Returns the supported read isolation transaction level | |
| * | |
| * For example: | |
| * READ COMMITTED | |
| * or | |
| * READ UNCOMMITTED | |
| */ | |
| public function getSupportedReadIsolationTransactionLevel(): string; | |
| /** | |
| * Truncate all tables | |
| */ | |
| public function truncateAllTables(); | |
| /** | |
| * Names of all the prefixed tables in Matomo | |
| * Doesn't use the DB | |
| * | |
| * @return array Table names | |
| */ | |
| public function getTablesNames(); | |
| /** | |
| * Get list of tables installed | |
| * | |
| * @param bool $forceReload Invalidate cache | |
| * @return array installed Tables | |
| */ | |
| public function getTablesInstalled($forceReload = true); | |
| /** | |
| * Get list of installed columns in a table | |
| * | |
| * @param string $tableName The name of a table. | |
| * | |
| * @return array Installed columns indexed by the column name. | |
| */ | |
| public function getTableColumns($tableName); | |
| /** | |
| * Checks whether any table exists | |
| * | |
| * @return bool True if tables exist; false otherwise | |
| */ | |
| public function hasTables(); | |
| /** | |
| * Adds a max execution time query hint into a SELECT query if $limit is bigger than 0 | |
| * (floating values for limit might be rounded to full seconds depending on DB support) | |
| * | |
| * @param string $sql query to add hint to | |
| * @param float $limit time limit in seconds | |
| */ | |
| public function addMaxExecutionTimeHintToQuery(string $sql, float $limit): string; | |
| /** | |
| * Returns if the database supports column updates in table updates. | |
| * Some database engines are performing sanity checks for table updates. Those might include checking if all columns used | |
| * already exist. In such a case queries like this might fail: `ALTER TABLE t ADD COLUMN b, ADD INDEX i (b)` | |
| */ | |
| public function supportsComplexColumnUpdates(): bool; | |
| /** | |
| * Returns the default collation for a charset used by this database engine. | |
| */ | |
| public function getDefaultCollationForCharset(string $charset): string; | |
| /** | |
| * Return the default port used by this database engine | |
| */ | |
| public function getDefaultPort(): int; | |
| /** | |
| * Return the table options to use for a CREATE TABLE statement. | |
| */ | |
| public function getTableCreateOptions(): string; | |
| /** | |
| * Returns if performing on `OPTIMIZE TABLE` is supported for InnoDb tables | |
| */ | |
| public function isOptimizeInnoDBSupported(): bool; | |
| /** | |
| * Runs an `OPTIMIZE TABLE` query on the supplied table or tables. | |
| * | |
| * Tables will only be optimized if the `[General] enable_sql_optimize_queries` INI config option is | |
| * set to **1**. | |
| * | |
| * @param array $tables The name of the table to optimize or an array of tables to optimize. | |
| * Table names must be prefixed (see {@link Piwik\Common::prefixTable()}). | |
| * @param bool $force If true, the `OPTIMIZE TABLE` query will be run even if InnoDB tables are being used. | |
| */ | |
| public function optimizeTables(array $tables, bool $force = false): bool; | |
| /** | |
| * Returns if the database engine can provide a rollup ranking query result | |
| * without needing additional sorting. | |
| */ | |
| public function supportsRankingRollupWithoutExtraSorting(): bool; | |
| /** | |
| * Returns if the database engine is able to use sorted subqueries | |
| */ | |
| public function supportsSortingInSubquery(): bool; | |
| /** | |
| * Returns the version of the database server | |
| */ | |
| public function getVersion(): string; | |
| /** | |
| * Returns if the used database version has reached its EOL | |
| */ | |
| public function hasReachedEOL(): bool; | |
| /** | |
| * Returns the minimum supported version set for the schema | |
| */ | |
| public function getMinimumSupportedVersion(): string; | |
| } | |