diff --git a/lib/Doctrine/Export/Schema.php b/lib/Doctrine/Export/Schema.php new file mode 100644 index 000000000..aa84e9d5f --- /dev/null +++ b/lib/Doctrine/Export/Schema.php @@ -0,0 +1,41 @@ +. + */ + +/** + * class Doctrine_Export_Schema + * + * Different methods to import a XML schema. The logic behind using two different + * methods is simple. Some people will like the idea of producing Doctrine_Record + * objects directly, which is totally fine. But in fast and growing application, + * table definitions tend to be a little bit more volatile. importArr() can be used + * to output a table definition in a PHP file. This file can then be stored + * independantly from the object itself. + * + * @package Doctrine + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version $Revision: 1838 $ + * @author Nicolas Bérard-Nault + */ +class Doctrine_Export_Schema +{ +} \ No newline at end of file diff --git a/lib/Doctrine/Export/Schema/Xml.php b/lib/Doctrine/Export/Schema/Xml.php new file mode 100644 index 000000000..0e9e2d144 --- /dev/null +++ b/lib/Doctrine/Export/Schema/Xml.php @@ -0,0 +1,34 @@ +. + */ + +/** + * class Doctrine_Export_Schema_Xml + * + * @package Doctrine + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version $Revision: 1838 $ + * @author Nicolas Bérard-Nault + */ +class Doctrine_Export_Schema_Xml extends Doctrine_Export_Schema +{ +} \ No newline at end of file diff --git a/lib/Doctrine/Export/Schema/Yml.php b/lib/Doctrine/Export/Schema/Yml.php new file mode 100644 index 000000000..896856dbd --- /dev/null +++ b/lib/Doctrine/Export/Schema/Yml.php @@ -0,0 +1,34 @@ +. + */ + +/** + * class Doctrine_Export_Schema_Yml + * + * @package Doctrine + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version $Revision: 1838 $ + * @author Nicolas Bérard-Nault + */ +class Doctrine_Export_Schema_Yml extends Doctrine_Export_Schema +{ +} \ No newline at end of file diff --git a/lib/Doctrine/Import/Schema.php b/lib/Doctrine/Import/Schema.php new file mode 100644 index 000000000..04b42cd91 --- /dev/null +++ b/lib/Doctrine/Import/Schema.php @@ -0,0 +1,62 @@ +. + */ + +/** + * class Doctrine_Import_Schema + * + * Different methods to import a XML schema. The logic behind using two different + * methods is simple. Some people will like the idea of producing Doctrine_Record + * objects directly, which is totally fine. But in fast and growing application, + * table definitions tend to be a little bit more volatile. importArr() can be used + * to output a table definition in a PHP file. This file can then be stored + * independantly from the object itself. + * + * @package Doctrine + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version $Revision: 1838 $ + * @author Nicolas Bérard-Nault + * @author Jonathan H. Wage + */ +class Doctrine_Import_Schema +{ + /** + * import + * + * A method to import a Schema and translate it into a Doctrine_Record object + * + * @param string $schema The file containing the XML schema + * @param string $directory The directory where the Doctrine_Record classes will + * be written + */ + public function import($schema, $directory) + { + $builder = new Doctrine_Import_Builder(); + $builder->setTargetPath($directory); + + $arr = $this->importSchema($schema); + + foreach ($arr as $name => $columns) { + $Builder->buildRecord($name, $columns); + } + } +} \ No newline at end of file diff --git a/lib/Doctrine/Import/Xml.php b/lib/Doctrine/Import/Schema/Xml.php similarity index 80% rename from lib/Doctrine/Import/Xml.php rename to lib/Doctrine/Import/Schema/Xml.php index 4b82c78b8..9ce03796f 100644 --- a/lib/Doctrine/Import/Xml.php +++ b/lib/Doctrine/Import/Schema/Xml.php @@ -1,6 +1,6 @@ + * @author Jonathan H. Wage */ -class Doctrine_Import_Xml +class Doctrine_Import_Schema_Yml extends Doctrine_Import_Schema { - /** - * importObj - * - * A method to import a XML Schema and translate it into a Doctrine_Record object - * - * @param string $schema The file containing the XML schema - * @param string $directory The directory where the Doctrine_Record classes will - * be written - */ - public function importObj($schema, $directory) - { - $builder = new Doctrine_Import_Builder(); - $builder->setTargetPath($directory); - - $arr = $this->importArr($schema); - - foreach ($arr as $name => $columns) { - $Builder->buildRecord($name, $columns); - } - } - /** * importArr * @@ -68,7 +48,7 @@ class Doctrine_Import_Xml * @param string $schema Path to the file containing the XML schema * @return array */ - public function importArr($schema) + public function importSchema($schema) { if (!is_readable($schema)) { throw new Doctrine_Import_Exception('Could not read schema file '. $schema); @@ -101,6 +81,4 @@ class Doctrine_Import_Xml return $tables; } -} - -?> +} \ No newline at end of file diff --git a/lib/Doctrine/Import/Schema/Yml.php b/lib/Doctrine/Import/Schema/Yml.php new file mode 100644 index 000000000..d16d8d140 --- /dev/null +++ b/lib/Doctrine/Import/Schema/Yml.php @@ -0,0 +1,85 @@ +. + */ + +/** + * class Doctrine_Import_Schema_Yml + * + * Different methods to import a YML schema. The logic behind using two different + * methods is simple. Some people will like the idea of producing Doctrine_Record + * objects directly, which is totally fine. But in fast and growing application, + * table definitions tend to be a little bit more volatile. importArr() can be used + * to output a table definition in a PHP file. This file can then be stored + * independantly from the object itself. + * + * @package Doctrine + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @version $Revision: 1838 $ + * @author Nicolas Bérard-Nault + * @author Jonathan H. Wage + */ +class Doctrine_Import_Schema_Yml extends Doctrine_Import_Schema +{ + /** + * importSchema + * + * A method to import a Yml Schema and translate it into a property array. + * The function returns that property array. + * + * @param string $schema Path to the file containing the XML schema + * @return array + */ + public function importSchema($schema) + { + if (!is_readable($schema)) { + throw new Doctrine_Import_Exception('Could not read schema file '. $schema); + } + + // Need to figure out best way to have yaml loading/dumping in Doctrine + // $yamlArr = YamlLoad($schema); + + // Go through all tables... + foreach ($yamlArr['table'] as $table) { + // Go through all columns... + foreach ($table['declaration']['field'] as $field) { + $colDesc = array( + 'name' => (string) $field['name'], + 'type' => (string) $field['type'], + 'ptype' => (string) $field['type'], + 'length' => (int) $field['length'], + 'fixed' => (int) $field['fixed'], + 'unsigned' => (bool) $field['unsigned'], + 'primary' => (bool) (isset($field['primary']) && $field['primary']), + 'default' => (string) $field['default'], + 'notnull' => (bool) (isset($field['notnull']) && $field['notnull']), + 'autoinc' => (bool) (isset($field['autoincrement']) && $field['autoincrement']), + ); + + $columns[(string) $field['name']] = $colDesc; + } + + $tables[(string) $table['name']] = $columns; + } + + return $tables; + } +} \ No newline at end of file