Skip to content

Commit

Permalink
added doctrine migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael committed Oct 20, 2011
1 parent 432f27b commit f9e6557
Show file tree
Hide file tree
Showing 29 changed files with 2,419 additions and 18 deletions.
24 changes: 10 additions & 14 deletions application/Bootstrap.php
Expand Up @@ -12,27 +12,23 @@ public function _initAutoloaderNamespaces()
require_once APPLICATION_PATH .
'/../library/Doctrine/Common/ClassLoader.php';

require_once APPLICATION_PATH .
'/../library/Symfony/Component/Di/sfServiceContainerAutoloader.php';

sfServiceContainerAutoloader::register();
$autoloader = \Zend_Loader_Autoloader::getInstance();
$fmmAutoloader = new \Doctrine\Common\ClassLoader('Bisna');

$autoloader->pushAutoloader(
array($fmmAutoloader, 'loadClass'),
'Bisna'
);
$fmmAutoloader = new \Doctrine\Common\ClassLoader('Bisna');
$autoloader->pushAutoloader(array($fmmAutoloader, 'loadClass'), 'Bisna');

$fmmAutoloader = new \Doctrine\Common\ClassLoader('App');
$autoloader->pushAutoloader(array($fmmAutoloader, 'loadClass'), 'App');
$fmmAutoloader = new \Doctrine\Common\ClassLoader('Boilerplate');

$autoloader->pushAutoloader(
array($fmmAutoloader, 'loadClass'),
'Boilerplate'
);

require_once APPLICATION_PATH .
'/../library/Symfony/Component/Di/sfServiceContainerAutoloader.php';
$fmmAutoloader = new \Doctrine\Common\ClassLoader('Boilerplate');
$autoloader->pushAutoloader(array($fmmAutoloader, 'loadClass'), 'Boilerplate');

sfServiceContainerAutoloader::register();
$fmmAutoloader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL\Migrations');
$autoloader->pushAutoloader(array($fmmAutoloader, 'loadClass'), 'Doctrine\DBAL\Migrations');
}

public function _initModuleLayout()
Expand Down
13 changes: 9 additions & 4 deletions bin/doctrine.php
Expand Up @@ -22,6 +22,9 @@
if (($em = $container->getEntityManager(getenv('EM') ?: $container->defaultEntityManager)) !== null) {
$helperSet['em'] = new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em);
}

$helperSet['dialog'] = new \Symfony\Component\Console\Helper\DialogHelper();

} catch (\Exception $e) {
$cli->renderException($e, new \Symfony\Component\Console\Output\ConsoleOutput());
}
Expand All @@ -30,11 +33,14 @@
$cli->setHelperSet(new \Symfony\Component\Console\Helper\HelperSet($helperSet));

$cli->addCommands(array(
// DBAL Commands
new \Doctrine\DBAL\Tools\Console\Command\RunSqlCommand(),
new \Doctrine\DBAL\Tools\Console\Command\ImportCommand(),

// ORM Commands
new \Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand(),
new \Doctrine\DBAL\Migrations\Tools\Console\Command\ExecuteCommand(),
new \Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand(),
new \Doctrine\DBAL\Migrations\Tools\Console\Command\MigrateCommand(),
new \Doctrine\DBAL\Migrations\Tools\Console\Command\StatusCommand(),
new \Doctrine\DBAL\Migrations\Tools\Console\Command\VersionCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\MetadataCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand(),
Expand All @@ -48,7 +54,6 @@
new \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand(),
new \Doctrine\ORM\Tools\Console\Command\ConvertMappingCommand(),
new \Doctrine\ORM\Tools\Console\Command\RunDqlCommand(),

));

$cli->run();
3 changes: 3 additions & 0 deletions bin/migration-apply.php
@@ -0,0 +1,3 @@
<?php
require_once('bootstrap.php');
passthru('php doctrine.php migrations:migrate');
3 changes: 3 additions & 0 deletions bin/migration-create.php
@@ -0,0 +1,3 @@
<?php
require_once('bootstrap.php');
passthru('php doctrine.php migration:diff') . PHP_EOL;
3 changes: 3 additions & 0 deletions bin/migration-dry.php
@@ -0,0 +1,3 @@
<?php
require_once('bootstrap.php');
passthru('php doctrine.php migrations:migrate --dry-run');
3 changes: 3 additions & 0 deletions bin/migration-status.php
@@ -0,0 +1,3 @@
<?php
require_once('bootstrap.php');
passthru('php doctrine.php migration:status') . PHP_EOL;
4 changes: 4 additions & 0 deletions bin/migrations.yml
@@ -0,0 +1,4 @@
name: Doctrine Migrations
migrations_namespace: DoctrineMigrations
table_name: doctrine_migration_versions
migrations_directory: ../data/migrations
Empty file added data/migrations/.gitignore
Empty file.
3 changes: 3 additions & 0 deletions library/App/Entity/Quote.php
Expand Up @@ -48,4 +48,7 @@ public function __toString()
{
return $this->getWording();
}



}
8 changes: 8 additions & 0 deletions library/Doctrine/DBAL/Migrations/AbortMigrationException.php
@@ -0,0 +1,8 @@
<?php

namespace Doctrine\DBAL\Migrations;

