Файл: src/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php
Строк: 101
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license. For more information, see
* <http://www.doctrine-project.org>.
*/
namespace DoctrineDBALSchemaVisitor;
use DoctrineDBALPlatformsAbstractPlatform;
use DoctrineDBALSchemaTable;
use DoctrineDBALSchemaForeignKeyConstraint;
use DoctrineDBALSchemaSequence;
use DoctrineDBALSchemaSchemaException;
/**
* Gathers SQL statements that allow to completely drop the current schema.
*
* @link www.doctrine-project.org
* @since 2.0
* @author Benjamin Eberlei <kontakt@beberlei.de>
*/
class DropSchemaSqlCollector extends AbstractVisitor
{
/**
* @var SplObjectStorage
*/
private $constraints;
/**
* @var SplObjectStorage
*/
private $sequences;
/**
* @var SplObjectStorage
*/
private $tables;
/**
* @var AbstractPlatform
*/
private $platform;
/**
* @param AbstractPlatform $platform
*/
public function __construct(AbstractPlatform $platform)
{
$this->platform = $platform;
$this->clearQueries();
}
/**
* {@inheritdoc}
*/
public function acceptTable(Table $table)
{
$this->tables->attach($table);
}
/**
* {@inheritdoc}
*/
public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint)
{
if (strlen($fkConstraint->getName()) == 0) {
throw SchemaException::namedForeignKeyRequired($localTable, $fkConstraint);
}
$this->constraints->attach($fkConstraint, $localTable);
}
/**
* {@inheritdoc}
*/
public function acceptSequence(Sequence $sequence)
{
$this->sequences->attach($sequence);
}
/**
* @return void
*/
public function clearQueries()
{
$this->constraints = new SplObjectStorage();
$this->sequences = new SplObjectStorage();
$this->tables = new SplObjectStorage();
}
/**
* @return array
*/
public function getQueries()
{
$sql = array();
foreach ($this->constraints as $fkConstraint) {
$localTable = $this->constraints[$fkConstraint];
$sql[] = $this->platform->getDropForeignKeySQL($fkConstraint, $localTable);
}
foreach ($this->sequences as $sequence) {
$sql[] = $this->platform->getDropSequenceSQL($sequence);
}
foreach ($this->tables as $table) {
$sql[] = $this->platform->getDropTableSQL($table);
}
return $sql;
}
}