Commit 4dd96a7d authored by Benjamin Eberlei's avatar Benjamin Eberlei

Fix SQL Platform/Schema Manager problems.

parent 624ca843
...@@ -22,7 +22,7 @@ to SQLServerSchemaManager. ...@@ -22,7 +22,7 @@ to SQLServerSchemaManager.
## Cleanup SQLServer Platform version mess ## Cleanup SQLServer Platform version mess
DBAL 2.1 and before were actually only compatible to SQL Server 2008, not earlier versions. DBAL 2.1 and before were actually only compatible to SQL Server 2008, not earlier versions.
Still other parts of the platform did use old features instead of newly introced datatypes Still other parts of the platform did use old features instead of newly introduced datatypes
in SQL Server 2005. Starting with DBAL 2.2 you can pick the Doctrine abstraction exactly in SQL Server 2005. Starting with DBAL 2.2 you can pick the Doctrine abstraction exactly
matching your SQL Server version. matching your SQL Server version.
......
...@@ -63,7 +63,7 @@ class Driver implements \Doctrine\DBAL\Driver ...@@ -63,7 +63,7 @@ class Driver implements \Doctrine\DBAL\Driver
public function getDatabasePlatform() public function getDatabasePlatform()
{ {
return new \Doctrine\DBAL\Platforms\SQLServer2005Platform(); return new \Doctrine\DBAL\Platforms\SQLServer2008Platform();
} }
public function getSchemaManager(\Doctrine\DBAL\Connection $conn) public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
......
...@@ -35,37 +35,18 @@ namespace Doctrine\DBAL\Platforms; ...@@ -35,37 +35,18 @@ namespace Doctrine\DBAL\Platforms;
*/ */
class SQLServer2005Platform extends SQLServerPlatform class SQLServer2005Platform extends SQLServerPlatform
{ {
public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
{
// 3 - microseconds precision length
// http://msdn.microsoft.com/en-us/library/ms187819.aspx
return 'DATETIME';
}
/** /**
* @override * @override
*/ */
public function getDateTimeFormatString() public function supportsLimitOffset()
{
return 'Y-m-d H:i:s.000';
}
/**
*/
protected function initializeDoctrineTypeMappings()
{ {
parent::initializeDoctrineTypeMappings(); return true;
$this->doctrineTypeMapping = array(
);
} }
/** /** @override */
* @override public function getClobTypeDeclarationSQL(array $field)
*/
public function supportsLimitOffset()
{ {
return true; return 'VARCHAR(MAX)';
} }
} }
...@@ -53,14 +53,38 @@ class SQLServer2008Platform extends SQLServer2005Platform ...@@ -53,14 +53,38 @@ class SQLServer2008Platform extends SQLServer2005Platform
return 'TIME(0)'; return 'TIME(0)';
} }
/**
* @override
*/
public function getDateTimeFormatString()
{
return 'Y-m-d H:i:s.u';
}
/**
* @override
*/
public function getDateFormatString()
{
return 'Y-m-d';
}
/**
* @override
*/
public function getTimeFormatString()
{
return 'H:i:s';
}
/** /**
* Adding Datetime2 Type * Adding Datetime2 Type
*/ */
protected function initializeDoctrineTypeMappings() protected function initializeDoctrineTypeMappings()
{ {
parent::initializeDoctrineTypeMappings(); parent::initializeDoctrineTypeMappings();
$this->doctrineTypeMapping = array( $this->doctrineTypeMapping['datetime2'] = 'datetime';
'datetime2' => 'datetime', $this->doctrineTypeMapping['date'] = 'date';
); $this->doctrineTypeMapping['time'] = 'time';
} }
} }
...@@ -710,7 +710,23 @@ class SQLServerPlatform extends AbstractPlatform ...@@ -710,7 +710,23 @@ class SQLServerPlatform extends AbstractPlatform
*/ */
public function getDateTimeFormatString() public function getDateTimeFormatString()
{ {
return 'Y-m-d H:i:s.u'; return 'Y-m-d H:i:s.000';
}
/**
* @override
*/
public function getDateFormatString()
{
return 'Y-m-d H:i:s.000';
}
/**
* @override
*/
public function getTimeFormatString()
{
return 'Y-m-d H:i:s.000';
} }
/** /**
...@@ -750,11 +766,9 @@ class SQLServerPlatform extends AbstractPlatform ...@@ -750,11 +766,9 @@ class SQLServerPlatform extends AbstractPlatform
'real' => 'float', 'real' => 'float',
'double' => 'float', 'double' => 'float',
'double precision' => 'float', 'double precision' => 'float',
'date' => 'date',
'datetimeoffset' => 'datetimetz', 'datetimeoffset' => 'datetimetz',
'smalldatetime' => 'datetime', 'smalldatetime' => 'datetime',
'datetime' => 'datetime', 'datetime' => 'datetime',
'time' => 'time',
'char' => 'string', 'char' => 'string',
'varchar' => 'string', 'varchar' => 'string',
'text' => 'text', 'text' => 'text',
......
...@@ -55,7 +55,7 @@ class SQLServerSchemaManager extends AbstractSchemaManager ...@@ -55,7 +55,7 @@ class SQLServerSchemaManager extends AbstractSchemaManager
$default = $tableColumn['COLUMN_DEF']; $default = $tableColumn['COLUMN_DEF'];
while ($default != ($default2 = preg_replace("/^\((.*)\)$/", '$1', $default))) { while ($default != ($default2 = preg_replace("/^\((.*)\)$/", '$1', $default))) {
$default = $default2; $default = trim($default2, "'");
} }
$length = (int) $tableColumn['LENGTH']; $length = (int) $tableColumn['LENGTH'];
......
...@@ -6,5 +6,8 @@ use Doctrine\DBAL\Schema; ...@@ -6,5 +6,8 @@ use Doctrine\DBAL\Schema;
class SQLServerSchemaManagerTest extends SchemaManagerFunctionalTestCase class SQLServerSchemaManagerTest extends SchemaManagerFunctionalTestCase
{ {
protected function getPlatformName()
{
return "mssql";
}
} }
...@@ -17,17 +17,23 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest ...@@ -17,17 +17,23 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
*/ */
protected $_sm; protected $_sm;
protected function setUp() protected function getPlatformName()
{ {
parent::setUp();
$class = get_class($this); $class = get_class($this);
$e = explode('\\', $class); $e = explode('\\', $class);
$testClass = end($e); $testClass = end($e);
$dbms = strtolower(str_replace('SchemaManagerTest', null, $testClass)); $dbms = strtolower(str_replace('SchemaManagerTest', null, $testClass));
return $dbms;
}
protected function setUp()
{
parent::setUp();
$dbms = $this->getPlatformName();
if ($this->_conn->getDatabasePlatform()->getName() !== $dbms) { if ($this->_conn->getDatabasePlatform()->getName() !== $dbms) {
$this->markTestSkipped('The ' . $testClass .' requires the use of ' . $dbms); $this->markTestSkipped(get_class($this) . ' requires the use of ' . $dbms);
} }
$this->_sm = $this->_conn->getSchemaManager(); $this->_sm = $this->_conn->getSchemaManager();
......
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