Commit 56e8e095 authored by Steve Müller's avatar Steve Müller

add SQL Anywhere 16 platform

parent acb36036
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license. For more information, see
* <http://www.doctrine-project.org>.
*/
namespace Doctrine\DBAL\Platforms\Keywords;
/**
* SAP Sybase SQL Anywhere 16 reserved keywords list.
*
* @author Steve Müller <st.mueller@dzh-online.de>
*/
class SQLAnywhere16Keywords extends SQLAnywhere12Keywords
{
/**
* {@inheritdoc}
*/
public function getName()
{
return 'SQLAnywhere16';
}
/**
* {@inheritdoc}
*
* @link http://dcx.sybase.com/index.html#sa160/en/dbreference/alhakeywords.html
*/
protected function getKeywords()
{
return array_merge(parent::getKeywords(), array(
'ARRAY',
'JSON',
'ROW',
'ROWTYPE',
'UNNEST',
'VARRAY'
));
}
}
\ No newline at end of file
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license. For more information, see
* <http://www.doctrine-project.org>.
*/
namespace Doctrine\DBAL\Platforms;
use Doctrine\Common\Proxy\Exception\UnexpectedValueException;
use Doctrine\DBAL\Schema\Index;
/**
* The SQLAnywhere16Platform provides the behavior, features and SQL dialect of the
* SAP Sybase SQL Anywhere 16 database platform.
*
* @author Steve Müller <st.mueller@dzh-online.de>
* @link www.doctrine-project.org
* @since 2.5
*/
class SQLAnywhere16Platform extends SQLAnywhere12Platform
{
/**
* {@inheritdoc}
*/
protected function getAdvancedIndexOptionsSQL(Index $index)
{
if ($index->hasFlag('with_nulls_distinct') && $index->hasFlag('with_nulls_not_distinct')) {
throw new UnexpectedValueException(
'An Index can have either have a "with_nulls_distinct" or "with_nulls_not_distinct" flag but not both.'
);
}
$sql = '';
if (!$index->isPrimary() && $index->isUnique() && $index->hasFlag('with_nulls_distinct')) {
$sql .= ' WITH NULLS DISTINCT';
}
return $sql . parent::getAdvancedIndexOptionsSQL($index);
}
/**
* {@inheritdoc}
*/
protected function getReservedKeywordsClass()
{
return 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhere16Keywords';
}
}
...@@ -43,7 +43,8 @@ class ReservedWordsCommand extends Command ...@@ -43,7 +43,8 @@ class ReservedWordsCommand extends Command
'db2' => 'Doctrine\DBAL\Platforms\Keywords\DB2Keywords', 'db2' => 'Doctrine\DBAL\Platforms\Keywords\DB2Keywords',
'sqlanywhere' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhereKeywords', 'sqlanywhere' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhereKeywords',
'sqlanywhere11' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhere11Keywords', 'sqlanywhere11' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhere11Keywords',
'sqlanywhere12' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhere12Keywords' 'sqlanywhere12' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhere12Keywords',
'sqlanywhere16' => 'Doctrine\DBAL\Platforms\Keywords\SQLAnywhere16Keywords',
); );
/** /**
...@@ -99,6 +100,7 @@ The following keyword lists are currently shipped with Doctrine: ...@@ -99,6 +100,7 @@ The following keyword lists are currently shipped with Doctrine:
* sqlanywhere * sqlanywhere
* sqlanywhere11 * sqlanywhere11
* sqlanywhere12 * sqlanywhere12
* sqlanywhere16
* db2 (Not checked by default) * db2 (Not checked by default)
EOT EOT
); );
...@@ -126,6 +128,7 @@ EOT ...@@ -126,6 +128,7 @@ EOT
'sqlanywhere', 'sqlanywhere',
'sqlanywhere11', 'sqlanywhere11',
'sqlanywhere12', 'sqlanywhere12',
'sqlanywhere16',
); );
} }
......
<?php
namespace Doctrine\Tests\DBAL\Platforms;
use Doctrine\DBAL\Platforms\SQLAnywhere16Platform;
use Doctrine\DBAL\Schema\Index;
use Doctrine\DBAL\Schema\Sequence;
class SQLAnywhere16PlatformTest extends SQLAnywhere12PlatformTest
{
public function createPlatform()
{
return new SQLAnywhere16Platform;
}
public function testGeneratesCreateIndexWithAdvancedPlatformOptionsSQL()
{
$this->assertEquals(
'CREATE UNIQUE INDEX fooindex ON footable (a, b) WITH NULLS DISTINCT',
$this->_platform->getCreateIndexSQL(
new Index(
'fooindex',
array('a', 'b'),
true,
false,
array('with_nulls_distinct')
),
'footable'
)
);
// WITH NULLS DISTINCT clause not available on primary indexes.
$this->assertEquals(
'ALTER TABLE footable ADD PRIMARY KEY (a, b)',
$this->_platform->getCreateIndexSQL(
new Index(
'fooindex',
array('a', 'b'),
false,
true,
array('with_nulls_distinct')
),
'footable'
)
);
// WITH NULLS DISTINCT clause not available on non-unique indexes.
$this->assertEquals(
'CREATE INDEX fooindex ON footable (a, b)',
$this->_platform->getCreateIndexSQL(
new Index(
'fooindex',
array('a', 'b'),
false,
false,
array('with_nulls_distinct')
),
'footable'
)
);
parent::testGeneratesCreateIndexWithAdvancedPlatformOptionsSQL();
}
public function testThrowsExceptionOnInvalidWithNullsNotDistinctIndexOptions()
{
$this->setExpectedException('UnexpectedValueException');
$this->_platform->getCreateIndexSQL(
new Index(
'fooindex',
array('a', 'b'),
false,
false,
array('with_nulls_distinct', 'with_nulls_not_distinct')
),
'footable'
);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment