MySQLSchemaTest.php 2.37 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\Tests\DBAL\Schema\Platforms;

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

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

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

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

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

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

        $diff = $this->comparator->diffTable($tableOld, $tableNew);
Sergei Morozov's avatar
Sergei Morozov committed
36
        $sql  = $this->platform->getAlterTableSQL($diff);
37

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

    /**
     * @group DBAL-132
     */
50
    public function testGenerateForeignKeySQL() : void
51
    {
Sergei Morozov's avatar
Sergei Morozov committed
52
        $tableOld = new Table('test');
53
        $tableOld->addColumn('foo_id', 'integer');
Sergei Morozov's avatar
Sergei Morozov committed
54
        $tableOld->addUnnamedForeignKeyConstraint('test_foreign', ['foo_id'], ['foo_id']);
55

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

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

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

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

        $diff = $this->comparator->diffTable($tableOld, $tableNew);
Sergei Morozov's avatar
Sergei Morozov committed
77
        $sql  = $this->platform->getAlterTableSQL($diff);
78

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