Commit d2b0181e authored by jsor's avatar jsor

Rework schema column definition event

parent a1b18d86
......@@ -26,7 +26,7 @@ use Doctrine\Common\EventArgs,
Doctrine\DBAL\Schema\Column;
/**
* Event Arguments used when the portable column definition is generated inside Doctrine\DBAL\Schema\AbstractSchemaManager.
* Event Arguments used when the portable tableColumn definition is generated inside Doctrine\DBAL\Schema\AbstractSchemaManager.
*
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @link www.doctrine-project.com
......@@ -37,10 +37,17 @@ use Doctrine\Common\EventArgs,
class SchemaColumnDefinitionEventArgs extends SchemaEventArgs
{
/**
* @var array
* @var \Doctrine\DBAL\Schema\Column $column
*/
private $_column = null;
/**
* Raw column data as fetched from the database
*
* @var array
*/
private $_tableColumn = null;
/**
* @var string
*/
......@@ -57,32 +64,49 @@ class SchemaColumnDefinitionEventArgs extends SchemaEventArgs
private $_connection = null;
/**
* @var \Doctrine\DBAL\Schema\Column $columnDefinition
* @param array $tableColumn
* @param string $table
* @param string $database
* @param \Doctrine\DBAL\Connection $conn
*/
private $_columnDefinition = null;
public function __construct(array $tableColumn, $table, $database, Connection $connection)
{
$this->_tableColumn = $tableColumn;
$this->_table = $table;
$this->_database = $database;
$this->_connection = $connection;
}
/**
* @param type $column
* @param type $table
* @param type $database
* @param \Doctrine\DBAL\Connection $conn
* Allows to clear the column which means the column will be excluded from
* tables column list.
*
* @param null|\Doctrine\DBAL\Schema\Column $column
* @return SchemaColumnDefinitionEventArgs
*/
public function __construct($column, $table, $database, Connection $connection)
public function setColumn(Column $column = null)
{
$this->_column = $column;
$this->_table = $table;
$this->_database = $database;
$this->_connection = $connection;
$this->_column = $column;
return $this;
}
/**
* @return array
* @return array|\Doctrine\DBAL\Schema\Column
*/
public function getColumn()
{
return $this->_column;
}
/**
* @return array
*/
public function getTableColumn()
{
return $this->_tableColumn;
}
/**
* @return string
*/
......@@ -114,23 +138,4 @@ class SchemaColumnDefinitionEventArgs extends SchemaEventArgs
{
return $this->_connection->getDatabasePlatform();
}
/**
* @param \Doctrine\DBAL\Schema\Column $columnDefinition
* @return SchemaColumnDefinitionEventArgs
*/
public function setColumnDefinition(Column $columnDefinition)
{
$this->_columnDefinition = $columnDefinition;
return $this;
}
/**
* @return \Doctrine\DBAL\Schema\Column
*/
public function getColumnDefinition()
{
return $this->_columnDefinition;
}
}
......@@ -630,25 +630,25 @@ abstract class AbstractSchemaManager
$eventManager = $this->_platform->getEventManager();
$list = array();
foreach ($tableColumns as $key => $column) {
$columnDefinition = null;
foreach ($tableColumns as $key => $tableColumn) {
$column = null;
$defaultPrevented = false;
if (null !== $eventManager && $eventManager->hasListeners(Events::onSchemaColumnDefinition)) {
$eventArgs = new SchemaColumnDefinitionEventArgs($column, $table, $database, $this->_conn);
$eventArgs = new SchemaColumnDefinitionEventArgs($tableColumn, $table, $database, $this->_conn);
$eventManager->dispatchEvent(Events::onSchemaColumnDefinition, $eventArgs);
$defaultPrevented = $eventArgs->isDefaultPrevented();
$columnDefinition = $eventArgs->getColumnDefinition();
$column = $eventArgs->getColumn();
}
if (!$defaultPrevented) {
$columnDefinition = $this->_getPortableTableColumnDefinition($column);
$column = $this->_getPortableTableColumnDefinition($tableColumn);
}
if ($columnDefinition) {
$name = strtolower($columnDefinition->getQuotedName($this->_platform));
$list[$name] = $columnDefinition;
if ($column) {
$name = strtolower($column->getQuotedName($this->_platform));
$list[$name] = $column;
}
}
return $list;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment