SQLAnywhere12PlatformTest.php 4.54 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\Tests\DBAL\Platforms;

5
use Doctrine\DBAL\Platforms\AbstractPlatform;
6 7 8 9 10 11
use Doctrine\DBAL\Platforms\SQLAnywhere12Platform;
use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\Sequence;

class SQLAnywhere12PlatformTest extends SQLAnywhere11PlatformTest
{
Sergei Morozov's avatar
Sergei Morozov committed
12
    /** @var SQLAnywhere12Platform */
Sergei Morozov's avatar
Sergei Morozov committed
13
    protected $platform;
14

15
    public function createPlatform(): AbstractPlatform
16
    {
Sergei Morozov's avatar
Sergei Morozov committed
17
        return new SQLAnywhere12Platform();
18 19
    }

20
    public function testDoesNotSupportSequences(): void
21 22 23 24
    {
        $this->markTestSkipped('This version of the platform now supports sequences.');
    }

25
    public function testSupportsSequences(): void
26
    {
Sergei Morozov's avatar
Sergei Morozov committed
27
        self::assertTrue($this->platform->supportsSequences());
28 29
    }

30
    public function testGeneratesSequenceSqlCommands(): void
31 32
    {
        $sequence = new Sequence('myseq', 20, 1);
33
        self::assertEquals(
34
            'CREATE SEQUENCE myseq INCREMENT BY 20 START WITH 1 MINVALUE 1',
Sergei Morozov's avatar
Sergei Morozov committed
35
            $this->platform->getCreateSequenceSQL($sequence)
36
        );
37
        self::assertEquals(
38
            'ALTER SEQUENCE myseq INCREMENT BY 20',
Sergei Morozov's avatar
Sergei Morozov committed
39
            $this->platform->getAlterSequenceSQL($sequence)
40
        );
41
        self::assertEquals(
42
            'DROP SEQUENCE myseq',
Sergei Morozov's avatar
Sergei Morozov committed
43
            $this->platform->getDropSequenceSQL('myseq')
44
        );
45
        self::assertEquals(
46
            'DROP SEQUENCE myseq',
Sergei Morozov's avatar
Sergei Morozov committed
47
            $this->platform->getDropSequenceSQL($sequence)
48
        );
49
        self::assertEquals(
Sergei Morozov's avatar
Sergei Morozov committed
50
            'SELECT myseq.NEXTVAL',
Sergei Morozov's avatar
Sergei Morozov committed
51
            $this->platform->getSequenceNextValSQL('myseq')
52
        );
53
        self::assertEquals(
54
            'SELECT sequence_name, increment_by, start_with, min_value FROM SYS.SYSSEQUENCE',
55
            $this->platform->getListSequencesSQL('')
56 57 58
        );
    }

59
    public function testGeneratesDateTimeTzColumnTypeDeclarationSQL(): void
60
    {
61
        self::assertEquals(
62
            'TIMESTAMP WITH TIME ZONE',
Sergei Morozov's avatar
Sergei Morozov committed
63
            $this->platform->getDateTimeTzTypeDeclarationSQL([
64 65 66
                'length' => 10,
                'fixed' => true,
                'unsigned' => true,
Sergei Morozov's avatar
Sergei Morozov committed
67 68
                'autoincrement' => true,
            ])
69 70 71
        );
    }

72
    public function testHasCorrectDateTimeTzFormatString(): void
73
    {
Sergei Morozov's avatar
Sergei Morozov committed
74
        self::assertEquals('Y-m-d H:i:s.uP', $this->platform->getDateTimeTzFormatString());
75 76
    }

77
    public function testInitializesDateTimeTzTypeMapping(): void
78
    {
Sergei Morozov's avatar
Sergei Morozov committed
79 80
        self::assertTrue($this->platform->hasDoctrineTypeMappingFor('timestamp with time zone'));
        self::assertEquals('datetime', $this->platform->getDoctrineTypeMapping('timestamp with time zone'));
81 82
    }

83
    public function testGeneratesCreateIndexWithAdvancedPlatformOptionsSQL(): void
84
    {
85
        self::assertEquals(
86
            'CREATE VIRTUAL UNIQUE CLUSTERED INDEX fooindex ON footable (a, b) WITH NULLS NOT DISTINCT FOR OLAP WORKLOAD',
Sergei Morozov's avatar
Sergei Morozov committed
87
            $this->platform->getCreateIndexSQL(
88 89
                new Index(
                    'fooindex',
Sergei Morozov's avatar
Sergei Morozov committed
90
                    ['a', 'b'],
91 92
                    true,
                    false,
Sergei Morozov's avatar
Sergei Morozov committed
93
                    ['virtual', 'clustered', 'with_nulls_not_distinct', 'for_olap_workload']
94 95 96 97
                ),
                'footable'
            )
        );
98
        self::assertEquals(
99
            'CREATE VIRTUAL CLUSTERED INDEX fooindex ON footable (a, b) FOR OLAP WORKLOAD',
Sergei Morozov's avatar
Sergei Morozov committed
100
            $this->platform->getCreateIndexSQL(
101 102
                new Index(
                    'fooindex',
Sergei Morozov's avatar
Sergei Morozov committed
103
                    ['a', 'b'],
104 105
                    false,
                    false,
Sergei Morozov's avatar
Sergei Morozov committed
106
                    ['virtual', 'clustered', 'with_nulls_not_distinct', 'for_olap_workload']
107 108 109 110
                ),
                'footable'
            )
        );
111 112

        // WITH NULLS NOT DISTINCT clause not available on primary indexes.
113
        self::assertEquals(
114
            'ALTER TABLE footable ADD PRIMARY KEY (a, b)',
Sergei Morozov's avatar
Sergei Morozov committed
115
            $this->platform->getCreateIndexSQL(
116 117
                new Index(
                    'fooindex',
Sergei Morozov's avatar
Sergei Morozov committed
118
                    ['a', 'b'],
119 120
                    false,
                    true,
Sergei Morozov's avatar
Sergei Morozov committed
121
                    ['with_nulls_not_distinct']
122 123 124 125 126 127
                ),
                'footable'
            )
        );

        // WITH NULLS NOT DISTINCT clause not available on non-unique indexes.
128
        self::assertEquals(
129
            'CREATE INDEX fooindex ON footable (a, b)',
Sergei Morozov's avatar
Sergei Morozov committed
130
            $this->platform->getCreateIndexSQL(
131 132
                new Index(
                    'fooindex',
Sergei Morozov's avatar
Sergei Morozov committed
133
                    ['a', 'b'],
134 135
                    false,
                    false,
Sergei Morozov's avatar
Sergei Morozov committed
136
                    ['with_nulls_not_distinct']
137 138 139 140
                ),
                'footable'
            )
        );
141 142
    }
}