class AbortMigrationException extends MigrationException
{

}
178 changes: 178 additions & 0 deletions library/Doctrine/DBAL/Migrations/AbstractMigration.php
@@ -0,0 +1,178 @@
<?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 LGPL. For more information, see
* <http://www.doctrine-project.org>.
*/

namespace Doctrine\DBAL\Migrations;

use Doctrine\DBAL\Schema\Schema,
Doctrine\DBAL\Migrations\Configuration\Configuration,
Doctrine\DBAL\Migrations\Version;

/**
* Abstract class for individual migrations to extend from.
*
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @link www.doctrine-project.org
* @since 2.0
* @author Jonathan H. Wage <jonwage@gmail.com>
*/
abstract class AbstractMigration
{
/**
* The Migrations Configuration instance for this migration
*
* @var Configuration
*/
private $configuration;

/**
* The OutputWriter object instance used for outputting information
*
* @var OutputWriter
*/
private $outputWriter;

/**
* The Doctrine\DBAL\Connection instance we are migrating
*
* @var Connection
*/
protected $connection;

/**
* Reference to the SchemaManager instance referened by $_connection
*
* @var \Doctrine\DBAL\Schema\AbstractSchemaManager
*/
protected $sm;

/**
* Reference to the DatabasePlatform instance referenced by $_conection
*
* @var \Doctrine\DBAL\Platforms\AbstractPlatform
*/
protected $platform;

/**
* Reference to the Version instance representing this migration
*
* @var Version
*/
protected $version;

public function __construct(Version $version)
{
$this->configuration = $version->getConfiguration();
$this->outputWriter = $this->configuration->getOutputWriter();
$this->connection = $this->configuration->getConnection();
$this->sm = $this->connection->getSchemaManager();
$this->platform = $this->connection->getDatabasePlatform();
$this->version = $version;
}

/**
* Get custom migration name
*
* @return string
*/
public function getName()
{
}

abstract public function up(Schema $schema);
abstract public function down(Schema $schema);

protected function addSql($sql, array $params = array())
{
return $this->version->addSql($sql, $params);
}

protected function write($message)
{
$this->outputWriter->write($message);
}

protected function throwIrreversibleMigrationException($message = null)
{
if ($message === null) {
$message = 'This migration is irreversible and cannot be reverted.';
}
throw new IrreversibleMigrationException($message);
}

/**
* Print a warning message if the condition evalutes to TRUE.
*
* @param bool $condition
* @param string $message
*/
public function warnIf($condition, $message = '')
{
$message = (strlen($message)) ? $message : 'Unknown Reason';

if ($condition === true) {
$this->outputWriter->write(' <warning>Warning during ' . $this->version->getExecutionState() . ': ' . $message . '</warning>');
}
}

/**
* Abort the migration if the condition evalutes to TRUE.
*
* @param bool $condition
* @param string $message
*/
public function abortIf($condition, $message = '')
{
$message = (strlen($message)) ? $message : 'Unknown Reason';

if ($condition === true) {
throw new AbortMigrationException($message);
}
}

/**
* Skip this migration (but not the next ones) if condition evalutes to TRUE.
*
* @param bool $condition
* @param string $message
*/
public function skipIf($condition, $message = '')
{
$message = (strlen($message)) ? $message : 'Unknown Reason';

if ($condition === true) {
throw new SkipMigrationException($message);
}
}

public function preUp(Schema $schema)
{
}

public function postUp(Schema $schema)
{
}

public function preDown(Schema $schema)
{
}

public function postDown(Schema $schema)
{
}
}
@@ -0,0 +1,93 @@
<?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 LGPL. For more information, see
* <http://www.doctrine-project.org>.
*/

namespace Doctrine\DBAL\Migrations\Configuration;

use Doctrine\DBAL\Migrations\MigrationsException;

/**
* Abstract Migration Configuration class for loading configuration information
* from a configuration file (xml or yml).
*
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @link www.doctrine-project.org
* @since 2.0
* @author Jonathan H. Wage <jonwage@gmail.com>
*/
abstract class AbstractFileConfiguration extends Configuration
{
/**
* The configuration file used to load configuration information
*
* @var string
*/
private $file;

/**
* Whether or not the configuration file has been loaded yet or not
*
* @var bool
*/
private $loaded = false;

/**
* Load the information from the passed configuration file
*
* @param string $file The path to the configuration file
* @return void
* @throws MigrationException $exception Throws exception if configuration file was already loaded
*/
public function load($file)
{
if ($this->loaded) {
throw MigrationsException::configurationFileAlreadyLoaded();
}
if (file_exists($path = getcwd() . '/' . $file)) {
$file = $path;
}
$this->file = $file;
$this->doLoad($file);
$this->loaded = true;
}

protected function getDirectoryRelativeToFile($file, $input)
{
$path = realpath(dirname($file) . '/' . $input);
if ($path !== false) {
$directory = $path;
} else {
$directory = $input;
}
return $directory;
}

public function getFile()
{
return $this->file;
}

/**
* Abstract method that each file configuration driver must implement to
* load the given configuration file whether it be xml, yaml, etc. or something
* else.
*
* @param string $file The path to a configuration file.
*/
abstract protected function doLoad($file);
}

0 comments on commit f9e6557

Please sign in to comment.