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

Reply via email to