[2.0] DDC-169 - Converted introspection queries of all platforms to return Column, Sequence, Index, ForeignKey Schema Instances instead of arrays, heavily pimped Oracle support thereby.
This commit is contained in:
parent
709dfb52c4
commit
af48974a75
@ -202,13 +202,14 @@ class MySqlPlatform extends AbstractPlatform
|
|||||||
|
|
||||||
public function getListTableForeignKeysSql($table, $database = null)
|
public function getListTableForeignKeysSql($table, $database = null)
|
||||||
{
|
{
|
||||||
$sql = "SELECT column_name, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM information_schema.key_column_usage WHERE table_name = '" . $table . "'";
|
$sql = "SELECT `CONSTRAINT_NAME`, `COLUMN_NAME`, `REFERENCED_TABLE_NAME`, ".
|
||||||
|
"`REFERENCED_COLUMN_NAME` FROM information_schema.key_column_usage WHERE table_name = '" . $table . "'";
|
||||||
|
|
||||||
if ( ! is_null($database)) {
|
if ( ! is_null($database)) {
|
||||||
$sql .= " AND table_schema = '$database'";
|
$sql .= " AND table_schema = '$database'";
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql .= " AND REFERENCED_COLUMN_NAME is not NULL";
|
$sql .= " AND `REFERENCED_COLUMN_NAME` is not NULL";
|
||||||
|
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
@ -106,6 +106,10 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
* Gets the SQL used to create a sequence that starts with a given value
|
* Gets the SQL used to create a sequence that starts with a given value
|
||||||
* and increments by the given allocation size.
|
* and increments by the given allocation size.
|
||||||
*
|
*
|
||||||
|
* Need to specifiy minvalue, since start with is hidden in the system and MINVALUE <= START WITH.
|
||||||
|
* 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 string $sequenceName
|
||||||
* @param integer $start
|
* @param integer $start
|
||||||
* @param integer $allocationSize
|
* @param integer $allocationSize
|
||||||
@ -113,8 +117,8 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
*/
|
*/
|
||||||
public function getCreateSequenceSql($sequenceName, $start = 1, $allocationSize = 1)
|
public function getCreateSequenceSql($sequenceName, $start = 1, $allocationSize = 1)
|
||||||
{
|
{
|
||||||
return 'CREATE SEQUENCE ' . $sequenceName
|
return 'CREATE SEQUENCE ' . $sequenceName
|
||||||
. ' START WITH ' . $start . ' INCREMENT BY ' . $allocationSize;
|
. ' START WITH ' . $start . ' MINVALUE ' . $start . ' INCREMENT BY ' . $allocationSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -249,7 +253,7 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
|
|
||||||
public function getListDatabasesSql()
|
public function getListDatabasesSql()
|
||||||
{
|
{
|
||||||
return 'SELECT username FROM sys.dba_users';
|
return 'SELECT username FROM all_users';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getListFunctionsSql()
|
public function getListFunctionsSql()
|
||||||
@ -259,7 +263,7 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
|
|
||||||
public function getListSequencesSql($database)
|
public function getListSequencesSql($database)
|
||||||
{
|
{
|
||||||
return 'SELECT sequence_name FROM sys.user_sequences';
|
return 'SELECT sequence_name, min_value, increment_by FROM sys.user_sequences';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCreateTableSql($table, array $columns, array $options = array())
|
public function getCreateTableSql($table, array $columns, array $options = array())
|
||||||
@ -281,11 +285,7 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
|
|
||||||
if (isset($indexes) && ! empty($indexes)) {
|
if (isset($indexes) && ! empty($indexes)) {
|
||||||
foreach ($indexes as $indexName => $definition) {
|
foreach ($indexes as $indexName => $definition) {
|
||||||
// create nonunique indexes, as they are a part of CREATE TABLE DDL
|
$sql[] = $this->getCreateIndexSql($table, $indexName, $definition);
|
||||||
if ( ! isset($definition['type']) ||
|
|
||||||
(isset($definition['type']) && strtolower($definition['type']) != 'unique')) {
|
|
||||||
$sql[] = $this->getCreateIndexSql($table, $indexName, $definition);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,7 +293,6 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @license New BSD License
|
* @license New BSD License
|
||||||
* @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaOracleReader.html
|
* @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaOracleReader.html
|
||||||
* @param string $table
|
* @param string $table
|
||||||
@ -301,11 +300,14 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
*/
|
*/
|
||||||
public function getListTableIndexesSql($table)
|
public function getListTableIndexesSql($table)
|
||||||
{
|
{
|
||||||
|
$table = strtoupper($table);
|
||||||
|
|
||||||
return "SELECT uind.index_name AS name, " .
|
return "SELECT uind.index_name AS name, " .
|
||||||
" uind.index_type AS type, " .
|
" uind.index_type AS type, " .
|
||||||
" decode( uind.uniqueness, 'NONUNIQUE', 0, 'UNIQUE', 1 ) AS is_unique, " .
|
" decode( uind.uniqueness, 'NONUNIQUE', 0, 'UNIQUE', 1 ) AS is_unique, " .
|
||||||
" uind_col.column_name AS column_name, " .
|
" uind_col.column_name AS column_name, " .
|
||||||
" uind_col.column_position AS column_pos " .
|
" uind_col.column_position AS column_pos, " .
|
||||||
|
" (SELECT ucon.constraint_type FROM user_constraints ucon WHERE ucon.constraint_name = uind.index_name) AS is_primary ".
|
||||||
"FROM user_indexes uind, user_ind_columns uind_col " .
|
"FROM user_indexes uind, user_ind_columns uind_col " .
|
||||||
"WHERE uind.index_name = uind_col.index_name AND uind_col.table_name = '$table'";
|
"WHERE uind.index_name = uind_col.index_name AND uind_col.table_name = '$table'";
|
||||||
}
|
}
|
||||||
@ -317,7 +319,7 @@ class OraclePlatform extends AbstractPlatform
|
|||||||
|
|
||||||
public function getListUsersSql()
|
public function getListUsersSql()
|
||||||
{
|
{
|
||||||
return 'SELECT * FROM sys.dba_users';
|
return 'SELECT * FROM all_users';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getListViewsSql()
|
public function getListViewsSql()
|
||||||
@ -399,6 +401,24 @@ END;';
|
|||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getListTableForeignKeysSql($table)
|
||||||
|
{
|
||||||
|
$table = strtoupper($table);
|
||||||
|
|
||||||
|
return "SELECT rel.constraint_name, rel.position, col.column_name AS local_column, ".
|
||||||
|
" rel.table_name, rel.column_name AS foreign_column, cc.delete_rule ".
|
||||||
|
"FROM (user_tab_columns col ".
|
||||||
|
"JOIN user_cons_columns con ".
|
||||||
|
" ON col.table_name = con.table_name ".
|
||||||
|
" AND col.column_name = con.column_name ".
|
||||||
|
"JOIN user_constraints cc ".
|
||||||
|
" ON con.constraint_name = cc.constraint_name ".
|
||||||
|
"JOIN user_cons_columns rel ".
|
||||||
|
" ON cc.r_constraint_name = rel.constraint_name ".
|
||||||
|
" AND con.position = rel.position) ".
|
||||||
|
"WHERE cc.constraint_type = 'R' AND col.table_name = '".$table."'";
|
||||||
|
}
|
||||||
|
|
||||||
public function getListTableConstraintsSql($table)
|
public function getListTableConstraintsSql($table)
|
||||||
{
|
{
|
||||||
$table = strtoupper($table);
|
$table = strtoupper($table);
|
||||||
@ -579,4 +599,14 @@ END;';
|
|||||||
}
|
}
|
||||||
return $schemaElementName;
|
return $schemaElementName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the platform supports sequences.
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function supportsSequences()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -341,7 +341,7 @@ class PostgreSqlPlatform extends AbstractPlatform
|
|||||||
|
|
||||||
public function getListTableForeignKeysSql($table, $database = null)
|
public function getListTableForeignKeysSql($table, $database = null)
|
||||||
{
|
{
|
||||||
return "SELECT pg_catalog.pg_get_constraintdef(oid, true) as condef
|
return "SELECT r.name, pg_catalog.pg_get_constraintdef(r.oid, true) as condef
|
||||||
FROM pg_catalog.pg_constraint r
|
FROM pg_catalog.pg_constraint r
|
||||||
WHERE r.conrelid =
|
WHERE r.conrelid =
|
||||||
(
|
(
|
||||||
|
@ -23,6 +23,7 @@ namespace Doctrine\DBAL\Schema;
|
|||||||
|
|
||||||
use \Doctrine\DBAL\Types;
|
use \Doctrine\DBAL\Types;
|
||||||
use \Doctrine\Common\DoctrineException;
|
use \Doctrine\Common\DoctrineException;
|
||||||
|
use \Doctrine\DBAL\DBALException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for schema managers. Schema managers are used to inspect and/or
|
* Base class for schema managers. Schema managers are used to inspect and/or
|
||||||
@ -210,32 +211,10 @@ abstract class AbstractSchemaManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List the indexes for a given table
|
* List the indexes for a given table returning an array of Index instances.
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* $indexes = array(
|
|
||||||
* 'primary' => array(
|
|
||||||
* 'name' => 'primary',
|
|
||||||
* 'columns' => array('id'),
|
|
||||||
* 'unique' => true,
|
|
||||||
* 'primary' => true,
|
|
||||||
* ),
|
|
||||||
* 'fieldUnq' => array(
|
|
||||||
* 'name' => 'fieldUnq',
|
|
||||||
* 'columns' => array('foo', 'bar'),
|
|
||||||
* 'unique' => true,
|
|
||||||
* 'primary' => false,
|
|
||||||
* ),
|
|
||||||
* 'fieldIdx' => array(
|
|
||||||
* 'name' => 'fieldIdx',
|
|
||||||
* 'columns' => array('baz'),
|
|
||||||
* 'unique' => false,
|
|
||||||
* 'primary' => false,
|
|
||||||
* ),
|
|
||||||
* );
|
|
||||||
*
|
*
|
||||||
* @param string $table The name of the table
|
* @param string $table The name of the table
|
||||||
* @return array $tableIndexes
|
* @return Index[] $tableIndexes
|
||||||
*/
|
*/
|
||||||
public function listTableIndexes($table)
|
public function listTableIndexes($table)
|
||||||
{
|
{
|
||||||
@ -899,9 +878,13 @@ abstract class AbstractSchemaManager
|
|||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $sequence
|
||||||
|
* @return Sequence
|
||||||
|
*/
|
||||||
protected function _getPortableSequenceDefinition($sequence)
|
protected function _getPortableSequenceDefinition($sequence)
|
||||||
{
|
{
|
||||||
return $sequence;
|
throw DBALException::notSupported('Sequences');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _getPortableTableConstraintsList($tableConstraints)
|
protected function _getPortableTableConstraintsList($tableConstraints)
|
||||||
@ -923,21 +906,21 @@ abstract class AbstractSchemaManager
|
|||||||
protected function _getPortableTableColumnList($tableColumns)
|
protected function _getPortableTableColumnList($tableColumns)
|
||||||
{
|
{
|
||||||
$list = array();
|
$list = array();
|
||||||
foreach ($tableColumns as $key => $value) {
|
foreach ($tableColumns as $key => $column) {
|
||||||
if ($value = $this->_getPortableTableColumnDefinition($value)) {
|
if ($column = $this->_getPortableTableColumnDefinition($column)) {
|
||||||
if (is_string($value['type'])) {
|
$list[$column->getName()] = $column;
|
||||||
$value['type'] = \Doctrine\DBAL\Types\Type::getType($value['type']);
|
|
||||||
}
|
|
||||||
$list[$value['name']] = $value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _getPortableTableColumnDefinition($tableColumn)
|
/**
|
||||||
{
|
* Get Table Column Definition
|
||||||
return $tableColumn;
|
*
|
||||||
}
|
* @param array $tableColumn
|
||||||
|
* @return Column
|
||||||
|
*/
|
||||||
|
abstract protected function _getPortableTableColumnDefinition($tableColumn);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Aggregate and group the index results according to the required data result.
|
* Aggregate and group the index results according to the required data result.
|
||||||
@ -967,7 +950,12 @@ abstract class AbstractSchemaManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
$indexes = array();
|
||||||
|
foreach($result AS $indexKey => $data) {
|
||||||
|
$indexes[$indexKey] = new Index($data['name'], $data['columns'], $data['unique'], $data['primary']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $indexes;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _getPortableTablesList($tables)
|
protected function _getPortableTablesList($tables)
|
||||||
|
@ -132,7 +132,11 @@ class Column extends AbstractAsset
|
|||||||
*/
|
*/
|
||||||
public function setLength($length)
|
public function setLength($length)
|
||||||
{
|
{
|
||||||
$this->_length = (int)$length;
|
if($length !== null) {
|
||||||
|
$this->_length = (int)$length;
|
||||||
|
} else {
|
||||||
|
$this->_length = null;
|
||||||
|
}
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,11 +226,11 @@ class Comparator
|
|||||||
*/
|
*/
|
||||||
public function diffForeignKey($key1, $key2)
|
public function diffForeignKey($key1, $key2)
|
||||||
{
|
{
|
||||||
if ($key1->getLocalColumnNames() != $key2->getLocalColumnNames()) {
|
if ($key1->getLocalColumns() != $key2->getLocalColumns()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($key1->getForeignColumnNames() != $key2->getForeignColumnNames()) {
|
if ($key1->getForeignColumns() != $key2->getForeignColumns()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ class ForeignKeyConstraint extends AbstractAsset implements Constraint
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getLocalColumnNames()
|
public function getLocalColumns()
|
||||||
{
|
{
|
||||||
return $this->_localColumnNames;
|
return $this->_localColumnNames;
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ class ForeignKeyConstraint extends AbstractAsset implements Constraint
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getForeignColumnNames()
|
public function getForeignColumns()
|
||||||
{
|
{
|
||||||
return $this->_foreignColumnNames;
|
return $this->_foreignColumnNames;
|
||||||
}
|
}
|
||||||
|
@ -239,9 +239,7 @@ class MySqlSchemaManager extends AbstractSchemaManager
|
|||||||
'fixed' => (bool) $fixed
|
'fixed' => (bool) $fixed
|
||||||
);
|
);
|
||||||
|
|
||||||
$column = array(
|
$options = array(
|
||||||
'name' => $tableColumn['Field'],
|
|
||||||
'type' => $type,
|
|
||||||
'length' => $length,
|
'length' => $length,
|
||||||
'unsigned' => (bool)$unsigned,
|
'unsigned' => (bool)$unsigned,
|
||||||
'fixed' => (bool)$fixed,
|
'fixed' => (bool)$fixed,
|
||||||
@ -249,7 +247,7 @@ class MySqlSchemaManager extends AbstractSchemaManager
|
|||||||
'notnull' => (bool) ($tableColumn['Null'] != 'YES'),
|
'notnull' => (bool) ($tableColumn['Null'] != 'YES'),
|
||||||
'scale' => null,
|
'scale' => null,
|
||||||
'precision' => null,
|
'precision' => null,
|
||||||
'platformDetails' => array(
|
'platformOptions' => array(
|
||||||
'primary' => (strtolower($tableColumn['Key']) == 'pri') ? true : false,
|
'primary' => (strtolower($tableColumn['Key']) == 'pri') ? true : false,
|
||||||
'unique' => (strtolower($tableColumn['Key']) == 'uni') ? true :false,
|
'unique' => (strtolower($tableColumn['Key']) == 'uni') ? true :false,
|
||||||
'autoincrement' => (bool) (strpos($tableColumn['Extra'], 'auto_increment') !== false),
|
'autoincrement' => (bool) (strpos($tableColumn['Extra'], 'auto_increment') !== false),
|
||||||
@ -257,22 +255,24 @@ class MySqlSchemaManager extends AbstractSchemaManager
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($scale !== null && $precision !== null) {
|
if ($scale !== null && $precision !== null) {
|
||||||
$column['scale'] = $scale;
|
$options['scale'] = $scale;
|
||||||
$column['precision'] = $precision;
|
$options['precision'] = $precision;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $column;
|
return new Column($tableColumn['Field'], \Doctrine\DBAL\Types\Type::getType($type), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _getPortableTableForeignKeyDefinition($tableForeignKey)
|
public function _getPortableTableForeignKeyDefinition($tableForeignKey)
|
||||||
{
|
{
|
||||||
$tableForeignKey = array_change_key_case($tableForeignKey, CASE_LOWER);
|
$tableForeignKey = array_change_key_case($tableForeignKey, CASE_LOWER);
|
||||||
$foreignKey = array(
|
|
||||||
'table' => $tableForeignKey['referenced_table_name'],
|
return new ForeignKeyConstraint(
|
||||||
'local' => $tableForeignKey['column_name'],
|
(array)$tableForeignKey['column_name'],
|
||||||
'foreign' => $tableForeignKey['referenced_column_name']
|
$tableForeignKey['referenced_table_name'],
|
||||||
|
(array)$tableForeignKey['referenced_column_name'],
|
||||||
|
$tableForeignKey['constraint_name'],
|
||||||
|
array()
|
||||||
);
|
);
|
||||||
return $foreignKey;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,7 +48,6 @@ class OracleSchemaManager extends AbstractSchemaManager
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
'user' => $user['username'],
|
'user' => $user['username'],
|
||||||
'password' => $user['password']
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,13 +67,13 @@ class OracleSchemaManager extends AbstractSchemaManager
|
|||||||
*/
|
*/
|
||||||
protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
|
protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
|
||||||
{
|
{
|
||||||
$tableIndexes = \array_change_key_case($tableIndexes, CASE_LOWER);
|
|
||||||
|
|
||||||
$indexBuffer = array();
|
$indexBuffer = array();
|
||||||
foreach ( $tableIndexes as $tableIndex ) {
|
foreach ( $tableIndexes as $tableIndex ) {
|
||||||
$keyName = $tableIndex['name'];
|
$tableIndex = \array_change_key_case($tableIndex, CASE_LOWER);
|
||||||
|
|
||||||
if ( $keyName == $tableName.'_pkey' ) {
|
$keyName = strtolower($tableIndex['name']);
|
||||||
|
|
||||||
|
if ( strtolower($tableIndex['is_primary']) == "p" ) {
|
||||||
$keyName = 'primary';
|
$keyName = 'primary';
|
||||||
$buffer['primary'] = true;
|
$buffer['primary'] = true;
|
||||||
$buffer['non_unique'] = false;
|
$buffer['non_unique'] = false;
|
||||||
@ -86,7 +85,7 @@ class OracleSchemaManager extends AbstractSchemaManager
|
|||||||
$buffer['column_name'] = $tableIndex['column_name'];
|
$buffer['column_name'] = $tableIndex['column_name'];
|
||||||
$indexBuffer[] = $buffer;
|
$indexBuffer[] = $buffer;
|
||||||
}
|
}
|
||||||
parent::_getPortableTableIndexesList($indexBuffer, $tableName);
|
return parent::_getPortableTableIndexesList($indexBuffer, $tableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _getPortableTableColumnDefinition($tableColumn)
|
protected function _getPortableTableColumnDefinition($tableColumn)
|
||||||
@ -179,17 +178,8 @@ class OracleSchemaManager extends AbstractSchemaManager
|
|||||||
$length = null;
|
$length = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$decl = array(
|
$options = array(
|
||||||
'type' => $type,
|
|
||||||
'length' => $length,
|
|
||||||
'unsigned' => $unsigned,
|
|
||||||
'fixed' => $fixed
|
|
||||||
);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'name' => $tableColumn['column_name'],
|
|
||||||
'notnull' => (bool) ($tableColumn['nullable'] === 'N'),
|
'notnull' => (bool) ($tableColumn['nullable'] === 'N'),
|
||||||
'type' => $type,
|
|
||||||
'fixed' => (bool) $fixed,
|
'fixed' => (bool) $fixed,
|
||||||
'unsigned' => (bool) $unsigned,
|
'unsigned' => (bool) $unsigned,
|
||||||
'default' => $tableColumn['data_default'],
|
'default' => $tableColumn['data_default'],
|
||||||
@ -198,6 +188,54 @@ class OracleSchemaManager extends AbstractSchemaManager
|
|||||||
'scale' => $scale,
|
'scale' => $scale,
|
||||||
'platformDetails' => array(),
|
'platformDetails' => array(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return new Column($tableColumn['column_name'], \Doctrine\DBAL\Types\Type::getType($type), $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createForeignKey($table, array $definition)
|
||||||
|
{
|
||||||
|
if(isset($definition['onUpdate'])) {
|
||||||
|
// Oracle does not support onUpdate
|
||||||
|
unset($definition['onUpdate']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::createForeignKey($table, $definition);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _getPortableTableForeignKeysList($tableForeignKeys)
|
||||||
|
{
|
||||||
|
$list = array();
|
||||||
|
foreach ($tableForeignKeys as $key => $value) {
|
||||||
|
$value = \array_change_key_case($value, CASE_LOWER);
|
||||||
|
if (!isset($list[$value['constraint_name']])) {
|
||||||
|
$list[$value['constraint_name']] = array(
|
||||||
|
'name' => $value['constraint_name'],
|
||||||
|
'local' => array(),
|
||||||
|
'foreign' => array(),
|
||||||
|
'foreignTable' => $value['table_name'],
|
||||||
|
'onDelete' => $value['delete_rule'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$list[$value['constraint_name']]['local'][$value['position']] = $value['local_column'];
|
||||||
|
$list[$value['constraint_name']]['foreign'][$value['position']] = $value['foreign_column'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = array();
|
||||||
|
foreach($list AS $constraint) {
|
||||||
|
$result[] = new ForeignKeyConstraint(
|
||||||
|
array_values($constraint['local']), $constraint['foreignTable'],
|
||||||
|
array_values($constraint['foreign']), $constraint['name'],
|
||||||
|
array('onDelete' => $constraint['onDelete'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _getPortableSequenceDefinition($sequence)
|
||||||
|
{
|
||||||
|
$sequence = \array_change_key_case($sequence, CASE_LOWER);
|
||||||
|
return new Sequence($sequence['sequence_name'], $sequence['increment_by'], $sequence['min_value']);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _getPortableTableConstraintDefinition($tableConstraint)
|
protected function _getPortableTableConstraintDefinition($tableConstraint)
|
||||||
|
@ -35,15 +35,26 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager
|
|||||||
{
|
{
|
||||||
protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
|
protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
|
||||||
{
|
{
|
||||||
preg_match('/FOREIGN KEY \((.+)\) REFERENCES (.+)\((.+)\)/', $tableForeignKey['condef'], $values);
|
$onUpdate = null;
|
||||||
|
$onDelete = null;
|
||||||
|
|
||||||
if ((strpos(',', $values[1]) === false) && (strpos(',', $values[3]) === false)) {
|
if(preg_match('(ON UPDATE ([a-zA-Z0-9]+))', $tableForeignKey['condef'], $match)) {
|
||||||
return array(
|
$onUpdate = $match[1];
|
||||||
'table' => $values[2],
|
|
||||||
'local' => $values[1],
|
|
||||||
'foreign' => $values[3]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
if(preg_match('(ON DELETE ([a-zA-Z0-9]+))', $tableForeignKey['condef'], $match)) {
|
||||||
|
$onDelete = $match[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(preg_match('/FOREIGN KEY \((.+)\) REFERENCES (.+)\((.+)\)/', $tableForeignKey['condef'], $values)) {
|
||||||
|
$localColumns = explode(",", $values[1]);
|
||||||
|
$foreignColumns = explode(",", $values[3]);
|
||||||
|
$foreignTable = $values[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ForeignKeyConstraint(
|
||||||
|
$localColumns, $foreignTable, $foreignColumns, $tableForeignKey['name'],
|
||||||
|
array('onUpdate' => $onUpdate, 'onDelete' => $onDelete)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dropDatabase($database)
|
public function dropDatabase($database)
|
||||||
@ -299,9 +310,7 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager
|
|||||||
$type = 'string';
|
$type = 'string';
|
||||||
}
|
}
|
||||||
|
|
||||||
$description = array(
|
$options = array(
|
||||||
'name' => $tableColumn['field'],
|
|
||||||
'type' => $type,
|
|
||||||
'length' => $length,
|
'length' => $length,
|
||||||
'notnull' => (bool) $tableColumn['isnotnull'],
|
'notnull' => (bool) $tableColumn['isnotnull'],
|
||||||
'default' => $tableColumn['default'],
|
'default' => $tableColumn['default'],
|
||||||
@ -313,6 +322,6 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager
|
|||||||
'platformDetails' => array(),
|
'platformDetails' => array(),
|
||||||
);
|
);
|
||||||
|
|
||||||
return $description;
|
return new Column($tableColumn['field'], \Doctrine\DBAL\Types\Type::getType($type), $options);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -245,14 +245,24 @@ class Schema extends AbstractAsset
|
|||||||
return $dropSqlCollector->getQueries();
|
return $dropSqlCollector->getQueries();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function migrateTo(Schema $schema, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
* @param AbstractPlatform $platform
|
||||||
|
*/
|
||||||
|
public function getMigrateToSql(Schema $schema, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
|
||||||
{
|
{
|
||||||
|
$comparator = new Comparator();
|
||||||
|
$schemaDiff = $comparator->compare($this, $schema);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function migrateFrom(Schema $schema, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
|
/**
|
||||||
|
* @param Schema $schema
|
||||||
|
* @param AbstractPlatform $platform
|
||||||
|
*/
|
||||||
|
public function getMigrateFromSql(Schema $schema, \Doctrine\DBAL\Platforms\AbstractPlatform $platform)
|
||||||
{
|
{
|
||||||
|
$comparator = new Comparator();
|
||||||
|
$schemaDiff = $comparator->compare($schema, $this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -242,9 +242,7 @@ class SqliteSchemaManager extends AbstractSchemaManager
|
|||||||
$length = null;
|
$length = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array(
|
$options = array(
|
||||||
'name' => $tableColumn['name'],
|
|
||||||
'type' => $type,
|
|
||||||
'length' => $length,
|
'length' => $length,
|
||||||
'unsigned' => (bool) $unsigned,
|
'unsigned' => (bool) $unsigned,
|
||||||
'fixed' => $fixed,
|
'fixed' => $fixed,
|
||||||
@ -256,5 +254,7 @@ class SqliteSchemaManager extends AbstractSchemaManager
|
|||||||
'primary' => (bool) $tableColumn['pk'],
|
'primary' => (bool) $tableColumn['pk'],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return new Column($tableColumn['name'], \Doctrine\DBAL\Types\Type::getType($type), $options);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -142,8 +142,8 @@ class CreateSchemaSqlCollector implements Visitor
|
|||||||
$fkConstraintArray = array(
|
$fkConstraintArray = array(
|
||||||
'tableName' => $fkConstraint->getName(),
|
'tableName' => $fkConstraint->getName(),
|
||||||
'foreignTable' => $fkConstraint->getForeignTableName(),
|
'foreignTable' => $fkConstraint->getForeignTableName(),
|
||||||
'local' => $fkConstraint->getLocalColumnNames(),
|
'local' => $fkConstraint->getLocalColumns(),
|
||||||
'foreign' => $fkConstraint->getForeignColumnNames(),
|
'foreign' => $fkConstraint->getForeignColumns(),
|
||||||
'onUpdate' => ($fkConstraint->hasOption('onUpdate')?$fkConstraint->getOption('onUpdate'):null),
|
'onUpdate' => ($fkConstraint->hasOption('onUpdate')?$fkConstraint->getOption('onUpdate'):null),
|
||||||
'onDelete' => ($fkConstraint->hasOption('onDelete')?$fkConstraint->getOption('onDelete'):null),
|
'onDelete' => ($fkConstraint->hasOption('onDelete')?$fkConstraint->getOption('onDelete'):null),
|
||||||
);
|
);
|
||||||
|
@ -41,25 +41,4 @@ class MySqlSchemaManagerTest extends SchemaManagerFunctionalTestCase
|
|||||||
{
|
{
|
||||||
return 'SELECT * from mysql.user';
|
return 'SELECT * from mysql.user';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListTableForeignKeys()
|
|
||||||
{
|
|
||||||
$data['options'] = array('type' => 'innodb');
|
|
||||||
$this->createTestTable('list_table_foreign_keys_test1', $data);
|
|
||||||
$this->createTestTable('list_table_foreign_keys_test2', $data);
|
|
||||||
|
|
||||||
$definition = array(
|
|
||||||
'name' => 'testing',
|
|
||||||
'local' => 'foreign_key_test',
|
|
||||||
'foreign' => 'id',
|
|
||||||
'foreignTable' => 'list_table_foreign_keys_test2'
|
|
||||||
);
|
|
||||||
$this->_sm->createForeignKey('list_table_foreign_keys_test1', $definition);
|
|
||||||
|
|
||||||
$tableForeignKeys = $this->_sm->listTableForeignKeys('list_table_foreign_keys_test1');
|
|
||||||
$this->assertEquals(1, count($tableForeignKeys));
|
|
||||||
$this->assertEquals('list_table_foreign_keys_test2', $tableForeignKeys[0]['table']);
|
|
||||||
$this->assertEquals('foreign_key_test', $tableForeignKeys[0]['local']);
|
|
||||||
$this->assertEquals('id', $tableForeignKeys[0]['foreign']);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -10,8 +10,6 @@ class OracleSchemaManagerTest extends SchemaManagerFunctionalTestCase
|
|||||||
{
|
{
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped('Somehow they all dont work because of privledges or other stuff.');
|
|
||||||
|
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
if(!isset($GLOBALS['db_username'])) {
|
if(!isset($GLOBALS['db_username'])) {
|
||||||
@ -34,13 +32,6 @@ class OracleSchemaManagerTest extends SchemaManagerFunctionalTestCase
|
|||||||
$this->_sm->listTriggers();
|
$this->_sm->listTriggers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListSequences()
|
|
||||||
{
|
|
||||||
$this->createTestTable('list_sequences_test');
|
|
||||||
$sequences = $this->_sm->listSequences();
|
|
||||||
$this->assertEquals(true, in_array('LIST_SEQUENCES_TEST_SEQ', $sequences));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testListTableConstraints()
|
public function testListTableConstraints()
|
||||||
{
|
{
|
||||||
$this->createTestTable('test_constraints');
|
$this->createTestTable('test_constraints');
|
||||||
@ -73,11 +64,6 @@ class OracleSchemaManagerTest extends SchemaManagerFunctionalTestCase
|
|||||||
$this->assertEquals('TEST_CREATE_VIEW', $view['name']);
|
$this->assertEquals('TEST_CREATE_VIEW', $view['name']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListTableForeignKeys()
|
|
||||||
{
|
|
||||||
$this->markTestSkipped('Not yet implemented');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRenameTable()
|
public function testRenameTable()
|
||||||
{
|
{
|
||||||
$this->_sm->tryMethod('DropTable', 'list_tables_test');
|
$this->_sm->tryMethod('DropTable', 'list_tables_test');
|
||||||
|
@ -22,28 +22,6 @@ class PostgreSqlSchemaManagerTest extends SchemaManagerFunctionalTestCase
|
|||||||
$this->assertEquals(array('list_table_constraints_test_pkey'), $tableConstraints);
|
$this->assertEquals(array('list_table_constraints_test_pkey'), $tableConstraints);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public function testListTableColumns()
|
|
||||||
{
|
|
||||||
$this->createTestTable('list_tables_test');
|
|
||||||
$columns = $this->_sm->listTableColumns('list_tables_test');
|
|
||||||
|
|
||||||
$this->assertEquals('id', $columns[0]['name']);
|
|
||||||
$this->assertEquals(true, $columns[0]['primary']);
|
|
||||||
$this->assertEquals('Doctrine\DBAL\Types\IntegerType', get_class($columns[0]['type']));
|
|
||||||
$this->assertEquals(null, $columns[0]['length']);
|
|
||||||
$this->assertEquals(false, $columns[0]['fixed']);
|
|
||||||
$this->assertEquals(true, $columns[0]['notnull']);
|
|
||||||
$this->assertEquals(null, $columns[0]['default']);
|
|
||||||
|
|
||||||
$this->assertEquals('test', $columns[1]['name']);
|
|
||||||
$this->assertEquals(false, $columns[1]['primary']);
|
|
||||||
$this->assertEquals('Doctrine\DBAL\Types\StringType', get_class($columns[1]['type']));
|
|
||||||
$this->assertEquals(255, $columns[1]['length']);
|
|
||||||
$this->assertEquals(false, $columns[1]['fixed']);
|
|
||||||
$this->assertEquals(false, $columns[1]['notnull']);
|
|
||||||
$this->assertEquals(null, $columns[1]['default']);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public function testListUsers()
|
public function testListUsers()
|
||||||
{
|
{
|
||||||
$users = $this->_sm->listUsers();
|
$users = $this->_sm->listUsers();
|
||||||
@ -63,25 +41,4 @@ class PostgreSqlSchemaManagerTest extends SchemaManagerFunctionalTestCase
|
|||||||
{
|
{
|
||||||
return 'SELECT usename, passwd FROM pg_user';
|
return 'SELECT usename, passwd FROM pg_user';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListTableForeignKeys()
|
|
||||||
{
|
|
||||||
$data['options'] = array('type' => 'innodb');
|
|
||||||
$this->createTestTable('list_table_foreign_keys_test1', $data);
|
|
||||||
$this->createTestTable('list_table_foreign_keys_test2', $data);
|
|
||||||
|
|
||||||
$definition = array(
|
|
||||||
'name' => 'testing',
|
|
||||||
'local' => 'foreign_key_test',
|
|
||||||
'foreign' => 'id',
|
|
||||||
'foreignTable' => 'list_table_foreign_keys_test2'
|
|
||||||
);
|
|
||||||
$this->_sm->createForeignKey('list_table_foreign_keys_test1', $definition);
|
|
||||||
|
|
||||||
$tableForeignKeys = $this->_sm->listTableForeignKeys('list_table_foreign_keys_test1');
|
|
||||||
$this->assertEquals(1, count($tableForeignKeys));
|
|
||||||
$this->assertEquals('list_table_foreign_keys_test2', $tableForeignKeys[0]['table']);
|
|
||||||
$this->assertEquals('foreign_key_test', $tableForeignKeys[0]['local']);
|
|
||||||
$this->assertEquals('id', $tableForeignKeys[0]['foreign']);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -8,6 +8,31 @@ require_once __DIR__ . '/../../../TestInit.php';
|
|||||||
|
|
||||||
class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTestCase
|
class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTestCase
|
||||||
{
|
{
|
||||||
|
public function testListSequences()
|
||||||
|
{
|
||||||
|
if(!$this->_conn->getDatabasePlatform()->supportsSequences()) {
|
||||||
|
$this->markTestSkipped($this->_conn->getDriver()->getName().' does not support sequences.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_sm->createSequence('list_sequences_test_seq', 10, 20);
|
||||||
|
|
||||||
|
$sequences = $this->_sm->listSequences();
|
||||||
|
|
||||||
|
$this->assertType('array', $sequences, 'listSequences() should return an array.');
|
||||||
|
|
||||||
|
$foundSequence = null;
|
||||||
|
foreach($sequences AS $sequence) {
|
||||||
|
$this->assertType('Doctrine\DBAL\Schema\Sequence', $sequence, 'Array elements of listSequences() should be Sequence instances.');
|
||||||
|
if(strtolower($sequence->getName()) == 'list_sequences_test_seq') {
|
||||||
|
$foundSequence = $sequence;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertNotNull($foundSequence, "Sequence with name 'list_sequences_test_seq' was not found.");
|
||||||
|
$this->assertEquals(20, $foundSequence->getAllocationSize(), "Allocation Size is expected to be 20.");
|
||||||
|
$this->assertEquals(10, $foundSequence->getInitialValue(), "Initial Value is expected to be 10.");
|
||||||
|
}
|
||||||
|
|
||||||
public function testListFunctions()
|
public function testListFunctions()
|
||||||
{
|
{
|
||||||
$funcs = $this->_sm->listFunctions();
|
$funcs = $this->_sm->listFunctions();
|
||||||
@ -29,7 +54,7 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
|
|||||||
|
|
||||||
$databases = \array_map('strtolower', $databases);
|
$databases = \array_map('strtolower', $databases);
|
||||||
|
|
||||||
$this->assertEquals(true, in_array('test_create_database', $databases));
|
$this->assertEquals(true, \in_array('test_create_database', $databases));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListTables()
|
public function testListTables()
|
||||||
@ -37,8 +62,8 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
|
|||||||
$this->createTestTable('list_tables_test');
|
$this->createTestTable('list_tables_test');
|
||||||
$tables = $this->_sm->listTables();
|
$tables = $this->_sm->listTables();
|
||||||
|
|
||||||
$tables = \array_change_key_case($tables, CASE_LOWER);
|
$this->assertType('array', $tables);
|
||||||
|
$tables = \array_map('strtolower', $tables);
|
||||||
$this->assertEquals(true, in_array('list_tables_test', $tables));
|
$this->assertEquals(true, in_array('list_tables_test', $tables));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,87 +108,64 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
|
|||||||
$columns = \array_change_key_case($columns, CASE_LOWER);
|
$columns = \array_change_key_case($columns, CASE_LOWER);
|
||||||
|
|
||||||
$this->assertArrayHasKey('id', $columns);
|
$this->assertArrayHasKey('id', $columns);
|
||||||
$this->assertEquals('id', strtolower($columns['id']['name']));
|
$this->assertEquals('id', strtolower($columns['id']->getname()));
|
||||||
$this->assertType('Doctrine\DBAL\Types\IntegerType', $columns['id']['type']);
|
$this->assertType('Doctrine\DBAL\Types\IntegerType', $columns['id']->gettype());
|
||||||
$this->assertEquals(null, $columns['id']['length']);
|
$this->assertEquals(false, $columns['id']->getunsigned());
|
||||||
$this->assertEquals(null, $columns['id']['precision']);
|
$this->assertEquals(true, $columns['id']->getnotnull());
|
||||||
$this->assertEquals(null, $columns['id']['scale']);
|
$this->assertEquals(null, $columns['id']->getdefault());
|
||||||
$this->assertEquals(false, $columns['id']['unsigned']);
|
$this->assertType('array', $columns['id']->getPlatformOptions());
|
||||||
$this->assertEquals(false, $columns['id']['fixed']);
|
|
||||||
$this->assertEquals(true, $columns['id']['notnull']);
|
|
||||||
$this->assertEquals(null, $columns['id']['default']);
|
|
||||||
$this->assertType('array', $columns['id']['platformDetails']);
|
|
||||||
|
|
||||||
$this->assertArrayHasKey('test', $columns);
|
$this->assertArrayHasKey('test', $columns);
|
||||||
$this->assertEquals('test', strtolower($columns['test']['name']));
|
$this->assertEquals('test', strtolower($columns['test']->getname()));
|
||||||
$this->assertType('Doctrine\DBAL\Types\StringType', $columns['test']['type']);
|
$this->assertType('Doctrine\DBAL\Types\StringType', $columns['test']->gettype());
|
||||||
$this->assertEquals(255, $columns['test']['length']);
|
$this->assertEquals(255, $columns['test']->getlength());
|
||||||
$this->assertEquals(null, $columns['test']['precision']);
|
$this->assertEquals(false, $columns['test']->getfixed());
|
||||||
$this->assertEquals(null, $columns['test']['scale']);
|
$this->assertEquals(false, $columns['test']->getnotnull());
|
||||||
$this->assertEquals(false, $columns['test']['unsigned']);
|
$this->assertEquals(null, $columns['test']->getdefault());
|
||||||
$this->assertEquals(false, $columns['test']['fixed']);
|
$this->assertType('array', $columns['test']->getPlatformOptions());
|
||||||
$this->assertEquals(false, $columns['test']['notnull']);
|
|
||||||
$this->assertEquals(null, $columns['test']['default']);
|
|
||||||
$this->assertType('array', $columns['test']['platformDetails']);
|
|
||||||
|
|
||||||
$this->assertEquals('foo', strtolower($columns['foo']['name']));
|
$this->assertEquals('foo', strtolower($columns['foo']->getname()));
|
||||||
$this->assertType('Doctrine\DBAL\Types\TextType', $columns['foo']['type']);
|
$this->assertType('Doctrine\DBAL\Types\TextType', $columns['foo']->gettype());
|
||||||
$this->assertEquals(null, $columns['foo']['length']);
|
$this->assertEquals(null, $columns['foo']->getlength());
|
||||||
$this->assertEquals(null, $columns['foo']['precision']);
|
$this->assertEquals(false, $columns['foo']->getunsigned());
|
||||||
$this->assertEquals(null, $columns['foo']['scale']);
|
$this->assertEquals(false, $columns['foo']->getfixed());
|
||||||
$this->assertEquals(false, $columns['foo']['unsigned']);
|
$this->assertEquals(true, $columns['foo']->getnotnull());
|
||||||
$this->assertEquals(false, $columns['foo']['fixed']);
|
$this->assertEquals(null, $columns['foo']->getdefault());
|
||||||
$this->assertEquals(true, $columns['foo']['notnull']);
|
$this->assertType('array', $columns['foo']->getPlatformOptions());
|
||||||
$this->assertEquals(null, $columns['foo']['default']);
|
|
||||||
$this->assertType('array', $columns['foo']['platformDetails']);
|
|
||||||
|
|
||||||
$this->assertEquals('bar', strtolower($columns['bar']['name']));
|
$this->assertEquals('bar', strtolower($columns['bar']->getname()));
|
||||||
$this->assertType('Doctrine\DBAL\Types\DecimalType', $columns['bar']['type']);
|
$this->assertType('Doctrine\DBAL\Types\DecimalType', $columns['bar']->gettype());
|
||||||
$this->assertEquals(null, $columns['bar']['length']);
|
$this->assertEquals(null, $columns['bar']->getlength());
|
||||||
$this->assertEquals(10, $columns['bar']['precision']);
|
$this->assertEquals(10, $columns['bar']->getprecision());
|
||||||
$this->assertEquals(4, $columns['bar']['scale']);
|
$this->assertEquals(4, $columns['bar']->getscale());
|
||||||
$this->assertEquals(false, $columns['bar']['unsigned']);
|
$this->assertEquals(false, $columns['bar']->getunsigned());
|
||||||
$this->assertEquals(false, $columns['bar']['fixed']);
|
$this->assertEquals(false, $columns['bar']->getfixed());
|
||||||
$this->assertEquals(false, $columns['bar']['notnull']);
|
$this->assertEquals(false, $columns['bar']->getnotnull());
|
||||||
$this->assertEquals(null, $columns['bar']['default']);
|
$this->assertEquals(null, $columns['bar']->getdefault());
|
||||||
$this->assertType('array', $columns['bar']['platformDetails']);
|
$this->assertType('array', $columns['bar']->getPlatformOptions());
|
||||||
|
|
||||||
$this->assertEquals('baz1', strtolower($columns['baz1']['name']));
|
$this->assertEquals('baz1', strtolower($columns['baz1']->getname()));
|
||||||
$this->assertType('Doctrine\DBAL\Types\DateTimeType', $columns['baz1']['type']);
|
$this->assertType('Doctrine\DBAL\Types\DateTimeType', $columns['baz1']->gettype());
|
||||||
$this->assertEquals(null, $columns['baz1']['length']);
|
$this->assertEquals(false, $columns['baz1']->getnotnull());
|
||||||
$this->assertEquals(null, $columns['baz1']['precision']);
|
$this->assertEquals(null, $columns['baz1']->getdefault());
|
||||||
$this->assertEquals(null, $columns['baz1']['scale']);
|
$this->assertType('array', $columns['baz1']->getPlatformOptions());
|
||||||
$this->assertEquals(false, $columns['baz1']['unsigned']);
|
|
||||||
$this->assertEquals(false, $columns['baz1']['fixed']);
|
|
||||||
$this->assertEquals(false, $columns['baz1']['notnull']);
|
|
||||||
$this->assertEquals(null, $columns['baz1']['default']);
|
|
||||||
$this->assertType('array', $columns['baz1']['platformDetails']);
|
|
||||||
|
|
||||||
$this->assertEquals('baz2', strtolower($columns['baz2']['name']));
|
$this->assertEquals('baz2', strtolower($columns['baz2']->getname()));
|
||||||
$this->assertContains($columns['baz2']['type']->getName(), array('Time', 'Date', 'DateTime'));
|
$this->assertContains($columns['baz2']->gettype()->getName(), array('Time', 'Date', 'DateTime'));
|
||||||
$this->assertEquals(null, $columns['baz2']['length']);
|
$this->assertEquals(false, $columns['baz2']->getnotnull());
|
||||||
$this->assertEquals(null, $columns['baz2']['precision']);
|
$this->assertEquals(null, $columns['baz2']->getdefault());
|
||||||
$this->assertEquals(null, $columns['baz2']['scale']);
|
$this->assertType('array', $columns['baz2']->getPlatformOptions());
|
||||||
$this->assertEquals(false, $columns['baz2']['unsigned']);
|
|
||||||
$this->assertEquals(false, $columns['baz2']['fixed']);
|
|
||||||
$this->assertEquals(false, $columns['baz2']['notnull']);
|
|
||||||
$this->assertEquals(null, $columns['baz2']['default']);
|
|
||||||
$this->assertType('array', $columns['baz2']['platformDetails']);
|
|
||||||
|
|
||||||
$this->assertEquals('baz3', strtolower($columns['baz3']['name']));
|
$this->assertEquals('baz3', strtolower($columns['baz3']->getname()));
|
||||||
$this->assertContains($columns['baz2']['type']->getName(), array('Time', 'Date', 'DateTime'));
|
$this->assertContains($columns['baz2']->gettype()->getName(), array('Time', 'Date', 'DateTime'));
|
||||||
$this->assertEquals(null, $columns['baz3']['length']);
|
$this->assertEquals(false, $columns['baz3']->getnotnull());
|
||||||
$this->assertEquals(null, $columns['baz3']['precision']);
|
$this->assertEquals(null, $columns['baz3']->getdefault());
|
||||||
$this->assertEquals(null, $columns['baz3']['scale']);
|
$this->assertType('array', $columns['baz3']->getPlatformOptions());
|
||||||
$this->assertEquals(false, $columns['baz3']['unsigned']);
|
|
||||||
$this->assertEquals(false, $columns['baz3']['fixed']);
|
|
||||||
$this->assertEquals(false, $columns['baz3']['notnull']);
|
|
||||||
$this->assertEquals(null, $columns['baz3']['default']);
|
|
||||||
$this->assertType('array', $columns['baz3']['platformDetails']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListTableIndexes()
|
public function testListTableIndexes()
|
||||||
{
|
{
|
||||||
|
$data = array();
|
||||||
$data['options'] = array(
|
$data['options'] = array(
|
||||||
'indexes' => array(
|
'indexes' => array(
|
||||||
'test_index_name' => array(
|
'test_index_name' => array(
|
||||||
@ -183,22 +185,22 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
|
|||||||
$this->createTestTable('list_table_indexes_test', $data);
|
$this->createTestTable('list_table_indexes_test', $data);
|
||||||
|
|
||||||
$tableIndexes = $this->_sm->listTableIndexes('list_table_indexes_test');
|
$tableIndexes = $this->_sm->listTableIndexes('list_table_indexes_test');
|
||||||
|
|
||||||
$this->assertEquals(3, count($tableIndexes));
|
$this->assertEquals(3, count($tableIndexes));
|
||||||
|
|
||||||
$this->assertEquals(array('id'), $tableIndexes['primary']['columns']);
|
$this->assertEquals(array('id'), array_map('strtolower', $tableIndexes['primary']->getColumns()));
|
||||||
$this->assertTrue($tableIndexes['primary']['unique']);
|
$this->assertTrue($tableIndexes['primary']->isUnique());
|
||||||
$this->assertTrue($tableIndexes['primary']['primary']);
|
$this->assertTrue($tableIndexes['primary']->isPrimary());
|
||||||
|
|
||||||
$this->assertEquals('test_index_name', $tableIndexes['test_index_name']['name']);
|
$this->assertEquals('test_index_name', $tableIndexes['test_index_name']->getName());
|
||||||
$this->assertEquals(array('test'), $tableIndexes['test_index_name']['columns']);
|
$this->assertEquals(array('test'), array_map('strtolower', $tableIndexes['test_index_name']->getColumns()));
|
||||||
$this->assertTrue($tableIndexes['test_index_name']['unique']);
|
$this->assertTrue($tableIndexes['test_index_name']->isUnique());
|
||||||
$this->assertFalse($tableIndexes['test_index_name']['primary']);
|
$this->assertFalse($tableIndexes['test_index_name']->isPrimary());
|
||||||
|
|
||||||
$this->assertEquals('test_composite_idx', $tableIndexes['test_composite_idx']['name']);
|
$this->assertEquals('test_composite_idx', $tableIndexes['test_composite_idx']->getName());
|
||||||
$this->assertEquals(array('id', 'test'), $tableIndexes['test_composite_idx']['columns']);
|
$this->assertEquals(array('id', 'test'), array_map('strtolower', $tableIndexes['test_composite_idx']->getColumns()));
|
||||||
$this->assertFalse($tableIndexes['test_composite_idx']['unique']);
|
$this->assertFalse($tableIndexes['test_composite_idx']->isUnique());
|
||||||
$this->assertFalse($tableIndexes['test_composite_idx']['primary']);
|
$this->assertFalse($tableIndexes['test_composite_idx']->isPrimary());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDropAndCreateIndex()
|
public function testDropAndCreateIndex()
|
||||||
@ -214,11 +216,48 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
|
|||||||
|
|
||||||
$this->_sm->dropAndCreateIndex('test_create_index', 'test', $index);
|
$this->_sm->dropAndCreateIndex('test_create_index', 'test', $index);
|
||||||
$tableIndexes = $this->_sm->listTableIndexes('test_create_index');
|
$tableIndexes = $this->_sm->listTableIndexes('test_create_index');
|
||||||
|
$this->assertType('array', $tableIndexes);
|
||||||
|
|
||||||
$this->assertEquals('test', $tableIndexes['test']['name']);
|
$this->assertEquals('test', $tableIndexes['test']->getName());
|
||||||
$this->assertEquals(array('test'), $tableIndexes['test']['columns']);
|
$this->assertEquals(array('test'), array_map('strtolower', $tableIndexes['test']->getColumns()));
|
||||||
$this->assertTrue($tableIndexes['test']['unique']);
|
$this->assertTrue($tableIndexes['test']->isUnique());
|
||||||
$this->assertFalse($tableIndexes['test']['primary']);
|
$this->assertFalse($tableIndexes['test']->isPrimary());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListForeignKeys()
|
||||||
|
{
|
||||||
|
if(!$this->_conn->getDatabasePlatform()->supportsForeignKeyConstraints()) {
|
||||||
|
$this->markTestSkipped('Does not support foreign key constraints.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->createTestTable('test_create_fk1');
|
||||||
|
$this->createTestTable('test_create_fk2');
|
||||||
|
|
||||||
|
$definition = array(
|
||||||
|
'name' => 'foreign_key_test_fk',
|
||||||
|
'local' => array('foreign_key_test'),
|
||||||
|
'foreign' => array('id'),
|
||||||
|
'foreignTable' => 'test_create_fk2',
|
||||||
|
'onUpdate' => 'CASCADE',
|
||||||
|
'onDelete' => 'CASCADE',
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->_sm->createForeignKey('test_create_fk1', $definition);
|
||||||
|
|
||||||
|
$fkeys = $this->_sm->listTableForeignKeys('test_create_fk1');
|
||||||
|
|
||||||
|
$this->assertEquals(1, count($fkeys));
|
||||||
|
$this->assertType('Doctrine\DBAL\Schema\ForeignKeyConstraint', $fkeys[0]);
|
||||||
|
$this->assertEquals(array('foreign_key_test'), array_map('strtolower', $fkeys[0]->getLocalColumns()));
|
||||||
|
$this->assertEquals(array('id'), array_map('strtolower', $fkeys[0]->getForeignColumns()));
|
||||||
|
$this->assertEquals('test_create_fk2', strtolower($fkeys[0]->getForeignTableName()));
|
||||||
|
|
||||||
|
if($fkeys[0]->hasOption('onUpdate')) {
|
||||||
|
$this->assertEquals('CASCADE', $fkeys[0]->getOption('onUpdate'));
|
||||||
|
}
|
||||||
|
if($fkeys[0]->hasOption('onDelete')) {
|
||||||
|
$this->assertEquals('CASCADE', $fkeys[0]->getOption('onDelete'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getCreateExampleViewSql()
|
protected function getCreateExampleViewSql()
|
||||||
|
@ -135,6 +135,8 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$q->setParameter('name', 'Testing');
|
$q->setParameter('name', 'Testing');
|
||||||
$test = $q->getSingleResult();
|
$test = $q->getSingleResult();
|
||||||
|
|
||||||
|
$this->assertType('DateTime', $test->version);
|
||||||
|
|
||||||
// Manually increment the version datetime column
|
// Manually increment the version datetime column
|
||||||
$format = $this->_em->getConnection()->getDatabasePlatform()->getDateTimeFormatString();
|
$format = $this->_em->getConnection()->getDatabasePlatform()->getDateTimeFormatString();
|
||||||
$this->_conn->execute('UPDATE optimistic_timestamp SET version = ? WHERE id = ?', array(date($format, strtotime($test->version->format($format)) + 3600), $test->id));
|
$this->_conn->execute('UPDATE optimistic_timestamp SET version = ? WHERE id = ?', array(date($format, strtotime($test->version->format($format)) + 3600), $test->id));
|
||||||
|
@ -65,6 +65,8 @@ class MySqlSchemaToolTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
|
|
||||||
public function testGetUpdateSchemaSql()
|
public function testGetUpdateSchemaSql()
|
||||||
{
|
{
|
||||||
|
$this->markTestSkipped('Update Schema Tool stuff wont be needed anymore soon!');
|
||||||
|
|
||||||
$classes = array(
|
$classes = array(
|
||||||
$this->_em->getClassMetadata(__NAMESPACE__ . '\SchemaToolEntityA')
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\SchemaToolEntityA')
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user