Commit c878bd03 authored by Benjamin Eberlei's avatar Benjamin Eberlei

Fix SQL Platform/Schema Manager problems.

parent b6a4eca7
...@@ -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,31 +35,6 @@ namespace Doctrine\DBAL\Platforms; ...@@ -35,31 +35,6 @@ 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
*/
public function getDateTimeFormatString()
{
return 'Y-m-d H:i:s.000';
}
/**
*/
protected function initializeDoctrineTypeMappings()
{
parent::initializeDoctrineTypeMappings();
$this->doctrineTypeMapping = array(
);
}
/** /**
* @override * @override
*/ */
...@@ -67,5 +42,11 @@ class SQLServer2005Platform extends SQLServerPlatform ...@@ -67,5 +42,11 @@ class SQLServer2005Platform extends SQLServerPlatform
{ {
return true; return true;
} }
/** @override */
public function getClobTypeDeclarationSQL(array $field)
{
return 'VARCHAR(MAX)';
}
} }
...@@ -52,6 +52,30 @@ class SQLServer2008Platform extends SQLServer2005Platform ...@@ -52,6 +52,30 @@ 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
...@@ -59,8 +83,8 @@ class SQLServer2008Platform extends SQLServer2005Platform ...@@ -59,8 +83,8 @@ class SQLServer2008Platform extends SQLServer2005Platform
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',
......
...@@ -56,7 +56,7 @@ class SQLServerSchemaManager extends AbstractSchemaManager ...@@ -56,7 +56,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";
}
} }
...@@ -16,18 +16,24 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest ...@@ -16,18 +16,24 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
* @var \Doctrine\DBAL\Schema\AbstractSchemaManager * @var \Doctrine\DBAL\Schema\AbstractSchemaManager
*/ */
protected $_sm; protected $_sm;
protected function getPlatformName()
{
$class = get_class($this);
$e = explode('\\', $class);
$testClass = end($e);
$dbms = strtolower(str_replace('SchemaManagerTest', null, $testClass));
return $dbms;
}
protected function setUp() protected function setUp()
{ {
parent::setUp(); parent::setUp();
$class = get_class($this); $dbms = $this->getPlatformName();
$e = explode('\\', $class);
$testClass = end($e);
$dbms = strtolower(str_replace('SchemaManagerTest', null, $testClass));
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