Example #1
0
 /**
  * Get COLLATION, ROW_FORMAT, COMMENT and ENGINE table options on MySQL connections.
  *
  * @param string[] $tableNames
  * @return array[]
  * @throws \InvalidArgumentException
  */
 protected function getTableOptions(array $tableNames) : array
 {
     $tableOptions = [];
     if (strpos($this->connection->getServerVersion(), 'MySQL') !== 0) {
         foreach ($tableNames as $tableName) {
             $tableOptions[$tableName] = [];
         }
         return $tableOptions;
     }
     $queryBuilder = $this->connection->createQueryBuilder();
     $result = $queryBuilder->select('TABLE_NAME AS table', 'ENGINE AS engine', 'ROW_FORMAT AS row_format', 'TABLE_COLLATION AS collate', 'TABLE_COMMENT AS comment')->from('information_schema.TABLES')->where($queryBuilder->expr()->eq('TABLE_TYPE', $queryBuilder->createNamedParameter('BASE TABLE', \PDO::PARAM_STR)), $queryBuilder->expr()->eq('TABLE_SCHEMA', $queryBuilder->createNamedParameter($this->connection->getDatabase(), \PDO::PARAM_STR)))->execute();
     while ($row = $result->fetch()) {
         $index = $row['table'];
         unset($row['table']);
         $tableOptions[$index] = $row;
     }
     return $tableOptions;
 }
 /**
  * @test
  */
 public function createQueryBuilderReturnsInstanceOfTypo3QueryBuilder()
 {
     $this->assertInstanceOf(QueryBuilder::class, $this->connection->createQueryBuilder());
 }
Example #3
0
 /**
  * Checks the character set of the database and reports an error if it is not utf-8.
  *
  * @param Connection $connection to the database to be checked
  * @return Status\StatusInterface
  */
 protected function checkMysqlDatabaseUtf8Status(Connection $connection)
 {
     /** @var QueryBuilder $queryBuilder */
     $queryBuilder = $connection->createQueryBuilder();
     $defaultDatabaseCharset = (string) $queryBuilder->select('DEFAULT_CHARACTER_SET_NAME')->from('information_schema.SCHEMATA')->where($queryBuilder->expr()->eq('SCHEMA_NAME', $queryBuilder->createNamedParameter($connection->getDatabase(), \PDO::PARAM_STR)))->setMaxResults(1)->execute()->fetchColumn();
     // also allow utf8mb4
     if (strpos($defaultDatabaseCharset, 'utf8') !== 0) {
         $status = new Status\ErrorStatus();
         $status->setTitle('MySQL database character set check failed');
         $status->setMessage('Checking database character set failed, got key "' . $defaultDatabaseCharset . '" instead of "utf8" or "utf8mb4"');
     } else {
         $status = new Status\OkStatus();
         $status->setTitle('Your database uses utf-8. All good.');
     }
     return $status;
 }