SQLAnywhere12PlatformTest.php 4.44 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
<?php

namespace Doctrine\Tests\DBAL\Platforms;

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
11
    /** @var SQLAnywhere12Platform */
Sergei Morozov's avatar
Sergei Morozov committed
12
    protected $platform;
13 14 15

    public function createPlatform()
    {
Sergei Morozov's avatar
Sergei Morozov committed
16
        return new SQLAnywhere12Platform();
17 18 19 20 21 22 23 24 25
    }

    public function testDoesNotSupportSequences()
    {
        $this->markTestSkipped('This version of the platform now supports sequences.');
    }

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

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

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

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

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

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

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

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