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
|
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests\Schema;
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Platforms\MySQLPlatform;
use Doctrine\DBAL\Schema\Column;
use Doctrine\DBAL\Schema\MySQLSchemaManager;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Types\Types;
use PHPUnit\Framework\TestCase;
/** @phpstan-import-type Params from DriverManager */
class MySQLInheritCharsetTest extends TestCase
{
public function testInheritTableOptionsFromDatabase(): void
{
// default, no overrides
$options = $this->getTableOptionsForOverride();
self::assertFalse(isset($options['charset']));
// explicit utf8
$options = $this->getTableOptionsForOverride(['charset' => 'utf8']);
self::assertTrue(isset($options['charset']));
self::assertSame($options['charset'], 'utf8');
// explicit utf8mb4
$options = $this->getTableOptionsForOverride(['charset' => 'utf8mb4']);
self::assertTrue(isset($options['charset']));
self::assertSame($options['charset'], 'utf8mb4');
}
public function testTableOptions(): void
{
$platform = new MySQLPlatform();
// no options
$table = Table::editor()
->setUnquotedName('foobar')
->setColumns(
Column::editor()
->setUnquotedName('aa')
->setTypeName(Types::INTEGER)
->create(),
)
->create();
self::assertSame(
['CREATE TABLE foobar (aa INT NOT NULL)'],
$platform->getCreateTableSQL($table),
);
// charset
$table = Table::editor()
->setUnquotedName('foobar')
->setColumns(
Column::editor()
->setUnquotedName('aa')
->setTypeName(Types::INTEGER)
->create(),
)
->setOptions(['charset' => 'utf8'])
->create();
self::assertSame(
['CREATE TABLE foobar (aa INT NOT NULL) DEFAULT CHARACTER SET utf8'],
$platform->getCreateTableSQL($table),
);
}
/**
* @param array<string,mixed> $params
* @phpstan-param Params $params
*
* @return string[]
*/
private function getTableOptionsForOverride(array $params = []): array
{
$driverMock = $this->createMock(Driver::class);
$platform = new MySQLPlatform();
$conn = new Connection($params, $driverMock, new Configuration());
$manager = new MySQLSchemaManager($conn, $platform);
$schemaConfig = $manager->createSchemaConfig();
return $schemaConfig->getDefaultTableOptions();
}
}
|