MySQLSchemaTest.php 2.38 KB
Newer Older
1 2
<?php

Michael Moravec's avatar
Michael Moravec committed
3 4
declare(strict_types=1);

5
namespace Doctrine\DBAL\Tests\Schema\Platforms;
6

Sergei Morozov's avatar
Sergei Morozov committed
7 8
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Platforms\MySqlPlatform;
9
use Doctrine\DBAL\Schema\Comparator;
10
use Doctrine\DBAL\Schema\Table;
Sergei Morozov's avatar
Sergei Morozov committed
11
use PHPUnit\Framework\TestCase;
12

Sergei Morozov's avatar
Sergei Morozov committed
13
class MySQLSchemaTest extends TestCase
14
{
15
    /** @var Comparator */
16
    private $comparator;
17

Sergei Morozov's avatar
Sergei Morozov committed
18
    /** @var AbstractPlatform */
19 20
    private $platform;

21
    protected function setUp(): void
22
    {
23
        $this->comparator = new Comparator();
Sergei Morozov's avatar
Sergei Morozov committed
24
        $this->platform   = new MySqlPlatform();
25 26
    }

27
    public function testSwitchPrimaryKeyOrder(): void
28
    {
Sergei Morozov's avatar
Sergei Morozov committed
29
        $tableOld = new Table('test');
30 31 32 33
        $tableOld->addColumn('foo_id', 'integer');
        $tableOld->addColumn('bar_id', 'integer');
        $tableNew = clone $tableOld;

Sergei Morozov's avatar
Sergei Morozov committed
34 35
        $tableOld->setPrimaryKey(['foo_id', 'bar_id']);
        $tableNew->setPrimaryKey(['bar_id', 'foo_id']);
36 37

        $diff = $this->comparator->diffTable($tableOld, $tableNew);
38 39 40 41

        self::assertNotNull($diff);

        $sql = $this->platform->getAlterTableSQL($diff);
42

43
        self::assertEquals(
Sergei Morozov's avatar
Sergei Morozov committed
44
            [
45
                'ALTER TABLE test DROP PRIMARY KEY',
Sergei Morozov's avatar
Sergei Morozov committed
46 47 48
                'ALTER TABLE test ADD PRIMARY KEY (bar_id, foo_id)',
            ],
            $sql
49 50
        );
    }
51

52
    public function testGenerateForeignKeySQL(): void
53
    {
Sergei Morozov's avatar
Sergei Morozov committed
54
        $tableOld = new Table('test');
55
        $tableOld->addColumn('foo_id', 'integer');
56
        $tableOld->addForeignKeyConstraint('test_foreign', ['foo_id'], ['foo_id']);
57

Sergei Morozov's avatar
Sergei Morozov committed
58
        $sqls = [];
jeroendedauw's avatar
jeroendedauw committed
59
        foreach ($tableOld->getForeignKeys() as $fk) {
60 61 62
            $sqls[] = $this->platform->getCreateForeignKeySQL($fk, $tableOld);
        }

Sergei Morozov's avatar
Sergei Morozov committed
63
        self::assertEquals(['ALTER TABLE test ADD CONSTRAINT FK_D87F7E0C8E48560F FOREIGN KEY (foo_id) REFERENCES test_foreign (foo_id)'], $sqls);
64
    }
65

66
    public function testClobNoAlterTable(): void
67
    {
Sergei Morozov's avatar
Sergei Morozov committed
68
        $tableOld = new Table('test');
69
        $tableOld->addColumn('id', 'integer');
Sergei Morozov's avatar
Sergei Morozov committed
70
        $tableOld->addColumn('description', 'string', ['length' => 65536]);
71 72
        $tableNew = clone $tableOld;

Sergei Morozov's avatar
Sergei Morozov committed
73
        $tableNew->setPrimaryKey(['id']);
74 75

        $diff = $this->comparator->diffTable($tableOld, $tableNew);
76 77 78 79

        self::assertNotNull($diff);

        $sql = $this->platform->getAlterTableSQL($diff);
80

81
        self::assertEquals(
Sergei Morozov's avatar
Sergei Morozov committed
82
            ['ALTER TABLE test ADD PRIMARY KEY (id)'],
83 84 85
            $sql
        );
    }
Luís Cobucci's avatar
Luís Cobucci committed
86
}