IndexTest.php 5.02 KB
Newer Older
1 2 3 4 5
<?php

namespace Doctrine\Tests\DBAL\Schema;

use Doctrine\DBAL\Schema\Index;
Sergei Morozov's avatar
Sergei Morozov committed
6
use PHPUnit\Framework\TestCase;
7

Sergei Morozov's avatar
Sergei Morozov committed
8
class IndexTest extends TestCase
9
{
Sergei Morozov's avatar
Sergei Morozov committed
10
    public function createIndex($unique = false, $primary = false, $options = [])
11
    {
Sergei Morozov's avatar
Sergei Morozov committed
12
        return new Index('foo', ['bar', 'baz'], $unique, $primary, [], $options);
13 14 15 16 17
    }

    public function testCreateIndex()
    {
        $idx = $this->createIndex();
Sergei Morozov's avatar
Sergei Morozov committed
18
        self::assertEquals('foo', $idx->getName());
19
        $columns = $idx->getColumns();
Gabriel Caruso's avatar
Gabriel Caruso committed
20
        self::assertCount(2, $columns);
Sergei Morozov's avatar
Sergei Morozov committed
21
        self::assertEquals(['bar', 'baz'], $columns);
22 23
        self::assertFalse($idx->isUnique());
        self::assertFalse($idx->isPrimary());
24 25 26 27 28
    }

    public function testCreatePrimary()
    {
        $idx = $this->createIndex(false, true);
29 30
        self::assertTrue($idx->isUnique());
        self::assertTrue($idx->isPrimary());
31 32 33 34 35
    }

    public function testCreateUnique()
    {
        $idx = $this->createIndex(true, false);
36 37
        self::assertTrue($idx->isUnique());
        self::assertFalse($idx->isPrimary());
38
    }
39 40 41 42

    /**
     * @group DBAL-50
     */
Possum's avatar
Possum committed
43
    public function testFulfilledByUnique()
44 45 46 47 48
    {
        $idx1 = $this->createIndex(true, false);
        $idx2 = $this->createIndex(true, false);
        $idx3 = $this->createIndex();

49 50
        self::assertTrue($idx1->isFullfilledBy($idx2));
        self::assertFalse($idx1->isFullfilledBy($idx3));
51 52 53 54 55
    }

    /**
     * @group DBAL-50
     */
Possum's avatar
Possum committed
56
    public function testFulfilledByPrimary()
57 58 59 60 61
    {
        $idx1 = $this->createIndex(true, true);
        $idx2 = $this->createIndex(true, true);
        $idx3 = $this->createIndex(true, false);

62 63
        self::assertTrue($idx1->isFullfilledBy($idx2));
        self::assertFalse($idx1->isFullfilledBy($idx3));
64 65 66 67 68
    }

    /**
     * @group DBAL-50
     */
Possum's avatar
Possum committed
69
    public function testFulfilledByIndex()
70 71 72
    {
        $idx1 = $this->createIndex();
        $idx2 = $this->createIndex();
Sergei Morozov's avatar
Sergei Morozov committed
73
        $pri  = $this->createIndex(true, true);
74 75
        $uniq = $this->createIndex(true);

76 77 78
        self::assertTrue($idx1->isFullfilledBy($idx2));
        self::assertTrue($idx1->isFullfilledBy($pri));
        self::assertTrue($idx1->isFullfilledBy($uniq));
79
    }
80

Possum's avatar
Possum committed
81
    public function testFulfilledWithPartial()
82
    {
Sergei Morozov's avatar
Sergei Morozov committed
83 84 85
        $without = new Index('without', ['col1', 'col2'], true, false, [], []);
        $partial = new Index('partial', ['col1', 'col2'], true, false, [], ['where' => 'col1 IS NULL']);
        $another = new Index('another', ['col1', 'col2'], true, false, [], ['where' => 'col1 IS NULL']);
86

87 88
        self::assertFalse($partial->isFullfilledBy($without));
        self::assertFalse($without->isFullfilledBy($partial));
89

90
        self::assertTrue($partial->isFullfilledBy($partial));
91

92 93
        self::assertTrue($partial->isFullfilledBy($another));
        self::assertTrue($another->isFullfilledBy($partial));
94 95 96 97
    }

    public function testOverrulesWithPartial()
    {
Sergei Morozov's avatar
Sergei Morozov committed
98 99 100
        $without = new Index('without', ['col1', 'col2'], true, false, [], []);
        $partial = new Index('partial', ['col1', 'col2'], true, false, [], ['where' => 'col1 IS NULL']);
        $another = new Index('another', ['col1', 'col2'], true, false, [], ['where' => 'col1 IS NULL']);
101

102 103
        self::assertFalse($partial->overrules($without));
        self::assertFalse($without->overrules($partial));
104

105
        self::assertTrue($partial->overrules($partial));
106

107 108
        self::assertTrue($partial->overrules($another));
        self::assertTrue($another->overrules($partial));
109 110
    }

111 112 113 114 115 116
    /**
     * @group DBAL-220
     */
    public function testFlags()
    {
        $idx1 = $this->createIndex();
117 118
        self::assertFalse($idx1->hasFlag('clustered'));
        self::assertEmpty($idx1->getFlags());
119 120

        $idx1->addFlag('clustered');
121 122
        self::assertTrue($idx1->hasFlag('clustered'));
        self::assertTrue($idx1->hasFlag('CLUSTERED'));
Sergei Morozov's avatar
Sergei Morozov committed
123
        self::assertSame(['clustered'], $idx1->getFlags());
124 125

        $idx1->removeFlag('clustered');
126 127
        self::assertFalse($idx1->hasFlag('clustered'));
        self::assertEmpty($idx1->getFlags());
128
    }
129 130 131 132 133 134

    /**
     * @group DBAL-285
     */
    public function testIndexQuotes()
    {
Sergei Morozov's avatar
Sergei Morozov committed
135
        $index = new Index('foo', ['`bar`', '`baz`']);
136

Sergei Morozov's avatar
Sergei Morozov committed
137 138 139
        self::assertTrue($index->spansColumns(['bar', 'baz']));
        self::assertTrue($index->hasColumnAtPosition('bar', 0));
        self::assertTrue($index->hasColumnAtPosition('baz', 1));
140

Sergei Morozov's avatar
Sergei Morozov committed
141 142
        self::assertFalse($index->hasColumnAtPosition('bar', 1));
        self::assertFalse($index->hasColumnAtPosition('baz', 0));
143
    }
144 145 146 147

    public function testOptions()
    {
        $idx1 = $this->createIndex();
148 149
        self::assertFalse($idx1->hasOption('where'));
        self::assertEmpty($idx1->getOptions());
150

Sergei Morozov's avatar
Sergei Morozov committed
151
        $idx2 = $this->createIndex(false, false, ['where' => 'name IS NULL']);
152 153 154 155
        self::assertTrue($idx2->hasOption('where'));
        self::assertTrue($idx2->hasOption('WHERE'));
        self::assertSame('name IS NULL', $idx2->getOption('where'));
        self::assertSame('name IS NULL', $idx2->getOption('WHERE'));
Sergei Morozov's avatar
Sergei Morozov committed
156
        self::assertSame(['where' => 'name IS NULL'], $idx2->getOptions());
157
    }
158
}