Author: dr
Date: Tue Aug 14 11:08:44 2007
New Revision: 5910
Log:
- Implemented feature #11047: Make ConvertToDDL() methods accept the database
name instead of only the database handler.
Modified:
trunk/DatabaseSchema/ChangeLog
trunk/DatabaseSchema/src/schema.php
trunk/DatabaseSchema/src/schema_diff.php
trunk/DatabaseSchema/tests/generic_diff_test.php
trunk/DatabaseSchema/tests/generic_test.php
Modified: trunk/DatabaseSchema/ChangeLog
==============================================================================
--- trunk/DatabaseSchema/ChangeLog [iso-8859-1] (original)
+++ trunk/DatabaseSchema/ChangeLog [iso-8859-1] Tue Aug 14 11:08:44 2007
@@ -1,3 +1,10 @@
+1.3alpha1 - [RELEASEDATE]
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Implemented feature #11047: Make ConvertToDDL() methods accept the database
+ name instead of only the database handler.
+
+
1.2 - Monday 02 July 2007
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Modified: trunk/DatabaseSchema/src/schema.php
==============================================================================
--- trunk/DatabaseSchema/src/schema.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/schema.php [iso-8859-1] Tue Aug 14 11:08:44 2007
@@ -209,17 +209,28 @@
}
/**
- * Returns the $db specific SQL queries that would create the tables
defined in the schema.
+ * Returns the $db specific SQL queries that would create the tables
+ * defined in the schema.
+ *
+ * The database type can be given as both a database handler (instanceof
+ * ezcDbHandler) or the name of the database as string as retrieved through
+ * calling getName() on the database handler object.
+ *
+ * @see ezcDbHandler::getName()
*
* @throws ezcDbSchemaInvalidWriterClassException if the handler associated
* with the $format is not a database schema writer.
*
- * @param ezcDbHandler $db
+ * @param string|ezcDbHandler $db
* @return array(string)
*/
- public function convertToDDL( ezcDbHandler $db )
- {
- $className = ezcDbSchemaHandlerManager::getWriterByFormat(
$db->getName() );
+ public function convertToDDL( $db )
+ {
+ if ( $db instanceof ezcDbHandler )
+ {
+ $db = $db->getName();
+ }
+ $className = ezcDbSchemaHandlerManager::getDiffWriterByFormat( $db );
$writer = new $className();
self::checkSchemaWriter( $writer, self::DATABASE );
return $writer->convertToDDL( $this );
Modified: trunk/DatabaseSchema/src/schema_diff.php
==============================================================================
--- trunk/DatabaseSchema/src/schema_diff.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/src/schema_diff.php [iso-8859-1] Tue Aug 14 11:08:44
2007
@@ -144,15 +144,25 @@
/**
* Returns the $db specific SQL queries that would update the database $db
*
+ * The database type can be given as both a database handler (instanceof
+ * ezcDbHandler) or the name of the database as string as retrieved through
+ * calling getName() on the database handler object.
+ *
+ * @see ezcDbHandler::getName()
+ *
* @throws ezcDbSchemaInvalidWriterClassException if the handler associated
* with the $format is not a database schema writer.
*
- * @param ezcDbHandler $db
+ * @param string|ezcDbHandler $db
* @return array(string)
*/
- public function convertToDDL( ezcDbHandler $db )
+ public function convertToDDL( $db )
{
- $className = ezcDbSchemaHandlerManager::getDiffWriterByFormat(
$db->getName() );
+ if ( $db instanceof ezcDbHandler )
+ {
+ $db = $db->getName();
+ }
+ $className = ezcDbSchemaHandlerManager::getDiffWriterByFormat( $db );
$writer = new $className();
self::checkSchemaDiffWriter( $writer, ezcDbSchema::DATABASE );
return $writer->convertDiffToDDL( $this );
Modified: trunk/DatabaseSchema/tests/generic_diff_test.php
==============================================================================
--- trunk/DatabaseSchema/tests/generic_diff_test.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/tests/generic_diff_test.php [iso-8859-1] Tue Aug 14
11:08:44 2007
@@ -202,6 +202,42 @@
$ddl = $schema->convertToDDL( $this->db );
self::assertEquals( $this->getDiffExpectations2(), $ddl );
+ }
+
+ public function testWrite2WithDbName()
+ {
+ $schema = self::getSchemaDiff2();
+ $ddl = $schema->convertToDDL( $this->db->getName() );
+
+ self::assertEquals( $this->getDiffExpectations2(), $ddl );
+ }
+
+ public function testWrite2WithUnknownDbName()
+ {
+ $schema = self::getSchemaDiff2();
+ try
+ {
+ $ddl = $schema->convertToDDL(
'hottentottententententoonstellingsterrijnen' );
+ self::fail( "Expected exception not thrown." );
+ }
+ catch ( ezcDbSchemaUnknownFormatException $e )
+ {
+ self::assertEquals( "There is no 'difference write' handler
available for the 'hottentottententententoonstellingsterrijnen' format.",
$e->getMessage() );
+ }
+ }
+
+ public function testWrite2WithBrokenDbName()
+ {
+ $schema = self::getSchemaDiff2();
+ try
+ {
+ $ddl = $schema->convertToDDL( 42 );
+ self::fail( "Expected exception not thrown." );
+ }
+ catch ( ezcDbSchemaUnknownFormatException $e )
+ {
+ self::assertEquals( "There is no 'difference write' handler
available for the '42' format.", $e->getMessage() );
+ }
}
public function testApply2()
Modified: trunk/DatabaseSchema/tests/generic_test.php
==============================================================================
--- trunk/DatabaseSchema/tests/generic_test.php [iso-8859-1] (original)
+++ trunk/DatabaseSchema/tests/generic_test.php [iso-8859-1] Tue Aug 14
11:08:44 2007
@@ -80,6 +80,63 @@
self::assertEquals( $newDDL1, $newDDL2 );
}
+ public function testXmlRoundTripWithDbName()
+ {
+ $fileNameOrig = realpath( $this->testFilesDir .
'webbuilder.schema.xml' );
+ $schema = ezcDbSchema::createFromFile( 'xml', $fileNameOrig );
+ $schema->writeToDb( $this->db );
+
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+ $newDDL1 = $newSchema->convertToDDL( $this->db->getName() );
+
+ // setup an empty schema to wipe out the db
+ $emptySchema = new ezcDbSchema( array() );
+ $diffToEmptySchema = ezcDbSchemaComparator::compareSchemas(
$newSchema, $emptySchema );
+ $diffToEmptySchema->applyToDb( $this->db );
+
+ $newSchema->writeToDb( $this->db );
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+ $newDDL2 = $newSchema->convertToDDL( $this->db->getName() );
+
+ self::assertEquals( $newDDL1, $newDDL2 );
+ }
+
+ public function testConvertToDDLWithUnknownDbName()
+ {
+ $fileNameOrig = realpath( $this->testFilesDir .
'webbuilder.schema.xml' );
+ $schema = ezcDbSchema::createFromFile( 'xml', $fileNameOrig );
+ $schema->writeToDb( $this->db );
+
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+ try
+ {
+ $newDDL1 = $newSchema->convertToDDL(
'hottentottententententoonstellingsterrijnen' );
+ self::fail( "Expected exception not thrown." );
+ }
+ catch ( ezcDbSchemaUnknownFormatException $e )
+ {
+ self::assertEquals( "There is no 'difference write' handler
available for the 'hottentottententententoonstellingsterrijnen' format.",
$e->getMessage() );
+ }
+ }
+
+ public function testConvertToDDLWithBrokenDbName()
+ {
+ $fileNameOrig = realpath( $this->testFilesDir .
'webbuilder.schema.xml' );
+ $schema = ezcDbSchema::createFromFile( 'xml', $fileNameOrig );
+ $schema->writeToDb( $this->db );
+
+ $newSchema = ezcDbSchema::createFromDb( $this->db );
+ try
+ {
+ $newDDL1 = $newSchema->convertToDDL( 42);
+ self::fail( "Expected exception not thrown." );
+ }
+ catch ( ezcDbSchemaUnknownFormatException $e )
+ {
+ self::assertEquals( "There is no 'difference write' handler
available for the '42' format.", $e->getMessage() );
+ }
+ }
+
public function testXmlInternal1()
{
$fileNameOrig = realpath( $this->testFilesDir .
'webbuilder.schema.xml' );
--
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components