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

Fix SQL Platform/Schema Manager problems.

parent 624ca843
......@@ -22,7 +22,7 @@ to SQLServerSchemaManager.
## Cleanup SQLServer Platform version mess
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
matching your SQL Server version.
......
......@@ -63,7 +63,7 @@ class Driver implements \Doctrine\DBAL\Driver
public function getDatabasePlatform()
{
return new \Doctrine\DBAL\Platforms\SQLServer2005Platform();
return new \Doctrine\DBAL\Platforms\SQLServer2008Platform();
}
public function getSchemaManager(\Doctrine\DBAL\Connection $conn)
......
......@@ -35,31 +35,6 @@ namespace Doctrine\DBAL\Platforms;
*/
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
*/
......@@ -67,5 +42,11 @@ class SQLServer2005Platform extends SQLServerPlatform
{
return true;
}
/** @override */
public function getClobTypeDeclarationSQL(array $field)
{
return 'VARCHAR(MAX)';
}
}
......@@ -52,6 +52,30 @@ class SQLServer2008Platform extends SQLServer2005Platform
{
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
......@@ -59,8 +83,8 @@ class SQLServer2008Platform extends SQLServer2005Platform
protected function initializeDoctrineTypeMappings()
{
parent::initializeDoctrineTypeMappings();
$this->doctrineTypeMapping = array(
'datetime2' => 'datetime',
);
$this->doctrineTypeMapping['datetime2'] = 'datetime';
$this->doctrineTypeMapping['date'] = 'date';
$this->doctrineTypeMapping['time'] = 'time';
}
}
......@@ -710,7 +710,23 @@ class SQLServerPlatform extends AbstractPlatform
*/
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
'real' => 'float',
'double' => 'float',
'double precision' => 'float',
'date' => 'date',
'datetimeoffset' => 'datetimetz',
'smalldatetime' => 'datetime',
'datetime' => 'datetime',
'time' => 'time',
'char' => 'string',
'varchar' => 'string',
'text' => 'text',
......
......@@ -55,7 +55,7 @@ class SQLServerSchemaManager extends AbstractSchemaManager
$default = $tableColumn['COLUMN_DEF'];
while ($default != ($default2 = preg_replace("/^\((.*)\)$/", '$1', $default))) {
$default = $default2;
$default = trim($default2, "'");
}
$length = (int) $tableColumn['LENGTH'];
......
......@@ -6,5 +6,8 @@ use Doctrine\DBAL\Schema;
class SQLServerSchemaManagerTest extends SchemaManagerFunctionalTestCase
{
protected function getPlatformName()
{
return "mssql";
}
}
......@@ -16,18 +16,24 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
* @var \Doctrine\DBAL\Schema\AbstractSchemaManager
*/
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()
{
parent::setUp();
$class = get_class($this);
$e = explode('\\', $class);
$testClass = end($e);
$dbms = strtolower(str_replace('SchemaManagerTest', null, $testClass));
$dbms = $this->getPlatformName();
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();
......
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