From 25c95885921d6fd1fbc723912227987e4dd73cc2 Mon Sep 17 00:00:00 2001 From: beberlei Date: Wed, 2 Dec 2009 19:07:38 +0000 Subject: [PATCH] [2.0] DDC-169 - Changed AbstractPlatform and AbstractSchemaManager and children to accept Sequences in their create and get sql methods. --- .../DBAL/Platforms/AbstractPlatform.php | 7 ++----- lib/Doctrine/DBAL/Platforms/OraclePlatform.php | 17 +++++++++-------- .../DBAL/Platforms/PostgreSqlPlatform.php | 15 ++++++++------- .../DBAL/Schema/AbstractSchemaManager.php | 8 +++----- .../Schema/Visitor/CreateSchemaSqlCollector.php | 8 ++------ .../Schema/SchemaManagerFunctionalTestCase.php | 3 ++- .../DBAL/Platforms/PostgreSqlPlatformTest.php | 3 ++- 7 files changed, 28 insertions(+), 33 deletions(-) diff --git a/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php b/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php index 8fb83ed02..2069eb7b3 100644 --- a/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php +++ b/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php @@ -598,13 +598,10 @@ abstract class AbstractPlatform /** * Gets the SQL to create a sequence on this platform. * - * @param string $sequenceName - * @param integer $start - * @param integer $allocationSize - * @return string + * @param \Doctrine\DBAL\Schema\Sequence $sequence * @throws DoctrineException */ - public function getCreateSequenceSql($sequenceName, $start = 1, $allocationSize = 1) + public function getCreateSequenceSql(\Doctrine\DBAL\Schema\Sequence $sequence) { throw DBALException::notSupported(__METHOD__); } diff --git a/lib/Doctrine/DBAL/Platforms/OraclePlatform.php b/lib/Doctrine/DBAL/Platforms/OraclePlatform.php index 8a9e21357..291d09160 100644 --- a/lib/Doctrine/DBAL/Platforms/OraclePlatform.php +++ b/lib/Doctrine/DBAL/Platforms/OraclePlatform.php @@ -110,15 +110,15 @@ class OraclePlatform extends AbstractPlatform * Therefore we can use MINVALUE to be able to get a hint what START WITH was for later introspection * in {@see listSequences()} * - * @param string $sequenceName - * @param integer $start - * @param integer $allocationSize - * @return string The SQL. + * @param \Doctrine\DBAL\Schema\Sequence $sequence + * @throws DoctrineException */ - public function getCreateSequenceSql($sequenceName, $start = 1, $allocationSize = 1) + public function getCreateSequenceSql(\Doctrine\DBAL\Schema\Sequence $sequence) { - return 'CREATE SEQUENCE ' . $sequenceName - . ' START WITH ' . $start . ' MINVALUE ' . $start . ' INCREMENT BY ' . $allocationSize; + return 'CREATE SEQUENCE ' . $sequence->getName() . + ' START WITH ' . $sequence->getInitialValue() . + ' MINVALUE ' . $sequence->getInitialValue() . + ' INCREMENT BY ' . $sequence->getAllocationSize(); } /** @@ -366,7 +366,8 @@ BEGIN END;'; $sequenceName = $table . '_SEQ'; - $sql[] = $this->getCreateSequenceSql($sequenceName, $start); + $sequence = new \Doctrine\DBAL\Schema\Sequence($sequenceName, $start); + $sql[] = $this->getCreateSequenceSql($sequence); $triggerName = $table . '_AI_PK'; $sql[] = 'CREATE TRIGGER ' . $triggerName . ' diff --git a/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php b/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php index fd6dfcd52..0cc3c2ac3 100644 --- a/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php +++ b/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php @@ -559,15 +559,16 @@ class PostgreSqlPlatform extends AbstractPlatform } /** - * {@inheritdoc} - * - * @return string - * @override + * Gets the SQL to create a sequence on this platform. + * + * @param \Doctrine\DBAL\Schema\Sequence $sequence + * @throws DoctrineException */ - public function getCreateSequenceSql($sequenceName, $start = 1, $allocationSize = 1) + public function getCreateSequenceSql(\Doctrine\DBAL\Schema\Sequence $sequence) { - return 'CREATE SEQUENCE ' . $sequenceName - . ' INCREMENT BY ' . $allocationSize . ' START ' . $start; + return 'CREATE SEQUENCE ' . $sequence->getName() . + ' INCREMENT BY ' . $sequence->getAllocationSize() . + ' START ' . $sequence->getInitialValue(); } /** diff --git a/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php b/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php index e9dc0a5fd..681c0d8e7 100644 --- a/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php +++ b/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php @@ -418,14 +418,12 @@ abstract class AbstractSchemaManager /** * Create a new sequence * - * @param string $seqName name of the sequence to be created - * @param string $start start value of the sequence; default is 1 - * @param array $allocationSize The size to allocate for sequence + * @param Sequence $sequence * @throws Doctrine\DBAL\ConnectionException if something fails at database level */ - public function createSequence($seqName, $start = 1, $allocationSize = 1) + public function createSequence($sequence) { - $this->_execSql($this->_platform->getCreateSequenceSql($seqName, $start, $allocationSize)); + $this->_execSql($this->_platform->getCreateSequenceSql($sequence)); } /** diff --git a/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php b/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php index e5ddae2fb..aa6957b29 100644 --- a/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php +++ b/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php @@ -123,12 +123,8 @@ class CreateSchemaSqlCollector implements Visitor */ public function acceptSequence(Sequence $sequence) { - $this->_createSequenceQueries = array_merge($this->_createSequenceQueries, - (array)$this->_platform->getCreateSequenceSql( - $sequence->getName(), - $sequence->getInitialValue(), - $sequence->getAllocationSize() - ) + $this->_createSequenceQueries = array_merge( + $this->_createSequenceQueries, (array)$this->_platform->getCreateSequenceSql($sequence) ); } diff --git a/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php b/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php index 3cd3124a1..118f17d21 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php @@ -14,7 +14,8 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest $this->markTestSkipped($this->_conn->getDriver()->getName().' does not support sequences.'); } - $this->_sm->createSequence('list_sequences_test_seq', 10, 20); + $sequence = new \Doctrine\DBAL\Schema\Sequence('list_sequences_test_seq', 20, 10); + $this->_sm->createSequence($sequence); $sequences = $this->_sm->listSequences(); diff --git a/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php b/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php index 3104c0623..048092fff 100644 --- a/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php +++ b/tests/Doctrine/Tests/DBAL/Platforms/PostgreSqlPlatformTest.php @@ -143,9 +143,10 @@ class PostgreSqlPlatformTest extends AbstractPlatformTestCase public function testGeneratesSequenceSqlCommands() { + $sequence = new \Doctrine\DBAL\Schema\Sequence('myseq', 20, 1); $this->assertEquals( 'CREATE SEQUENCE myseq INCREMENT BY 20 START 1', - $this->_platform->getCreateSequenceSql('myseq', 1, 20) + $this->_platform->getCreateSequenceSql($sequence) ); $this->assertEquals( 'DROP SEQUENCE myseq',