SQLAnywhere12PlatformTest.php 4.57 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(
Sergei Morozov's avatar
Sergei Morozov committed
86 87
            'CREATE VIRTUAL UNIQUE CLUSTERED INDEX fooindex ON footable (a, b)'
                . ' WITH NULLS NOT DISTINCT FOR OLAP WORKLOAD',
Sergei Morozov's avatar
Sergei Morozov committed
88
            $this->platform->getCreateIndexSQL(
89 90
                new Index(
                    'fooindex',
Sergei Morozov's avatar
Sergei Morozov committed
91
                    ['a', 'b'],
92 93
                    true,
                    false,
Sergei Morozov's avatar
Sergei Morozov committed
94
                    ['virtual', 'clustered', 'with_nulls_not_distinct', 'for_olap_workload']
95 96 97 98
                ),
                'footable'
            )
        );
99
        self::assertEquals(
100
            'CREATE VIRTUAL CLUSTERED INDEX fooindex ON footable (a, b) FOR OLAP WORKLOAD',
Sergei Morozov's avatar
Sergei Morozov committed
101
            $this->platform->getCreateIndexSQL(
102 103
                new Index(
                    'fooindex',
Sergei Morozov's avatar
Sergei Morozov committed
104
                    ['a', 'b'],
105 106
                    false,
                    false,
Sergei Morozov's avatar
Sergei Morozov committed
107
                    ['virtual', 'clustered', 'with_nulls_not_distinct', 'for_olap_workload']
108 109 110 111
                ),
                'footable'
            )
        );
112 113

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

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