1
0
mirror of synced 2025-01-18 06:21:40 +03:00
lsmith 2007-09-03 10:41:51 +00:00
parent 9a5f3b8b8f
commit 6f7736ade8

View File

@ -103,7 +103,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
{ {
return $this->conn->exec($this->dropIndexSql($table, $name)); return $this->conn->exec($this->dropIndexSql($table, $name));
} }
/** /**
* dropIndexSql * dropIndexSql
* *
@ -111,7 +111,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
* @param string $name name of the index to be dropped * @param string $name name of the index to be dropped
* @return string SQL that is used for dropping an index * @return string SQL that is used for dropping an index
*/ */
public function dropIndexSql($table, $name) public function dropIndexSql($table, $name)
{ {
$name = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name)); $name = $this->conn->quoteIdentifier($this->conn->formatter->getIndexName($name));
return 'DROP INDEX ' . $name; return 'DROP INDEX ' . $name;
@ -210,7 +210,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
if ( ! $name) { if ( ! $name) {
throw new Doctrine_Export_Exception('no valid table name specified'); throw new Doctrine_Export_Exception('no valid table name specified');
} }
if (empty($fields)) { if (empty($fields)) {
throw new Doctrine_Export_Exception('no fields specified for table ' . $name); throw new Doctrine_Export_Exception('no fields specified for table ' . $name);
} }
@ -229,9 +229,9 @@ class Doctrine_Export extends Doctrine_Connection_Module
} }
$query = 'CREATE TABLE ' . $this->conn->quoteIdentifier($name, true) . ' (' . $queryFields; $query = 'CREATE TABLE ' . $this->conn->quoteIdentifier($name, true) . ' (' . $queryFields;
$check = $this->getCheckDeclaration($fields); $check = $this->getCheckDeclaration($fields);
if ( ! empty($check)) { if ( ! empty($check)) {
$query .= ', ' . $check; $query .= ', ' . $check;
} }
@ -249,7 +249,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
$sql[] = $this->createForeignKeySql($name, $definition); $sql[] = $this->createForeignKeySql($name, $definition);
} }
} }
} }
return $sql; return $sql;
} }
/** /**
@ -281,7 +281,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
* 'comment' => 'Foo', * 'comment' => 'Foo',
* 'charset' => 'utf8', * 'charset' => 'utf8',
* 'collate' => 'utf8_unicode_ci', * 'collate' => 'utf8_unicode_ci',
* ); * );
* @return void * @return void
*/ */
public function createSequence($seqName, $start = 1, array $options = array()) public function createSequence($seqName, $start = 1, array $options = array())
@ -631,7 +631,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
* Text value with the default COLLATION for this field. * Text value with the default COLLATION for this field.
* unique * unique
* unique constraint * unique constraint
* check * check
* column check constraint * column check constraint
* *
* @return string DBMS specific SQL code portion that should be used to * @return string DBMS specific SQL code portion that should be used to
@ -652,7 +652,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
$unique = (isset($field['unique']) && $field['unique']) ? $unique = (isset($field['unique']) && $field['unique']) ?
' ' . $this->getUniqueFieldDeclaration() : ''; ' ' . $this->getUniqueFieldDeclaration() : '';
$check = (isset($field['check']) && $field['check']) ? $check = (isset($field['check']) && $field['check']) ?
' ' . $field['check'] : ''; ' ' . $field['check'] : '';
@ -681,14 +681,14 @@ class Doctrine_Export extends Doctrine_Connection_Module
$field['default'] = empty($field['notnull']) $field['default'] = empty($field['notnull'])
? null : $this->valid_default_values[$field['type']]; ? null : $this->valid_default_values[$field['type']];
if ($field['default'] === '' && if ($field['default'] === '' &&
($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_EMPTY_TO_NULL)) { ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_EMPTY_TO_NULL)) {
$field['default'] = null; $field['default'] = null;
} }
} }
if ($field['type'] === 'boolean') { if ($field['type'] === 'boolean') {
$fields['default'] = $this->conn->convertBooleans($field['default']); $fields['default'] = $this->conn->convertBooleans($field['default']);
} }
$default = ' DEFAULT ' . $this->conn->quote($field['default'], $field['type']); $default = ' DEFAULT ' . $this->conn->quote($field['default'], $field['type']);
} }
@ -721,7 +721,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
return implode(', ', $constraints); return implode(', ', $constraints);
} }
/** /**
* Obtain DBMS specific SQL code portion needed to set an index * Obtain DBMS specific SQL code portion needed to set an index
* declaration to be used in statements like CREATE TABLE. * declaration to be used in statements like CREATE TABLE.
* *
* @param string $name name of the index * @param string $name name of the index
@ -748,7 +748,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
$query = $type . 'INDEX ' . $name; $query = $type . 'INDEX ' . $name;
$query .= ' (' . $this->getIndexFieldDeclarationList($definition['fields']) . ')'; $query .= ' (' . $this->getIndexFieldDeclarationList($definition['fields']) . ')';
return $query; return $query;
} }
/** /**
@ -795,7 +795,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
* *
* @param array $definition an associative array with the following structure: * @param array $definition an associative array with the following structure:
* name optional constraint name * name optional constraint name
* *
* local the local field(s) * local the local field(s)
* *
* foreign the foreign reference field(s) * foreign the foreign reference field(s)
@ -803,23 +803,23 @@ class Doctrine_Export extends Doctrine_Connection_Module
* foreignTable the name of the foreign table * foreignTable the name of the foreign table
* *
* onDelete referential delete action * onDelete referential delete action
* *
* onUpdate referential update action * onUpdate referential update action
* *
* deferred deferred constraint checking * deferred deferred constraint checking
* *
* The onDelete and onUpdate keys accept the following values: * The onDelete and onUpdate keys accept the following values:
* *
* CASCADE: Delete or update the row from the parent table and automatically delete or * CASCADE: Delete or update the row from the parent table and automatically delete or
* update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported. * update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.
* Between two tables, you should not define several ON UPDATE CASCADE clauses that act on the same column * Between two tables, you should not define several ON UPDATE CASCADE clauses that act on the same column
* in the parent table or in the child table. * in the parent table or in the child table.
* *
* SET NULL: Delete or update the row from the parent table and set the foreign key column or columns in the * SET NULL: Delete or update the row from the parent table and set the foreign key column or columns in the
* child table to NULL. This is valid only if the foreign key columns do not have the NOT NULL qualifier * child table to NULL. This is valid only if the foreign key columns do not have the NOT NULL qualifier
* specified. Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported. * specified. Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported.
* *
* NO ACTION: In standard SQL, NO ACTION means no action in the sense that an attempt to delete or update a primary * NO ACTION: In standard SQL, NO ACTION means no action in the sense that an attempt to delete or update a primary
* key value is not allowed to proceed if there is a related foreign key value in the referenced table. * key value is not allowed to proceed if there is a related foreign key value in the referenced table.
* *
* RESTRICT: Rejects the delete or update operation for the parent table. NO ACTION and RESTRICT are the same as * RESTRICT: Rejects the delete or update operation for the parent table. NO ACTION and RESTRICT are the same as
@ -918,7 +918,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
. ') REFERENCES ' . ') REFERENCES '
. $definition['foreignTable'] . '(' . $definition['foreignTable'] . '('
. implode(', ', array_map(array($this->conn, 'quoteIdentifier'), $definition['foreign'])) . ')'; . implode(', ', array_map(array($this->conn, 'quoteIdentifier'), $definition['foreign'])) . ')';
return $sql; return $sql;
} }
/** /**
@ -955,12 +955,12 @@ class Doctrine_Export extends Doctrine_Connection_Module
public function getCollationFieldDeclaration($collation) public function getCollationFieldDeclaration($collation)
{ {
return ''; return '';
} }
/** /**
* exportSchema * exportSchema
* method for exporting Doctrine_Record classes to a schema * method for exporting Doctrine_Record classes to a schema
* *
* if the directory parameter is given this method first iterates * if the directory parameter is given this method first iterates
* recursively trhough the given directory in order to find any model classes * recursively trhough the given directory in order to find any model classes
* *
* Then it iterates through all declared classes and creates tables for the ones * Then it iterates through all declared classes and creates tables for the ones
@ -985,7 +985,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
if($e->getPortableCode() !== Doctrine::ERR_ALREADY_EXISTS) { if($e->getPortableCode() !== Doctrine::ERR_ALREADY_EXISTS) {
$this->conn->rollback(); $this->conn->rollback();
throw $e; throw $e;
} }
} }
} }
$this->conn->commit(); $this->conn->commit();
@ -1034,7 +1034,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
$sql = array(); $sql = array();
$fks = array(); $fks = array();
// we iterate trhough the diff of previously declared classes // we iterate trhough the diff of previously declared classes
// and currently declared classes // and currently declared classes
foreach ($classes as $name) { foreach ($classes as $name) {
$class = new ReflectionClass($name); $class = new ReflectionClass($name);
@ -1044,22 +1044,25 @@ class Doctrine_Export extends Doctrine_Connection_Module
// class must have method setTableDefinition (to avoid non-Record subclasses like symfony's sfDoctrineRecord) // class must have method setTableDefinition (to avoid non-Record subclasses like symfony's sfDoctrineRecord)
// we have to recursively iterate through the class parents just to be sure that the classes using for example // we have to recursively iterate through the class parents just to be sure that the classes using for example
// column aggregation inheritance are properly exporterd to database // column aggregation inheritance are properly exporterd to database
while ($class->isAbstract() && while ($class->isAbstract() ||
! $class->isSubclassOf($parent) && ! $class->isSubclassOf($parent) ||
! $class->hasMethod('setTableDefinition') && ! $class->hasMethod('setTableDefinition') ||
$class->getMethod('setTableDefinition')->getDeclaringClass()->getName() !== $class->getName()) { $class->getMethod('setTableDefinition')->getDeclaringClass()->getName() !== $class->getName()) {
$class = $class->getParent(); $class = $class->getParentClass();
if ($class === false) {
if ($class === null) {
break; break;
} }
} }
if ($class === false) {
continue;
}
$record = new $name(); $record = new $name();
$table = $record->getTable(); $table = $record->getTable();
$data = $table->getExportableFormat(); $data = $table->getExportableFormat();
$query = $this->conn->export->createTableSql($data['tableName'], $data['columns'], $data['options']); $query = $this->conn->export->createTableSql($data['tableName'], $data['columns'], $data['options']);
if (is_array($query)) { if (is_array($query)) {
@ -1077,7 +1080,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
* exportSql * exportSql
* returns the sql for exporting Doctrine_Record classes to a schema * returns the sql for exporting Doctrine_Record classes to a schema
* *
* if the directory parameter is given this method first iterates * if the directory parameter is given this method first iterates
* recursively trhough the given directory in order to find any model classes * recursively trhough the given directory in order to find any model classes
* *
* Then it iterates through all declared classes and creates tables for the ones * Then it iterates through all declared classes and creates tables for the ones
@ -1096,7 +1099,7 @@ class Doctrine_Export extends Doctrine_Connection_Module
foreach ((array) $directory as $dir) { foreach ((array) $directory as $dir) {
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir),
RecursiveIteratorIterator::LEAVES_ONLY); RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($it as $file) { foreach ($it as $file) {
$e = explode('.', $file->getFileName()); $e = explode('.', $file->getFileName());
if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) { if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) {