2009-05-26 22:14:19 +04:00
< ? php
namespace Doctrine\Tests\DBAL\Platforms ;
use Doctrine\DBAL\Platforms\MsSqlPlatform ;
use Doctrine\DBAL\Types\Type ;
require_once __DIR__ . '/../../TestInit.php' ;
2009-12-02 21:52:21 +03:00
class MsSqlPlatformTest extends AbstractPlatformTestCase
2009-05-26 22:14:19 +04:00
{
2009-12-02 21:52:21 +03:00
public function createPlatform ()
2009-05-26 22:14:19 +04:00
{
2009-12-02 21:52:21 +03:00
return new MsSqlPlatform ;
2009-05-26 22:14:19 +04:00
}
2009-12-02 21:52:21 +03:00
public function getGenerateTableSql ()
2009-05-26 22:14:19 +04:00
{
2009-12-02 21:52:21 +03:00
return 'CREATE TABLE test (id INT AUTO_INCREMENT NOT NULL, test VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))' ;
2009-05-26 22:14:19 +04:00
}
2009-12-11 02:55:47 +03:00
public function getGenerateTableWithMultiColumnUniqueIndexSql ()
{
return array (
'CREATE TABLE test (foo VARCHAR(255) DEFAULT NULL, bar VARCHAR(255) DEFAULT NULL, UNIQUE INDEX test_foo_bar_uniq (foo, bar))'
);
}
2009-12-06 02:06:29 +03:00
public function getGenerateAlterTableSql ()
2009-05-26 22:14:19 +04:00
{
2009-12-06 02:06:29 +03:00
return array (
2009-12-06 15:13:15 +03:00
" ALTER TABLE mytable RENAME TO userlist, ADD quota INT DEFAULT NULL, DROP foo, CHANGE bar baz VARCHAR(255) DEFAULT 'def' NOT NULL "
2009-05-26 22:14:19 +04:00
);
}
2009-07-07 16:00:22 +04:00
public function testGeneratesSqlSnippets ()
2009-05-26 22:14:19 +04:00
{
2009-07-07 16:00:22 +04:00
$this -> assertEquals ( 'RLIKE' , $this -> _platform -> getRegexpExpression (), 'Regular expression operator is not correct' );
2009-08-11 14:51:38 +04:00
$this -> assertEquals ( '"' , $this -> _platform -> getIdentifierQuoteCharacter (), 'Identifier quote character is not correct' );
2009-07-07 16:00:22 +04:00
$this -> assertEquals ( '(column1 + column2 + column3)' , $this -> _platform -> getConcatExpression ( 'column1' , 'column2' , 'column3' ), 'Concatenation expression is not correct' );
2009-05-26 22:14:19 +04:00
}
2009-07-07 16:00:22 +04:00
public function testGeneratesTransactionsCommands ()
2009-05-26 22:14:19 +04:00
{
$this -> assertEquals (
'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED' ,
2010-04-30 05:46:51 +04:00
$this -> _platform -> getSetTransactionIsolationSQL ( \Doctrine\DBAL\Transaction :: READ_UNCOMMITTED )
2009-05-26 22:14:19 +04:00
);
$this -> assertEquals (
'SET TRANSACTION ISOLATION LEVEL READ COMMITTED' ,
2010-04-30 05:46:51 +04:00
$this -> _platform -> getSetTransactionIsolationSQL ( \Doctrine\DBAL\Transaction :: READ_COMMITTED )
2009-05-26 22:14:19 +04:00
);
$this -> assertEquals (
'SET TRANSACTION ISOLATION LEVEL REPEATABLE READ' ,
2010-04-30 05:46:51 +04:00
$this -> _platform -> getSetTransactionIsolationSQL ( \Doctrine\DBAL\Transaction :: REPEATABLE_READ )
2009-05-26 22:14:19 +04:00
);
$this -> assertEquals (
'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE' ,
2010-04-30 05:46:51 +04:00
$this -> _platform -> getSetTransactionIsolationSQL ( \Doctrine\DBAL\Transaction :: SERIALIZABLE )
2009-05-26 22:14:19 +04:00
);
}
2009-07-07 16:00:22 +04:00
public function testGeneratesDDLSnippets ()
2009-05-26 22:14:19 +04:00
{
2010-03-05 19:35:00 +03:00
$this -> assertEquals ( 'SHOW DATABASES' , $this -> _platform -> getShowDatabasesSQL ());
$this -> assertEquals ( 'CREATE DATABASE foobar' , $this -> _platform -> getCreateDatabaseSQL ( 'foobar' ));
$this -> assertEquals ( 'DROP DATABASE foobar' , $this -> _platform -> getDropDatabaseSQL ( 'foobar' ));
$this -> assertEquals ( 'DROP TABLE foobar' , $this -> _platform -> getDropTableSQL ( 'foobar' ));
2009-05-26 22:14:19 +04:00
}
2009-07-07 16:00:22 +04:00
public function testGeneratesTypeDeclarationForIntegers ()
2009-05-26 22:14:19 +04:00
{
$this -> assertEquals (
'INT' ,
2010-03-05 19:35:00 +03:00
$this -> _platform -> getIntegerTypeDeclarationSQL ( array ())
2009-05-26 22:14:19 +04:00
);
$this -> assertEquals (
'INT AUTO_INCREMENT' ,
2010-03-05 19:35:00 +03:00
$this -> _platform -> getIntegerTypeDeclarationSQL ( array ( 'autoincrement' => true )
2009-05-26 22:14:19 +04:00
));
$this -> assertEquals (
'INT AUTO_INCREMENT' ,
2010-03-05 19:35:00 +03:00
$this -> _platform -> getIntegerTypeDeclarationSQL (
2009-05-26 22:14:19 +04:00
array ( 'autoincrement' => true , 'primary' => true )
));
2009-07-07 16:00:22 +04:00
}
public function testGeneratesTypeDeclarationsForStrings ()
{
2009-05-26 22:14:19 +04:00
$this -> assertEquals (
'CHAR(10)' ,
2010-03-05 19:35:00 +03:00
$this -> _platform -> getVarcharTypeDeclarationSQL (
2009-05-26 22:14:19 +04:00
array ( 'length' => 10 , 'fixed' => true )
));
$this -> assertEquals (
'VARCHAR(50)' ,
2010-03-05 19:35:00 +03:00
$this -> _platform -> getVarcharTypeDeclarationSQL ( array ( 'length' => 50 )),
2009-07-07 16:00:22 +04:00
'Variable string declaration is not correct'
2009-05-26 22:14:19 +04:00
);
$this -> assertEquals (
'TEXT' ,
2010-03-05 19:35:00 +03:00
$this -> _platform -> getVarcharTypeDeclarationSQL ( array ()),
2009-07-07 16:00:22 +04:00
'Long string declaration is not correct'
2009-05-26 22:14:19 +04:00
);
}
2009-07-07 16:00:22 +04:00
public function testPrefersIdentityColumns ()
2009-05-26 22:14:19 +04:00
{
$this -> assertTrue ( $this -> _platform -> prefersIdentityColumns ());
2009-07-07 16:00:22 +04:00
}
public function testSupportsIdentityColumns ()
{
2009-05-26 22:14:19 +04:00
$this -> assertTrue ( $this -> _platform -> supportsIdentityColumns ());
}
2009-07-07 16:00:22 +04:00
public function testDoesNotSupportSavePoints ()
{
$this -> assertFalse ( $this -> _platform -> supportsSavepoints ());
}
2009-12-02 21:52:21 +03:00
public function getGenerateIndexSql ()
2009-07-07 16:00:22 +04:00
{
2009-12-02 21:52:21 +03:00
return 'CREATE INDEX my_idx ON mytable (user_name, last_login)' ;
2009-07-07 16:00:22 +04:00
}
2009-12-02 21:52:21 +03:00
public function getGenerateUniqueIndexSql ()
2009-05-26 22:14:19 +04:00
{
2009-12-02 21:52:21 +03:00
return 'CREATE UNIQUE INDEX index_name ON test (test, test2)' ;
2009-05-26 22:14:19 +04:00
}
2009-12-02 21:52:21 +03:00
public function getGenerateForeignKeySql ()
2009-05-26 22:14:19 +04:00
{
2009-12-02 21:52:21 +03:00
return 'ALTER TABLE test ADD FOREIGN KEY (fk_name_id) REFERENCES other_table(id)' ;
2009-05-26 22:14:19 +04:00
}
2009-07-14 02:59:36 +04:00
public function testModifyLimitQuery ()
{
$sql = $this -> _platform -> modifyLimitQuery ( 'SELECT * FROM user' , 10 , 0 );
$this -> assertEquals ( 'SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user) AS inner_tbl) AS outer_tbl' , $sql );
}
public function testModifyLimitQueryWithEmptyOffset ()
{
$sql = $this -> _platform -> modifyLimitQuery ( 'SELECT * FROM user' , 10 );
$this -> assertEquals ( 'SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user) AS inner_tbl) AS outer_tbl' , $sql );
}
public function testModifyLimitQueryWithAscOrderBy ()
{
$sql = $this -> _platform -> modifyLimitQuery ( 'SELECT * FROM user ORDER BY username ASC' , 10 );
$this -> assertEquals ( 'SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user ORDER BY username ASC) AS inner_tbl ORDER BY inner_tbl.u DESC) AS outer_tbl ORDER BY outer_tbl.u ASC' , $sql );
}
public function testModifyLimitQueryWithDescOrderBy ()
{
$sql = $this -> _platform -> modifyLimitQuery ( 'SELECT * FROM user ORDER BY username DESC' , 10 );
$this -> assertEquals ( 'SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM user ORDER BY username DESC) AS inner_tbl ORDER BY inner_tbl.u ASC) AS outer_tbl ORDER BY outer_tbl.u DESC' , $sql );
}
}